ZGlmZiAtLWdpdCBhLy5jaGVja3BhdGNoLmNvbmYgYi8uY2hlY2twYXRjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3N2RiOWUKLS0tIC9kZXYvbnVsbAorKysgYi8uY2hlY2twYXRjaC5jb25mCkBAIC0wLDAgKzEsMTQgQEAKKyMgTm90IExpbnV4LCBzbyBkb24ndCBleHBlY3QgYSBMaW51eCB0cmVlLgorLS1uby10cmVlCisKKyMgVGVtcG9yYXJ5IGZvciBmYWxzZSBwb3NpdGl2ZSBpbiBjaGVja3BhdGNoCistLWlnbm9yZSBDT01QTEVYX01BQ1JPCisKKyMgRm9yIENPTkZJR19TWVNfSTJDX05PUFJPQkVTCistLWlnbm9yZSBNVUxUSVNUQVRFTUVOVF9NQUNST19VU0VfRE9fV0hJTEUKKworIyBGb3Igc2ltcGxlX3N0cnRvdWwKKy0taWdub3JlIENPTlNJREVSX0tTVFJUTworCisjIEZvciBtaW4vbWF4CistLWlnbm9yZSBNSU5NQVgKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDcwYTExZjcuLmZmNGJhZTAgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMzYsNiArMzYsNyBAQAogL3UtYm9vdC5sZHMKIC91LWJvb3QudWJsCiAvdS1ib290LmR0YgorL3UtYm9vdC5zYgogCiAjCiAjIEdlbmVyYXRlZCBmaWxlcwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAwMzBmZTRhLi5mNmY2YjcyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMzA1LDEwICszMDUsNiBAQAogCXNuYXBwZXI5MjYwCQlBUk05MjZFSlMgKEFUOTFTQU05MjYwIFNvQykKIAlzbmFwcGVyOWcyMAkJQVJNOTI2RUpTIChBVDkxU0FNOUcyMCBTb0MpCiAKLUVyYW4gTWFuIDxlcmFuQG5iYXNlLmNvLmlsPgotCi0JRVZCNjQyNjBfNzUwQ1gJTVBDNzUwQ1gKLQogQW5kcmVhICJsbGFuZHJlIiBNYXJzb24gPGFuZHJlYS5tYXJzb25AZGF2ZS10ZWNoLml0PgogCiAJUFBDaGFtZWxlb25FVkIJUFBDNDA1RVAKQEAgLTU0MywxMCArNTM5LDEwIEBACiAJcnNkcHJvdG8JTVBDODI2MAogCiAJRVZCNjQyNjAJTVBDN3h4Xzc0eHgKKwlFVkI2NDI2MF83NTBDWAlNUEM3NTBDWAlbRXJhbiBNYW4gPGVyYW5AbmJhc2UuY28uaWw+XQogCiAJdmVyc2F0aWxlCUFSTTkyNkVKLVMKIAotCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEFSTSBTeXN0ZW1zOgkJCQkJCQkJIwogIwkJCQkJCQkJCSMKQEAgLTc3NSwxMCArNzcxLDYgQEAKIAogCW9tYXA3MzBwMglBUk05MjZFSlMKIAotTWFuaWthbmRhbiBQaWxsYWkgPG1hbmkucGlsbGFpQHRpLmNvbT4KLQotCW9tYXAzX2V2bQlBUk0gQVJNVjcgKE9NQVAzeHggU29DKQotCiBTdGVsaWFuIFBvcCA8c3RlbGlhbi5wb3BAbGVhZHRlY2hkZXNpZ24uY29tPgogCiAJYXQ5MXNhbTkyNjBlawlBUk05MjZFSlMgKEFUOTFTQU05MjYwIFNvQykKQEAgLTc4Niw2ICs3NzgsMTAgQEAKIAlhdDkxc2FtOTI2M2VrCUFSTTkyNkVKUyAoQVQ5MVNBTTkyNjMgU29DKQogCWF0OTFzYW05cmxlawlBUk05MjZFSlMgKEFUOTFTQU05UkwgU29DKQogCitUb20gUmluaSA8dHJpbmlAdGkuY29tPgorCisJb21hcDNfZXZtCUFSTSBBUk1WNyAoT01BUDN4eCBTb0MpCisKIFRvbSBSaXggPFRvbS5SaXhAd2luZHJpdmVyLmNvbT4KIAogCW9tYXAzX3pvb20yCUFSTSBBUk1WNyAoT01BUDN4eCBTb0MpCkBAIC04MTcsMTEgKzgxMyw2IEBACiAJbWFnbmVzaXVtCWkuTVgyNwogCW1nY29nZTN1bglBUk05MjZFSlMgKEtpcmt3b29kIFNvQykKIAotUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgotCi0JY3NiMjI2CQl4c2NhbGUvcHhhCi0JaW5ub2tvbQkJeHNjYWxlL3B4YQotCiBNaWNoYWVsIFNjaHdpbmdlbiA8bWljaGFlbEBzY2h3aW5nZW4ub3JnPgogCiAJYWN0dXgxCQl4c2NhbGUvaXhwCkBAIC04NTAsNiArODQxLDcgQEAKIAogCW9tYXA0X3BhbmRhCUFSTSBBUk1WNyAoT01BUDR4eCBTb0MpCiAJb21hcDRfc2RwNDQzMAlBUk0gQVJNVjcgKE9NQVA0eHggU29DKQorCW9tYXA1X2V2bQlBUk0gQVJNVjcgKE9NQVA1eHggU29jKQogCiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgogCkBAIC04NTksNiArODUxLDcgQEAKIAlwYWxtdGMJCXhzY2FsZS9weGEKIAl2cGFjMjcwCQl4c2NhbGUvcHhhCiAJemlwaXR6MgkJeHNjYWxlL3B4YQorCW0yOGV2awkJaS5NWDI4CiAgCWVmaWthbXgJCWkuTVg1MQogCWVmaWthc2IJCWkuTVg1MQogCkBAIC0xMTUxLDYgKzExNDQsNyBAQAogTWFjcGF1bCBMaW4gPG1hY3BhdWxAYW5kZXN0ZWNoLmNvbT4KIAogCUFEUC1BRzEwMQlOMTIxMyAoQUcxMDEgU29DKQorCUFEUC1BRzEwMVAJTjEyMTMgKEFHMTAxUCBYQzUgRlBHQSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBFbmQgb2YgTUFJTlRBSU5FUlMgbGlzdAkJCQkJCSMKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYzAxZjA4YS4uN2FmZDM1YiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTI5MCwxNiArMjkwLDkgQEAKIExJQlMgKz0gYXBpL2xpYmFwaS5vCiBMSUJTICs9IHBvc3QvbGlicG9zdC5vCiAKLWlmZXEgKCQoU09DKSxhbTMzeHgpCitpZm5lcSAoJChDT05GSUdfQU0zMzVYKSQoQ09ORklHX09NQVAzNFhYKSQoQ09ORklHX09NQVA0NFhYKSQoQ09ORklHX09NQVA1NFhYKSwpCiBMSUJTICs9ICQoQ1BVRElSKS9vbWFwLWNvbW1vbi9saWJvbWFwLWNvbW1vbi5vCiBlbmRpZgotaWZlcSAoJChTT0MpLG9tYXAzKQotTElCUyArPSAkKENQVURJUikvb21hcC1jb21tb24vbGlib21hcC1jb21tb24ubwotZW5kaWYKLWlmZXEgKCQoU09DKSxvbWFwNCkKLUxJQlMgKz0gJChDUFVESVIpL29tYXAtY29tbW9uL2xpYm9tYXAtY29tbW9uLm8KLWVuZGlmCi0KIGlmZXEgKCQoU09DKSxzNXBjMXh4KQogTElCUyArPSAkKENQVURJUikvczVwLWNvbW1vbi9saWJzNXAtY29tbW9uLm8KIGVuZGlmCkBAIC00MjQsNiArNDE3LDEwIEBACiAJCXJtICQob2JqKXUtYm9vdC11YmwuYmluCiAJCXJtICQob2JqKXNwbC91LWJvb3Qtc3BsLXBhZC5iaW4KIAorJChvYmopdS1ib290LnNiOiAgICAgICAkKG9iail1LWJvb3QuYmluICQob2JqKXNwbC91LWJvb3Qtc3BsLmJpbgorCQllbGZ0b3NiIC16ZGYgaW14MjggLWMgJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5iZCBcCisJCQktbyAkKG9iail1LWJvb3Quc2IKKwogaWZlcSAoJChDT05GSUdfU0FOREJPWCkseSkKIEdFTl9VQk9PVCA9IFwKIAkJY2QgJChMTkRJUikgJiYgJChDQykgJChTWU1TKSAtVCAkKG9iail1LWJvb3QubGRzIFwKQEAgLTc2Myw2ICs3NjAsNyBAQAogCSAgICAgICAkKG9iailhcmNoL2JsYWNrZmluL2NwdS9ib290cm9tLWFzbS1vZmZzZXRzLltjaHNdCSAgXAogCSAgICAgICAkKG9iailhcmNoL2JsYWNrZmluL2NwdS9pbml0LntsZHMsZWxmfQogCUBybSAtZiAkKG9iailpbmNsdWRlL2JtcF9sb2dvLmgKKwlAcm0gLWYgJChvYmopaW5jbHVkZS9ibXBfbG9nb19kYXRhLmgKIAlAcm0gLWYgJChvYmopbGliL2FzbS1vZmZzZXRzLnMKIAlAcm0gLWYgJChvYmopaW5jbHVkZS9nZW5lcmF0ZWQvYXNtLW9mZnNldHMuaAogCUBybSAtZiAkKG9iaikkKENQVURJUikvJChTT0MpL2FzbS1vZmZzZXRzLnMKQEAgLTc5MSw2ICs3ODksNyBAQAogCUBybSAtZiAkKG9iail1LWJvb3QuaW14CiAJQHJtIC1mICQob2JqKXUtYm9vdC51YmwKIAlAcm0gLWYgJChvYmopdS1ib290LmR0YgorCUBybSAtZiAkKG9iail1LWJvb3Quc2IKIAlAcm0gLWYgJChvYmopdG9vbHMve2Vudi9jcmMzMi5jLGluY2Etc3dhcC1ieXRlc30KIAlAcm0gLWYgJChvYmopYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjR4L2JlZGJ1Z182MDNlLmMKIAlAcm0gLWZyICQob2JqKWluY2x1ZGUvYXNtL3Byb2MgJChvYmopaW5jbHVkZS9hc20vYXJjaCAkKG9iailpbmNsdWRlL2FzbQpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDczY2EwNDIuLjA3ZjFkMTEgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEwMjcsNiArMTAyNywxMiBAQAogCQkJRGVmaW5lIHRoaXMgdG8gdXNlIGkvbyBmdW5jdGlvbnMgaW5zdGVhZCBvZiBtYWNyb3MKIAkJCShzb21lIGhhcmR3YXJlIHdvbnQgd29yayB3aXRoIG1hY3JvcykKIAorCQlDT05GSUdfRFJJVkVSX1RJX0VNQUMKKwkJU3VwcG9ydCBmb3IgZGF2aW5jaSBlbWFjCisKKwkJCUNPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVAorCQkJRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbW9yZSB0aGVuIDMgUEhZcy4KKwogCQlDT05GSUdfRlRHTUFDMTAwCiAJCVN1cHBvcnQgZm9yIEZhcmFkYXkncyBGVEdNQUMxMDAgR2lnYWJpdCBTb0MgRXRoZXJuZXQKIApkaWZmIC0tZ2l0IGEvYXBpL01ha2VmaWxlIGIvYXBpL01ha2VmaWxlCmluZGV4IDJhNjRjNGQuLjBlOTlmNzQgMTAwNjQ0Ci0tLSBhL2FwaS9NYWtlZmlsZQorKysgYi9hcGkvTWFrZWZpbGUKQEAgLTI0LDcgKzI0LDggQEAKIAogTElCCT0gJChvYmopbGliYXBpLm8KIAotQ09CSlMtJChDT05GSUdfQVBJKSArPSBhcGkubyBhcGlfbmV0Lm8gYXBpX3N0b3JhZ2UubyBhcGlfcGxhdGZvcm0tJChBUkNIKS5vCitDT0JKUy0kKENPTkZJR19BUEkpICs9IGFwaS5vIGFwaV9kaXNwbGF5Lm8gYXBpX25ldC5vIGFwaV9zdG9yYWdlLm8gXAorCQkgICAgICAgYXBpX3BsYXRmb3JtLSQoQVJDSCkubwogCiBDT0JKUwk6PSAkKENPQkpTLXkpCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9hcGkvYXBpLmMgYi9hcGkvYXBpLmMKaW5kZXggODUzZjAxMC4uYTNiZjYwYSAxMDA2NDQKLS0tIGEvYXBpL2FwaS5jCisrKyBiL2FwaS9hcGkuYwpAQCAtNTUzLDYgKzU1Myw1MCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogcHNldWRvIHNpZ25hdHVyZToKKyAqCisgKiBpbnQgQVBJX2Rpc3BsYXlfZ2V0X2luZm8oaW50IHR5cGUsIHN0cnVjdCBkaXNwbGF5X2luZm8gKmRpKQorICovCitzdGF0aWMgaW50IEFQSV9kaXNwbGF5X2dldF9pbmZvKHZhX2xpc3QgYXApCit7CisJaW50IHR5cGU7CisJc3RydWN0IGRpc3BsYXlfaW5mbyAqZGk7CisKKwl0eXBlID0gdmFfYXJnKGFwLCBpbnQpOworCWRpID0gdmFfYXJnKGFwLCBzdHJ1Y3QgZGlzcGxheV9pbmZvICopOworCisJcmV0dXJuIGRpc3BsYXlfZ2V0X2luZm8odHlwZSwgZGkpOworfQorCisvKgorICogcHNldWRvIHNpZ25hdHVyZToKKyAqCisgKiBpbnQgQVBJX2Rpc3BsYXlfZHJhd19iaXRtYXAodWxvbmcgYml0bWFwLCBpbnQgeCwgaW50IHkpCisgKi8KK3N0YXRpYyBpbnQgQVBJX2Rpc3BsYXlfZHJhd19iaXRtYXAodmFfbGlzdCBhcCkKK3sKKwl1bG9uZyBiaXRtYXA7CisJaW50IHgsIHk7CisKKwliaXRtYXAgPSB2YV9hcmcoYXAsIHVsb25nKTsKKwl4ID0gdmFfYXJnKGFwLCBpbnQpOworCXkgPSB2YV9hcmcoYXAsIGludCk7CisKKwlyZXR1cm4gZGlzcGxheV9kcmF3X2JpdG1hcChiaXRtYXAsIHgsIHkpOworfQorCisvKgorICogcHNldWRvIHNpZ25hdHVyZToKKyAqCisgKiB2b2lkIEFQSV9kaXNwbGF5X2NsZWFyKHZvaWQpCisgKi8KK3N0YXRpYyBpbnQgQVBJX2Rpc3BsYXlfY2xlYXIodmFfbGlzdCBhcCkKK3sKKwlkaXNwbGF5X2NsZWFyKCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjZnBfdCBjYWxsc190YWJsZVtBUElfTUFYQ0FMTF0gPSB7IE5VTEwsIH07CiAKIC8qCkBAIC02MTYsNiArNjYwLDkgQEAKIAljYWxsc190YWJsZVtBUElfRU5WX0dFVF0gPSAmQVBJX2Vudl9nZXQ7CiAJY2FsbHNfdGFibGVbQVBJX0VOVl9TRVRdID0gJkFQSV9lbnZfc2V0OwogCWNhbGxzX3RhYmxlW0FQSV9FTlZfRU5VTV0gPSAmQVBJX2Vudl9lbnVtOworCWNhbGxzX3RhYmxlW0FQSV9ESVNQTEFZX0dFVF9JTkZPXSA9ICZBUElfZGlzcGxheV9nZXRfaW5mbzsKKwljYWxsc190YWJsZVtBUElfRElTUExBWV9EUkFXX0JJVE1BUF0gPSAmQVBJX2Rpc3BsYXlfZHJhd19iaXRtYXA7CisJY2FsbHNfdGFibGVbQVBJX0RJU1BMQVlfQ0xFQVJdID0gJkFQSV9kaXNwbGF5X2NsZWFyOwogCWNhbGxzX25vID0gQVBJX01BWENBTEw7CiAKIAlkZWJ1Z2YoIkFQSSBpbml0aWFsaXplZCB3aXRoICVkIGNhbGxzXG4iLCBjYWxsc19ubyk7CmRpZmYgLS1naXQgYS9hcGkvYXBpX2Rpc3BsYXkuYyBiL2FwaS9hcGlfZGlzcGxheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzkxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvYXBpX2Rpc3BsYXkuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBPUyBBdXRob3JzLgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFwaV9wdWJsaWMuaD4KKyNpbmNsdWRlIDxsY2QuaD4KKyNpbmNsdWRlIDx2aWRlb19mb250Lmg+IC8qIEdldCBmb250IHdpZHRoIGFuZCBoZWlnaHQgKi8KKworLyogbGNkLmggbmVlZHMgQk1QX0xPR09fSEVJR0hUIHRvIGNhbGN1bGF0ZSBDT05TT0xFX1JPV1MgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19MQ0RfTE9HTykgJiYgIWRlZmluZWQoQ09ORklHX0xDRF9JTkZPX0JFTE9XX0xPR08pCisjaW5jbHVkZSA8Ym1wX2xvZ28uaD4KKyNlbmRpZgorCisvKiBUT0RPKGNsY2hpb3UpOiBhZGQgc3VwcG9ydCBvZiB2aWRlbyBkZXZpY2UgKi8KKworaW50IGRpc3BsYXlfZ2V0X2luZm8oaW50IHR5cGUsIHN0cnVjdCBkaXNwbGF5X2luZm8gKmRpKQoreworCWlmICghZGkpCisJCXJldHVybiBBUElfRUlOVkFMOworCisJc3dpdGNoICh0eXBlKSB7CisJZGVmYXVsdDoKKwkJZGVidWcoIiVzOiB1bnN1cHBvcnQgZGlzcGxheSBkZXZpY2UgdHlwZTogJWRcbiIsCisJCQkJX19GSUxFX18sIHR5cGUpOworCQlyZXR1cm4gQVBJX0VOT0RFVjsKKyNpZmRlZiBDT05GSUdfTENECisJY2FzZSBESVNQTEFZX1RZUEVfTENEOgorCQlkaS0+cGl4ZWxfd2lkdGggID0gcGFuZWxfaW5mby52bF9jb2w7CisJCWRpLT5waXhlbF9oZWlnaHQgPSBwYW5lbF9pbmZvLnZsX3JvdzsKKwkJZGktPnNjcmVlbl9yb3dzID0gQ09OU09MRV9ST1dTOworCQlkaS0+c2NyZWVuX2NvbHMgPSBDT05TT0xFX0NPTFM7CisJCWJyZWFrOworI2VuZGlmCisJfQorCisJZGktPnR5cGUgPSB0eXBlOworCXJldHVybiAwOworfQorCitpbnQgZGlzcGxheV9kcmF3X2JpdG1hcCh1bG9uZyBiaXRtYXAsIGludCB4LCBpbnQgeSkKK3sKKwlpZiAoIWJpdG1hcCkKKwkJcmV0dXJuIEFQSV9FSU5WQUw7CisjaWZkZWYgQ09ORklHX0xDRAorCXJldHVybiBsY2RfZGlzcGxheV9iaXRtYXAoYml0bWFwLCB4LCB5KTsKKyNlbHNlCisJcmV0dXJuIEFQSV9FTk9ERVY7CisjZW5kaWYKK30KKwordm9pZCBkaXNwbGF5X2NsZWFyKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0xDRAorCWxjZF9jbGVhcigpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcGkvYXBpX3ByaXZhdGUuaCBiL2FwaS9hcGlfcHJpdmF0ZS5oCmluZGV4IDk0YTdmYzUuLjk4OGY3MDIgMTAwNjQ0Ci0tLSBhL2FwaS9hcGlfcHJpdmF0ZS5oCisrKyBiL2FwaS9hcGlfcHJpdmF0ZS5oCkBAIC00NSw0ICs0NSw4IEBACiAKIHZvaWQgZGV2X3N0b3JfaW5pdCh2b2lkKTsKIAoraW50IGRpc3BsYXlfZ2V0X2luZm8oaW50IHR5cGUsIHN0cnVjdCBkaXNwbGF5X2luZm8gKmRpKTsKK2ludCBkaXNwbGF5X2RyYXdfYml0bWFwKHVsb25nIGJpdG1hcCwgaW50IHgsIGludCB5KTsKK3ZvaWQgZGlzcGxheV9jbGVhcih2b2lkKTsKKwogI2VuZGlmIC8qIF9BUElfUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTExMzYvbXgzMS9nZW5lcmljLmMgYi9hcmNoL2FybS9jcHUvYXJtMTEzNi9teDMxL2dlbmVyaWMuYwppbmRleCA0ZjI3ZTI1Li5mNDU4MjgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtMTEzNi9teDMxL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9jcHUvYXJtMTEzNi9teDMxL2dlbmVyaWMuYwpAQCAtMjcsOCArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgogCi0jZGVmaW5lIElPTVVYR1BSCShJT01VWENfQkFTRSArIDB4MDA4KQotCiBzdGF0aWMgdTMyIG14MzFfZGVjb2RlX3BsbCh1MzIgcmVnLCB1MzIgaW5mcmVxKQogewogCXUzMiBtZmkgPSBHRVRfUExMX01GSShyZWcpOwpAQCAtODksNyArODcsNyBAQAogdm9pZCBteDMxX2R1bXBfY2xvY2tzKHZvaWQpCiB7CiAJdTMyIGNwdWZyZXEgPSBteDMxX2dldF9tY3VfbWFpbl9jbGsoKTsKLQlwcmludGYoIm14MzEgY3B1IGNsb2NrOiAlZE1IelxuIixjcHVmcmVxIC8gMTAwMDAwMCk7CisJcHJpbnRmKCJteDMxIGNwdSBjbG9jazogJWRNSHpcbiIsIGNwdWZyZXEgLyAxMDAwMDAwKTsKIAlwcmludGYoImlwZyBjbG9jayAgICAgOiAlZEh6XG4iLCBteDMxX2dldF9pcGdfY2xrKCkpOwogCXByaW50ZigiaHNwIGNsb2NrICAgICA6ICVkSHpcbiIsIG14MzFfZ2V0X2hzcF9jbGsoKSk7CiB9CkBAIC0xNDYsMTQgKzE0NCwxNSBAQAogdm9pZCBteDMxX3NldF9ncHIoZW51bSBpb211eF9ncF9mdW5jIGdwLCBjaGFyIGVuKQogewogCXUzMiBsOworCXN0cnVjdCBpb211eGNfcmVncyAqaW9tdXhjID0gKHN0cnVjdCBpb211eGNfcmVncyAqKUlPTVVYQ19CQVNFOwogCi0JbCA9IHJlYWRsKElPTVVYR1BSKTsKKwlsID0gcmVhZGwoJmlvbXV4Yy0+Z3ByKTsKIAlpZiAoZW4pCiAJCWwgfD0gZ3A7CiAJZWxzZQogCQlsICY9IH5ncDsKIAotCXdyaXRlbChsLCBJT01VWEdQUik7CisJd3JpdGVsKGwsICZpb211eGMtPmdwcik7CiB9CiAKIHZvaWQgbXhjX3NldHVwX3dlaW1jcyhpbnQgY3MsIGNvbnN0IHN0cnVjdCBteGNfd2VpbWNzICp3ZWltY3MpCkBAIC0yMTYsNyArMjE1LDcgQEAKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0RJU1BMQVlfQ1BVSU5GTykKLWludCBwcmludF9jcHVpbmZvICh2b2lkKQoraW50IHByaW50X2NwdWluZm8odm9pZCkKIHsKIAl1MzIgc3JldiA9IGdldF9jcHVfcmV2KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjB0L2EzMjAvdGltZXIuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjB0L2EzMjAvdGltZXIuYwppbmRleCA0NDNkMzFkLi40YmZjZWYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTIwdC9hMzIwL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyMHQvYTMyMC90aW1lci5jCkBAIC0xOCwyMCArMTgsMzUgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8ZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxmYXJhZGF5L2Z0cG11MDEwLmg+CiAjaW5jbHVkZSA8ZmFyYWRheS9mdHRtcjAxMC5oPgogCi1zdGF0aWMgdWxvbmcgdGltZXN0YW1wOwotc3RhdGljIHVsb25nIGxhc3RkZWM7Ci0KLXN0YXRpYyBzdHJ1Y3QgZnR0bXIwMTAgKnRtciA9IChzdHJ1Y3QgZnR0bXIwMTAgKilDT05GSUdfRlRUTVIwMTBfQkFTRTsKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCiAjZGVmaW5lIFRJTUVSX0NMT0NLCTMyNzY4CiAjZGVmaW5lIFRJTUVSX0xPQURfVkFMCTB4ZmZmZmZmZmYKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgdGlja190b190aW1lKHVuc2lnbmVkIGxvbmcgbG9uZyB0aWNrKQoreworCXRpY2sgKj0gQ09ORklHX1NZU19IWjsKKwlkb19kaXYodGljaywgZ2QtPnRpbWVyX3JhdGVfaHopOworCisJcmV0dXJuIHRpY2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHVzZWNfdG9fdGljayh1bnNpZ25lZCBsb25nIGxvbmcgdXNlYykKK3sKKwl1c2VjICo9IGdkLT50aW1lcl9yYXRlX2h6OworCWRvX2Rpdih1c2VjLCAxMDAwMDAwKTsKKworCXJldHVybiB1c2VjOworfQorCiBpbnQgdGltZXJfaW5pdCh2b2lkKQogeworCXN0cnVjdCBmdHRtcjAxMCAqdG1yID0gKHN0cnVjdCBmdHRtcjAxMCAqKUNPTkZJR19GVFRNUjAxMF9CQVNFOwogCXVuc2lnbmVkIGludCBjcjsKIAogCWRlYnVnKCIlcygpXG4iLCBfX2Z1bmNfXyk7CkBAIC01OSwxMDYgKzc0LDU3IEBACiAJY3IgfD0gRlRUTVIwMTBfVE0zX0VOQUJMRTsKIAl3cml0ZWwoY3IsICZ0bXItPmNyKTsKIAotCS8qIGluaXQgdGhlIHRpbWVzdGFtcCBhbmQgbGFzdGRlYyB2YWx1ZSAqLwotCXJlc2V0X3RpbWVyX21hc2tlZCgpOworCWdkLT50aW1lcl9yYXRlX2h6ID0gVElNRVJfQ0xPQ0s7CisJZ2QtPnRidSA9IGdkLT50YmwgPSAwOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiB0aW1lciB3aXRob3V0IGludGVycnVwdHMKLSAqLwotCi0vKgotICogcmVzZXQgdGltZQotICovCi12b2lkIHJlc2V0X3RpbWVyX21hc2tlZCh2b2lkKQotewotCS8qIGNhcHVyZSBjdXJyZW50IGRlY3JlbWVudGVyIHZhbHVlIHRpbWUgKi8KLQlsYXN0ZGVjID0gcmVhZGwoJnRtci0+dGltZXIzX2NvdW50ZXIpIC8gKFRJTUVSX0NMT0NLIC8gQ09ORklHX1NZU19IWik7Ci0JdGltZXN0YW1wID0gMDsJCS8qIHN0YXJ0ICJhZHZhbmNpbmciIHRpbWUgc3RhbXAgZnJvbSAwICovCi0KLQlkZWJ1ZygiJXMoKTogbGFzdGRlYyA9ICVseFxuIiwgX19mdW5jX18sIGxhc3RkZWMpOwotfQotCi0vKgotICogcmV0dXJuIHRpbWVyIHRpY2tzCi0gKi8KLXVsb25nIGdldF90aW1lcl9tYXNrZWQodm9pZCkKLXsKLQkvKiBjdXJyZW50IHRpY2sgdmFsdWUgKi8KLQl1bG9uZyBub3cgPSByZWFkbCgmdG1yLT50aW1lcjNfY291bnRlcikgLyAoVElNRVJfQ0xPQ0sgLyBDT05GSUdfU1lTX0haKTsKLQotCWRlYnVnKCIlcygpOiBub3cgPSAlbHgsIGxhc3RkZWMgPSAlbHhcbiIsIF9fZnVuY19fLCBub3csIGxhc3RkZWMpOwotCi0JaWYgKGxhc3RkZWMgPj0gbm93KSB7Ci0JCS8qCi0JCSAqIG5vcm1hbCBtb2RlIChub24gcm9sbCkKLQkJICogbW92ZSBzdGFtcCBmb3Jkd2FyZCB3aXRoIGFic291bHRlIGRpZmYgdGlja3MKLQkJICovCi0JCXRpbWVzdGFtcCArPSBsYXN0ZGVjIC0gbm93OwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIHdlIGhhdmUgb3ZlcmZsb3cgb2YgdGhlIGNvdW50IGRvd24gdGltZXIKLQkJICoKLQkJICogbnRzID0gdHMgKyBsZCArIChUTFYgLSBub3cpCi0JCSAqIHRzPW9sZCBzdGFtcCwgbGQ9dGltZSB0aGF0IHBhc3NlZCBiZWZvcmUgcGFzc2luZyB0aHJvdWdoIC0xCi0JCSAqIChUTFYtbm93KSBhbW91bnQgb2YgdGltZSBhZnRlciBwYXNzaW5nIHRob3VnaCAtMQotCQkgKiBudHMgPSBuZXcgImFkdmFuY2luZyB0aW1lIHN0YW1wIi4uLml0IGNvdWxkIGFsc28gcm9sbCBhbmQKLQkJICogY2F1c2UgcHJvYmxlbXMuCi0JCSAqLwotCQl0aW1lc3RhbXAgKz0gbGFzdGRlYyArIFRJTUVSX0xPQURfVkFMIC0gbm93OwotCX0KLQotCWxhc3RkZWMgPSBub3c7Ci0KLQlkZWJ1ZygiJXMoKSByZXR1cm5zICVseFxuIiwgX19mdW5jX18sIHRpbWVzdGFtcCk7Ci0KLQlyZXR1cm4gdGltZXN0YW1wOwotfQotCi0vKgotICogcmV0dXJuIGRpZmZlcmVuY2UgYmV0d2VlbiB0aW1lciB0aWNrcyBhbmQgYmFzZQotICovCi11bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKLXsKLQlkZWJ1ZygiJXMoJWx4KVxuIiwgX19mdW5jX18sIGJhc2UpOwotCXJldHVybiBnZXRfdGltZXJfbWFza2VkKCkgLSBiYXNlOwotfQotCi0vKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwcmVzZXJ2ZSBhZHZhbmNlIHRpbWVzdGFtcCB2YWx1ZSAqLwotdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCi17Ci0JbG9uZyB0bW8gPSB1c2VjICogKFRJTUVSX0NMT0NLIC8gMTAwMCkgLyAxMDAwOwotCXVuc2lnbmVkIGxvbmcgbm93LCBsYXN0ID0gcmVhZGwoJnRtci0+dGltZXIzX2NvdW50ZXIpOwotCi0JZGVidWcoIiVzKCVsdSlcbiIsIF9fZnVuY19fLCB1c2VjKTsKLQl3aGlsZSAodG1vID4gMCkgewotCQlub3cgPSByZWFkbCgmdG1yLT50aW1lcjNfY291bnRlcik7Ci0JCWlmIChub3cgPiBsYXN0KSAvKiBjb3VudCBkb3duIHRpbWVyIG92ZXJmbG93ICovCi0JCQl0bW8gLT0gVElNRVJfTE9BRF9WQUwgKyBsYXN0IC0gbm93OwotCQllbHNlCi0JCQl0bW8gLT0gbGFzdCAtIG5vdzsKLQkJbGFzdCA9IG5vdzsKLQl9Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHJlYWQgdGltZWJhc2UgYXMgbG9uZyBsb25nKS4KLSAqIE9uIEFSTSBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICogR2V0IHRoZSBjdXJyZW50IDY0IGJpdCB0aW1lciB0aWNrIGNvdW50CiAgKi8KIHVuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdGlja3Modm9pZCkKIHsKLQlkZWJ1ZygiJXMoKVxuIiwgX19mdW5jX18pOwotCXJldHVybiBnZXRfdGltZXIoMCk7CisJc3RydWN0IGZ0dG1yMDEwICp0bXIgPSAoc3RydWN0IGZ0dG1yMDEwICopQ09ORklHX0ZUVE1SMDEwX0JBU0U7CisJdWxvbmcgbm93ID0gVElNRVJfTE9BRF9WQUwgLSByZWFkbCgmdG1yLT50aW1lcjNfY291bnRlcik7CisKKwkvKiBpbmNyZW1lbnQgdGJ1IGlmIHRibCBoYXMgcm9sbGVkIG92ZXIgKi8KKwlpZiAobm93IDwgZ2QtPnRibCkKKwkJZ2QtPnRidSsrOworCWdkLT50YmwgPSBub3c7CisJcmV0dXJuICgoKHVuc2lnbmVkIGxvbmcgbG9uZylnZC0+dGJ1KSA8PCAzMikgfCBnZC0+dGJsOworfQorCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQ7CisJdWxvbmcgdG1vOworCisJc3RhcnQgPSBnZXRfdGlja3MoKTsJCS8qIGdldCBjdXJyZW50IHRpbWVzdGFtcCAqLworCXRtbyA9IHVzZWNfdG9fdGljayh1c2VjKTsJLyogY29udmVydCB1c2VjcyB0byB0aWNrcyAqLworCXdoaWxlICgoZ2V0X3RpY2tzKCkgLSBzdGFydCkgPCB0bW8pCisJCTsJCQkvKiBsb29wIHRpbGwgdGltZSBoYXMgcGFzc2VkICovCiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSkuCi0gKiBPbiBBUk0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVyIHRpY2tzIHBlciBzZWNvbmQuCisgKiBnZXRfdGltZXIoYmFzZSkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIHRpbWVvdXRzIG9yCisgKiB0byBtZWFzdXJlIGVsYXNwZWQgdGltZSByZWxhdGl2ZSB0byBhbiBldmVudDoKKyAqCisgKiB1bG9uZyBzdGFydF90aW1lID0gZ2V0X3RpbWVyKDApIHNldHMgc3RhcnRfdGltZSB0byB0aGUgY3VycmVudAorICogdGltZSB2YWx1ZS4KKyAqIGdldF90aW1lcihzdGFydF90aW1lKSByZXR1cm5zIHRoZSB0aW1lIGVsYXBzZWQgc2luY2UgdGhlbi4KKyAqCisgKiBUaGUgdGltZSBpcyB1c2VkIGluIENPTkZJR19TWVNfSFogdW5pdHMhCisgKi8KK3Vsb25nIGdldF90aW1lcih1bG9uZyBiYXNlKQoreworCXJldHVybiB0aWNrX3RvX3RpbWUoZ2V0X3RpY2tzKCkpIC0gYmFzZTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVyIHRpY2tzIHBlciBzZWNvbmQuCiAgKi8KIHVsb25nIGdldF90YmNsayh2b2lkKQogewotCWRlYnVnKCIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIENPTkZJR19TWVNfSFo7CisJcmV0dXJuIGdkLT50aW1lcl9yYXRlX2h6OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9NYWtlZmlsZSBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvTWFrZWZpbGUKaW5kZXggOTMwZTBkMS4uYTU2ZmYwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL01ha2VmaWxlCkBAIC0yOCw2ICsyOCwxMiBAQAogU1RBUlQJPSBzdGFydC5vCiBDT0JKUwk9IGNwdS5vCiAKK2lmZGVmCUNPTkZJR19TUExfQlVJTEQKK2lmZGVmCUNPTkZJR19TUExfTk9fQ1BVX1NVUFBPUlRfQ09ERQorU1RBUlQJOj0KK2VuZGlmCitlbmRpZgorCiBTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSAkKFNPQkpTKSkKIFNUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9NYWtlZmlsZSBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9NYWtlZmlsZQppbmRleCA5OGM3ZTU1Li5hZWIwNThhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBMSUIJPSAkKG9iailsaWIkKFNPQykubwogCiBDT0JKUy15CQkJCSs9IGNwdS5vIHRpbWVyLm8gcHNjLm8KLUNPQkpTLSQoQ09ORklHX0FNMTgwMThfTE9XTEVWRUwpICAgICAgICs9IGFtMTgwOF9sb3dsZXZlbC5vCitDT0JKUy0kKENPTkZJR19EQTg1MF9MT1dMRVZFTCkJKz0gZGE4NTBfbG93bGV2ZWwubwogQ09CSlMtJChDT05GSUdfU09DX0RNMzU1KQkrPSBkbTM1NS5vCiBDT0JKUy0kKENPTkZJR19TT0NfRE0zNjUpCSs9IGRtMzY1Lm8KIENPQkpTLSQoQ09ORklHX1NPQ19ETTY0NFgpCSs9IGRtNjQ0eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvYW0xODA4X2xvd2xldmVsLmMgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvYW0xODA4X2xvd2xldmVsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYTRhOWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL2FtMTgwOF9sb3dsZXZlbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI4ICswLDAgQEAKLS8qCi0gKiBTb0Mtc3BlY2lmaWMgbG93bGV2ZWwgY29kZSBmb3IgQU0xODA4IGFuZCBzaW1pbGFyIGNoaXBzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExCi0gKiBIZWlrbyBTY2hvY2hlciwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgaHNAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG5hbmQuaD4KLSNpbmNsdWRlIDxuczE2NTUwLmg+Ci0jaW5jbHVkZSA8cG9zdC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2FtMTgwOF9sb3dsZXZlbC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZGRyMl9kZWZzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZW1pZl9kZWZzLmg+Ci0KLXZvaWQgYW0xODA4X3dhaXRsb29wKHVuc2lnbmVkIGxvbmcgbG9vcGNudCkKLXsKLQl1bnNpZ25lZCBsb25nCWk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbG9vcGNudDsgaSsrKQotCQlhc20oIiAgIE5PUCIpOwotfQotCi1pbnQgYW0xODA4X3BsbF9pbml0KHN0cnVjdCBkYXZpbmNpX3BsbGNfcmVncyAqcmVnLCB1bnNpZ25lZCBsb25nIHBsbG11bHQpCi17Ci0JaWYgKHJlZyA9PSBkYXZpbmNpX3BsbGMwX3JlZ3MpCi0JCS8qIFVubG9jayBQTEwgcmVnaXN0ZXJzLiAqLwotCQljbHJiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPmNmZ2NoaXAwLCAweDAwMDAwMDEwKTsKLQotCS8qCi0JICogU2V0IFBMTEVOU1JDICcwJyxiaXQgNSwgUExMIEVuYWJsZShQTExFTikgc2VsZWN0aW9uIGlzIGNvbnRyb2xsZWQKLQkgKiB0aHJvdWdoIE1NUgotCSAqLwotCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIDB4MDAwMDAwMjApOwotCS8qIFBMTENUTC5FWFRDTEtTUkMgYml0IDkgc2hvdWxkIGJlIGxlZnQgYXQgMCBmb3IgRnJlb24gKi8KLQljbHJiaXRzX2xlMzIoJnJlZy0+cGxsY3RsLCAweDAwMDAwMjAwKTsKLQotCS8qIFNldCBQTExFTj0wID0+IFBMTCBCWVBBU1MgTU9ERSAqLwotCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIDB4MDAwMDAwMDEpOwotCi0JYW0xODA4X3dhaXRsb29wKDE1MCk7Ci0KLQlpZiAocmVnID09IGRhdmluY2lfcGxsYzBfcmVncykgewotCQkvKgotCQkgKiBTZWxlY3QgdGhlIENsb2NrIE1vZGUgYml0IDggYXMgRXh0ZXJuYWwgQ2xvY2sgb3IgT24gQ2hpcAotCQkgKiBPc2NpbGF0b3IKLQkJICovCi0JCWR2X21hc2tiaXRzKCZyZWctPnBsbGN0bCwgMHhGRkZGRkVGRik7Ci0JCXNldGJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIChDT05GSUdfU1lTX0RWX0NMS01PREUgPDwgOCkpOwotCX0KLQotCS8qIENsZWFyIFBMTFJTVCBiaXQgdG8gcmVzZXQgdGhlIFBMTCAqLwotCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIDB4MDAwMDAwMDgpOwotCi0JLyogRGlzYWJsZSB0aGUgUExMIG91dHB1dCAqLwotCXNldGJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIDB4MDAwMDAwMTApOwotCi0JLyogUExMIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCi0JLyoKLQkgKiBQb3dlciB1cCB0aGUgUExMLSBQV1JETiBiaXQgc2V0IHRvIDAgdG8gYnJpbmcgdGhlIFBMTCBvdXQgb2YKLQkgKiBwb3dlciBkb3duIGJpdAotCSAqLwotCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIDB4MDAwMDAwMDIpOwotCi0JLyogRW5hYmxlIHRoZSBQTEwgZnJvbSBEaXNhYmxlIE1vZGUgUExMRElTIGJpdCB0byAwICovCi0JY2xyYml0c19sZTMyKCZyZWctPnBsbGN0bCwgMHgwMDAwMDAxMCk7Ci0KLQkvKiBQcm9ncmFtIHRoZSByZXF1aXJlZCBtdWx0aXBsaWVyIHZhbHVlIGluIFBMTE0gKi8KLQl3cml0ZWwocGxsbXVsdCwgJnJlZy0+cGxsbSk7Ci0KLQkvKiBwcm9ncmFtIHRoZSBwb3N0ZGl2ICovCi0JaWYgKHJlZyA9PSBkYXZpbmNpX3BsbGMwX3JlZ3MpCi0JCXdyaXRlbCgoMHg4MDAwIHwgQ09ORklHX1NZU19BTTE4MDhfUExMMF9QT1NURElWKSwKLQkJCSZyZWctPnBvc3RkaXYpOwotCWVsc2UKLQkJd3JpdGVsKCgweDgwMDAgfCBDT05GSUdfU1lTX0FNMTgwOF9QTEwxX1BPU1RESVYpLAotCQkJJnJlZy0+cG9zdGRpdik7Ci0KLQkvKgotCSAqIENoZWNrIGZvciB0aGUgR09TVEFUIGJpdCBpbiBQTExTVEFUIHRvIGNsZWFyIHRvIDAgdG8gaW5kaWNhdGUgdGhhdAotCSAqIG5vIEdPIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MKLQkgKi8KLQl3aGlsZSAoKHJlYWRsKCZyZWctPnBsbHN0YXQpICYgMHgxKSA9PSAxKQotCQk7Ci0KLQlpZiAocmVnID09IGRhdmluY2lfcGxsYzBfcmVncykgewotCQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfUExMMF9QTExESVYxLCAmcmVnLT5wbGxkaXYxKTsKLQkJd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X1BMTDBfUExMRElWMiwgJnJlZy0+cGxsZGl2Mik7Ci0JCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9QTEwwX1BMTERJVjMsICZyZWctPnBsbGRpdjMpOwotCQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfUExMMF9QTExESVY0LCAmcmVnLT5wbGxkaXY0KTsKLQkJd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X1BMTDBfUExMRElWNSwgJnJlZy0+cGxsZGl2NSk7Ci0JCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9QTEwwX1BMTERJVjYsICZyZWctPnBsbGRpdjYpOwotCQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfUExMMF9QTExESVY3LCAmcmVnLT5wbGxkaXY3KTsKLQl9IGVsc2UgewotCQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfUExMMV9QTExESVYxLCAmcmVnLT5wbGxkaXYxKTsKLQkJd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X1BMTDFfUExMRElWMiwgJnJlZy0+cGxsZGl2Mik7Ci0JCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9QTEwxX1BMTERJVjMsICZyZWctPnBsbGRpdjMpOwotCX0KLQotCS8qCi0JICogU2V0IHRoZSBHT1NFVCBiaXQgaW4gUExMQ01EIHRvIDEgdG8gaW5pdGlhdGUgYSBuZXcgZGl2aWRlcgotCSAqIHRyYW5zaXRpb24uCi0JICovCi0Jc2V0Yml0c19sZTMyKCZyZWctPnBsbGNtZCwgMHgwMSk7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIHRoZSBHT1NUQVQgYml0IGluIFBMTFNUQVQgdG8gY2xlYXIgdG8gMAotCSAqIChjb21wbGV0aW9uIG9mIHBoYXNlIGFsaWdubWVudCkuCi0JICovCi0Jd2hpbGUgKChyZWFkbCgmcmVnLT5wbGxzdGF0KSAmIDB4MSkgPT0gMSkKLQkJOwotCi0JLyogV2FpdCBmb3IgUExMIHRvIHJlc2V0IHByb3Blcmx5LiBTZWUgUExMIHNwZWMgZm9yIFBMTCByZXNldCB0aW1lICovCi0JYW0xODA4X3dhaXRsb29wKDIwMCk7Ci0KLQkvKiBTZXQgdGhlIFBMTFJTVCBiaXQgaW4gUExMQ1RMIHRvIDEgdG8gYnJpbmcgdGhlIFBMTCBvdXQgb2YgcmVzZXQgKi8KLQlzZXRiaXRzX2xlMzIoJnJlZy0+cGxsY3RsLCAweDAwMDAwMDA4KTsKLQotCS8qIFdhaXQgZm9yIFBMTCB0byBsb2NrLiBTZWUgUExMIHNwZWMgZm9yIFBMTCBsb2NrIHRpbWUgKi8KLQlhbTE4MDhfd2FpdGxvb3AoMjQwMCk7Ci0KLQkvKgotCSAqIFNldCB0aGUgUExMRU4gYml0IGluIFBMTENUTCB0byAxIHRvIHJlbW92ZSB0aGUgUExMIGZyb20gYnlwYXNzCi0JICogbW9kZQotCSAqLwotCXNldGJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIDB4MDAwMDAwMDEpOwotCi0KLQkvKgotCSAqIGNsZWFyIEVNSUZBIGFuZCBFTUlGQiBjbG9jayBzb3VyY2Ugc2V0dGluZ3MsIGxldCB0aGVtCi0JICogcnVuIG9mZiBTWVNDTEsKLQkgKi8KLQlpZiAocmVnID09IGRhdmluY2lfcGxsYzBfcmVncykKLQkJZHZfbWFza2JpdHMoJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPmNmZ2NoaXAzLCAweEZGRkZGRkY4KTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGFtMTgwOF9scGNfdHJhbnNpdGlvbih1bnNpZ25lZCBjaGFyIHBzY251bSwgdW5zaWduZWQgY2hhciBtb2R1bGUsCi0JCXVuc2lnbmVkIGNoYXIgZG9tYWluLCB1bnNpZ25lZCBjaGFyIHN0YXRlKQotewotCXN0cnVjdCBkYXZpbmNpX3BzY19yZWdzCSpyZWc7Ci0JZHZfcmVnX3AgbWRzdGF0LCBtZGN0bDsKLQotCWlmIChwc2NudW0gPT0gMCkgewotCQlyZWcgPSBkYXZpbmNpX3BzYzBfcmVnczsKLQkJbWRzdGF0ID0gJnJlZy0+cHNjMC5tZHN0YXRbbW9kdWxlXTsKLQkJbWRjdGwgPSAmcmVnLT5wc2MwLm1kY3RsW21vZHVsZV07Ci0JfSBlbHNlIHsKLQkJcmVnID0gZGF2aW5jaV9wc2MxX3JlZ3M7Ci0JCW1kc3RhdCA9ICZyZWctPnBzYzEubWRzdGF0W21vZHVsZV07Ci0JCW1kY3RsID0gJnJlZy0+cHNjMS5tZGN0bFttb2R1bGVdOwotCX0KLQotCS8qIFdhaXQgZm9yIGFueSBvdXRzdGFuZGluZyB0cmFuc2l0aW9uIHRvIGNvbXBsZXRlICovCi0Jd2hpbGUgKChyZWFkbCgmcmVnLT5wdHN0YXQpICYgKDB4MDAwMDAwMDEgPDwgZG9tYWluKSkpCi0JCTsKLQotCS8qIElmIHdlIGFyZSBhbHJlYWR5IGluIHRoYXQgc3RhdGUsIGp1c3QgcmV0dXJuICovCi0JaWYgKChyZWFkbChtZHN0YXQpICYgMHgxRikgPT0gc3RhdGUpCi0JCXJldHVybjsKLQotCS8qIFBlcmZvcm0gdHJhbnNpdGlvbiAqLwotCXdyaXRlbCgocmVhZGwobWRjdGwpICYgMHhGRkZGRkZFMCkgfCBzdGF0ZSwgbWRjdGwpOwotCXNldGJpdHNfbGUzMigmcmVnLT5wdGNtZCwgKDB4MDAwMDAwMDEgPDwgZG9tYWluKSk7Ci0KLQkvKiBXYWl0IGZvciB0cmFuc2l0aW9uIHRvIGNvbXBsZXRlICovCi0Jd2hpbGUgKHJlYWRsKCZyZWctPnB0c3RhdCkgJiAoMHgwMDAwMDAwMSA8PCBkb21haW4pKQotCQk7Ci0KLQkvKiBXYWl0IGFuZCB2ZXJpZnkgdGhlIHN0YXRlICovCi0Jd2hpbGUgKChyZWFkbChtZHN0YXQpICYgMHgxRikgIT0gc3RhdGUpCi0JCTsKLX0KLQotaW50IGFtMTgwOF9kZHJfc2V0dXAodW5zaWduZWQgaW50IGZyZXEpCi17Ci0JdW5zaWduZWQgbG9uZwl0bXA7Ci0KLQkvKiBFbmFibGUgdGhlIENsb2NrIHRvIEREUjIvbUREUiAqLwotCWFtMTgwOF9scGNfdHJhbnNpdGlvbigxLCA2LCAwLCBQU0NfRU5BQkxFKTsKLQotCXRtcCA9IHJlYWRsKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsKTsKLQlpZiAoKHRtcCAmIFZUUF9QT1dFUkRXTikgPT0gVlRQX1BPV0VSRFdOKSB7Ci0JCS8qIEJlZ2luIFZUUCBDYWxpYnJhdGlvbiAqLwotCQljbHJiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9QT1dFUkRXTik7Ci0JCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0xPQ0spOwotCQlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9DTEtSWik7Ci0JCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0NMS1JaKTsKLQkJc2V0Yml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfQ0xLUlopOwotCi0JCS8qIFBvbGxpbmcgUkVBRFkgYml0IHRvIHNlZSB3aGVuIFZUUCBjYWxpYnJhdGlvbiBpcyBkb25lICovCi0JCXRtcCA9IHJlYWRsKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsKTsKLQkJd2hpbGUgKCh0bXAgJiBWVFBfUkVBRFkpICE9IFZUUF9SRUFEWSkKLQkJCXRtcCA9IHJlYWRsKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsKTsKLQotCQlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9MT0NLKTsKLQkJc2V0Yml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfUE9XRVJEV04pOwotCi0JCXNldGJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0lPUFdSRFdOKTsKLQl9Ci0KLQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfRERSMl9ERFJQSFlDUiwgJmR2X2RkcjJfcmVnc19jdHJsLT5kZHJwaHljcik7Ci0JY2xyYml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+ZGRyX3NsZXcsCi0JCSgxIDw8IEREUl9TTEVXX0NNT1NFTl9CSVQpKTsKLQotCXNldGJpdHNfbGUzMigmZHZfZGRyMl9yZWdzX2N0cmwtPnNkYmNyLCBEVl9ERFJfQk9PVFVOTE9DSyk7Ci0KLQl3cml0ZWwoKENPTkZJR19TWVNfQU0xODA4X0REUjJfU0RCQ1IgJiB+MHhmMDAwMDAwMCkgfAotCQkocmVhZGwoJmR2X2RkcjJfcmVnc19jdHJsLT5zZGJjcikgJiAweGYwMDAwMDAwKSwgLypyc3YgQnl0ZXMqLwotCQkmZHZfZGRyMl9yZWdzX2N0cmwtPnNkYmNyKTsKLQl3cml0ZWwoQ09ORklHX1NZU19BTTE4MDhfRERSMl9TREJDUjIsICZkdl9kZHIyX3JlZ3NfY3RybC0+c2RiY3IyKTsKLQotCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9ERFIyX1NEVElNUiwgJmR2X2RkcjJfcmVnc19jdHJsLT5zZHRpbXIpOwotCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9ERFIyX1NEVElNUjIsICZkdl9kZHIyX3JlZ3NfY3RybC0+c2R0aW1yMik7Ci0KLQljbHJiaXRzX2xlMzIoJmR2X2RkcjJfcmVnc19jdHJsLT5zZGJjciwKLQkJKDEgPDwgRFZfRERSX1NEQ1JfVElNVU5MT0NLX1NISUZUKSk7Ci0KLQkvKgotCSAqIExQTU9ERU4gYW5kIE1DTEtTVE9QRU4gbXVzdCBiZSBzZXQhCi0JICogV2l0aG91dCB0aGlzIGJpdHMgc2V0LCBQU0MgZG9uO3Qgc3dpdGNoIHN0YXRlcyAhIQotCSAqLwotCXdyaXRlbChDT05GSUdfU1lTX0FNMTgwOF9ERFIyX1NEUkNSIHwKLQkJKDEgPDwgRFZfRERSX1NSQ1JfTFBNT0RFTl9TSElGVCkgfAotCQkoMSA8PCBEVl9ERFJfU1JDUl9NQ0xLU1RPUEVOX1NISUZUKSwKLQkJJmR2X2RkcjJfcmVnc19jdHJsLT5zZHJjcik7Ci0KLQkvKiBTeW5jUmVzZXQgdGhlIENsb2NrIHRvIEVNSUYzQSBTRFJBTSAqLwotCWFtMTgwOF9scGNfdHJhbnNpdGlvbigxLCA2LCAwLCBQU0NfU1lOQ1JFU0VUKTsKLQkvKiBFbmFibGUgdGhlIENsb2NrIHRvIEVNSUYzQSBTRFJBTSAqLwotCWFtMTgwOF9scGNfdHJhbnNpdGlvbigxLCA2LCAwLCBQU0NfRU5BQkxFKTsKLQotCS8qIGRpc2FibGUgc2VsZiByZWZyZXNoICovCi0JY2xyYml0c19sZTMyKCZkdl9kZHIyX3JlZ3NfY3RybC0+c2RyY3IsIDB4YzAwMDAwMDApOwotCXdyaXRlbCgweDMwLCAmZHZfZGRyMl9yZWdzX2N0cmwtPnBiYnByKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhbTE4MDhfc2V0X21kY3RsKGR2X3JlZ19wIG1kY3RsKQotewotCWlmICgocmVhZGwobWRjdGwpICYgMHgxRikgIT0gUFNDX0VOQUJMRSkKLQkJd3JpdGVsKCgocmVhZGwobWRjdGwpICYgMHhGRkZGRkZFMCkgfCBQU0NfRU5BQkxFKSwgbWRjdGwpOwotfQotCi12b2lkIGFtMTgwOF9wc2NfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkYXZpbmNpX3BzY19yZWdzCSpyZWc7Ci0JaW50IGk7Ci0KLQkvKiBQU0MgMCBkb21haW4gMCBpbml0ICovCi0JcmVnID0gZGF2aW5jaV9wc2MwX3JlZ3M7Ci0Jd2hpbGUgKChyZWFkbCgmcmVnLT5wdHN0YXQpICYgMHgwMDAwMDAwMSkpCi0JCTsKLQotCWZvciAoaSA9IDM7IGkgPD0gNCA7IGkrKykKLQkJYW0xODA4X3NldF9tZGN0bCgmcmVnLT5wc2MwLm1kY3RsW2ldKTsKLQotCWZvciAoaSA9IDc7IGkgPD0gMTIgOyBpKyspCi0JCWFtMTgwOF9zZXRfbWRjdGwoJnJlZy0+cHNjMC5tZGN0bFtpXSk7Ci0KLQkvKiBEbyBBbHdheXMtT24gUG93ZXIgRG9tYWluIFRyYW5zaXRpb25zICovCi0Jc2V0Yml0c19sZTMyKCZyZWctPnB0Y21kLCAweDAwMDAwMDAxKTsKLQl3aGlsZSAocmVhZGwoJnJlZy0+cHRzdGF0KSAmIDB4MDAwMDAwMDEpCi0JCTsKLQotCS8qIFBTQzEsIGRvbWFpbiAxIGluaXQgKi8KLQlyZWcgPSBkYXZpbmNpX3BzYzFfcmVnczsKLQl3aGlsZSAoKHJlYWRsKCZyZWctPnB0c3RhdCkgJiAweDAwMDAwMDAxKSkKLQkJOwotCi0JYW0xODA4X3NldF9tZGN0bCgmcmVnLT5wc2MxLm1kY3RsWzNdKTsKLQlhbTE4MDhfc2V0X21kY3RsKCZyZWctPnBzYzEubWRjdGxbNl0pOwotCi0JLyogVUFSVDEgKyBVQVJUMiAqLwotCWZvciAoaSA9IDEyIDsgaSA8PSAxMyA7IGkrKykKLQkJYW0xODA4X3NldF9tZGN0bCgmcmVnLT5wc2MxLm1kY3RsW2ldKTsKLQotCWFtMTgwOF9zZXRfbWRjdGwoJnJlZy0+cHNjMS5tZGN0bFsyNl0pOwotCWFtMTgwOF9zZXRfbWRjdGwoJnJlZy0+cHNjMS5tZGN0bFszMV0pOwotCi0JLyogRG8gQWx3YXlzLU9uIFBvd2VyIERvbWFpbiBUcmFuc2l0aW9ucyAqLwotCXNldGJpdHNfbGUzMigmcmVnLT5wdGNtZCwgMHgwMDAwMDAwMSk7Ci0Jd2hpbGUgKHJlYWRsKCZyZWctPnB0c3RhdCkgJiAweDAwMDAwMDAxKQotCQk7Ci19Ci0KLXZvaWQgYW0xODA4X3Bpbm11eF9jdGwodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaywKLQl1bnNpZ25lZCBsb25nIHZhbHVlKQotewotCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmdfcmVncy0+cGlubXV4W29mZnNldF0sIG1hc2spOwotCXNldGJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmdfcmVncy0+cGlubXV4W29mZnNldF0sIChtYXNrICYgdmFsdWUpKTsKLX0KLQotX19hdHRyaWJ1dGVfXygod2VhaykpCi12b2lkIGJvYXJkX2dwaW9faW5pdCh2b2lkKQotewotCXJldHVybjsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX05BTkRfU1BMKQotdm9pZCBuYW5kX2Jvb3Qodm9pZCkKLXsKLQlfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIHZvaWQgKCp1Ym9vdCkodm9pZCk7Ci0KLQkvKiBjb3B5IGltYWdlIGZyb20gTk9SIHRvIFJBTSAqLwotCW1lbWNweSgodm9pZCAqKUNPTkZJR19TWVNfTkFORF9VX0JPT1RfRFNULAotCQkodm9pZCAqKUNPTkZJR19TWVNfTkFORF9VX0JPT1RfT0ZGUywKLQkJQ09ORklHX1NZU19OQU5EX1VfQk9PVF9TSVpFKTsKLQotCS8qIGFuZCBqdW1wIHRvIGl0IC4uLiAqLwotCXVib290ID0gKHZvaWQgKilDT05GSUdfU1lTX05BTkRfVV9CT09UX1NUQVJUOwotCSgqdWJvb3QpKCk7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX05BTkRfU1BMKQotdm9pZCBib2FyZF9pbml0X2YodWxvbmcgYm9vdGZsYWcpCi0jZWxzZQotaW50IGFyY2hfY3B1X2luaXQodm9pZCkKLSNlbmRpZgotewotCS8qCi0JICogY29waWVkIGZyb20gYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9zdGFydC5TCi0JICoKLQkgKiBmbHVzaCB2NCBJL0QgY2FjaGVzCi0JICovCi0JYXNtKCJtb3YJcjAsICMwIik7Ci0JYXNtKCJtY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwIik7CS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCi0JYXNtKCJtY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwIik7CS8qIGZsdXNoIHY0IFRMQiAqLwotCi0JLyoKLQkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCi0JICovCi0JYXNtKCJtcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwIik7Ci0JLyogY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpICovCi0JYXNtKCJiaWMJcjAsIHIwLCAjMHgwMDAwMjMwMCIpOwotCS8qIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pICovCi0JYXNtKCJiaWMJcjAsIHIwLCAjMHgwMDAwMDA4NyIpOwotCS8qIHNldCBiaXQgMiAoQSkgQWxpZ24gKi8KLQlhc20oIm9ycglyMCwgcjAsICMweDAwMDAwMDAyIik7Ci0JLyogc2V0IGJpdCAxMiAoSSkgSS1DYWNoZSAqLwotCWFzbSgib3JyCXIwLCByMCwgIzB4MDAwMDEwMDAiKTsKLQlhc20oIm1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAiKTsKLQotCS8qIFVubG9jayBraWNrIHJlZ2lzdGVycyAqLwotCXdyaXRlbCgweDgzZTcwYjEzLCAmZGF2aW5jaV9zeXNjZmdfcmVncy0+a2ljazApOwotCXdyaXRlbCgweDk1YTRmMWUwLCAmZGF2aW5jaV9zeXNjZmdfcmVncy0+a2ljazEpOwotCi0JZHZfbWFza2JpdHMoJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPnN1c3BzcmMsCi0JCSgoMSA8PCAyNykgfCAoMSA8PCAyMikgfCAoMSA8PCAyMCkgfCAoMSA8PCA1KSB8CSgxIDw8IDE2KSkpOwotCi0JLyogU3lzdGVtIFBTQyBzZXR1cCAtIGVuYWJsZSBhbGwgKi8KLQlhbTE4MDhfcHNjX2luaXQoKTsKLQotCS8qIFNldHVwIFBpbm11eCAqLwotCWFtMTgwOF9waW5tdXhfY3RsKDAsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDApOwotCWFtMTgwOF9waW5tdXhfY3RsKDEsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDEpOwotCWFtMTgwOF9waW5tdXhfY3RsKDIsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDIpOwotCWFtMTgwOF9waW5tdXhfY3RsKDMsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDMpOwotCWFtMTgwOF9waW5tdXhfY3RsKDQsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDQpOwotCWFtMTgwOF9waW5tdXhfY3RsKDUsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDUpOwotCWFtMTgwOF9waW5tdXhfY3RsKDYsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDYpOwotCWFtMTgwOF9waW5tdXhfY3RsKDcsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDcpOwotCWFtMTgwOF9waW5tdXhfY3RsKDgsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDgpOwotCWFtMTgwOF9waW5tdXhfY3RsKDksIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDkpOwotCWFtMTgwOF9waW5tdXhfY3RsKDEwLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0FNMTgwOF9QSU5NVVgxMCk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMTEsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDExKTsKLQlhbTE4MDhfcGlubXV4X2N0bCgxMiwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMTIpOwotCWFtMTgwOF9waW5tdXhfY3RsKDEzLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0FNMTgwOF9QSU5NVVgxMyk7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMTQsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDE0KTsKLQlhbTE4MDhfcGlubXV4X2N0bCgxNSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMTUpOwotCWFtMTgwOF9waW5tdXhfY3RsKDE2LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0FNMTgwOF9QSU5NVVgxNik7Ci0JYW0xODA4X3Bpbm11eF9jdGwoMTcsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfQU0xODA4X1BJTk1VWDE3KTsKLQlhbTE4MDhfcGlubXV4X2N0bCgxOCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19BTTE4MDhfUElOTVVYMTgpOwotCWFtMTgwOF9waW5tdXhfY3RsKDE5LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0FNMTgwOF9QSU5NVVgxOSk7Ci0KLQkvKiBQTEwgc2V0dXAgKi8KLQlhbTE4MDhfcGxsX2luaXQoZGF2aW5jaV9wbGxjMF9yZWdzLCBDT05GSUdfU1lTX0FNMTgwOF9QTEwwX1BMTE0pOwotCWFtMTgwOF9wbGxfaW5pdChkYXZpbmNpX3BsbGMxX3JlZ3MsIENPTkZJR19TWVNfQU0xODA4X1BMTDFfUExMTSk7Ci0KLQkvKiBHUElPIHNldHVwICovCi0JYm9hcmRfZ3Bpb19pbml0KCk7Ci0KLQkvKiBzZXR1cCBDU24gY29uZmlnICovCi0Jd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X0NTMkNGRywgJmRhdmluY2lfZW1pZl9yZWdzLT5hYjFjcik7Ci0Jd3JpdGVsKENPTkZJR19TWVNfQU0xODA4X0NTM0NGRywgJmRhdmluY2lfZW1pZl9yZWdzLT5hYjJjcik7Ci0KLQlhbTE4MDhfbHBjX3RyYW5zaXRpb24oMSwgMTMsIDAsIFBTQ19FTkFCTEUpOwotCU5TMTY1NTBfaW5pdCgoTlMxNjU1MF90KShDT05GSUdfU1lTX05TMTY1NTBfQ09NMSksCi0JCQlDT05GSUdfU1lTX05TMTY1NTBfQ0xLIC8gMTYgLyBDT05GSUdfQkFVRFJBVEUpOwotCi0JLyoKLQkgKiBGaXggUG93ZXIgYW5kIEVtdWxhdGlvbiBNYW5hZ2VtZW50IFJlZ2lzdGVyCi0JICogc2VlIHNwcnVmdzNhLnBkZiBwYWdlIDM3IFRhYmxlIDI0Ci0JICovCi0Jd3JpdGVsKHJlYWRsKChDT05GSUdfU1lTX05TMTY1NTBfQ09NMSArIDB4MzApKSB8IDB4MDAwMDYwMDEsCi0JCShDT05GSUdfU1lTX05TMTY1NTBfQ09NMSArIDB4MzApKTsKLSNpZiBkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKLQlwdXRzKCJkZHIgaW5pdFxuIik7Ci0JYW0xODA4X2Rkcl9zZXR1cCgxMzIpOwotCi0JcHV0cygiYm9vdCB1LWJvb3QgLi4uXG4iKTsKLQotCW5hbmRfYm9vdCgpOwotI2Vsc2UKLQlhbTE4MDhfZGRyX3NldHVwKDEzMik7Ci0JcmV0dXJuIDA7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9kYTg1MF9sb3dsZXZlbC5jIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9kYXZpbmNpL2RhODUwX2xvd2xldmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlYzcwZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9kYTg1MF9sb3dsZXZlbC5jCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogU29DLXNwZWNpZmljIGxvd2xldmVsIGNvZGUgZm9yIERBODUwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExCisgKiBIZWlrbyBTY2hvY2hlciwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgaHNAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG5hbmQuaD4KKyNpbmNsdWRlIDxuczE2NTUwLmg+CisjaW5jbHVkZSA8cG9zdC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RhODUwX2xvd2xldmVsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kZHIyX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9lbWlmX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbGxfZGVmcy5oPgorCit2b2lkIGRhODUwX3dhaXRsb29wKHVuc2lnbmVkIGxvbmcgbG9vcGNudCkKK3sKKwl1bnNpZ25lZCBsb25nCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbG9vcGNudDsgaSsrKQorCQlhc20oIiAgIE5PUCIpOworfQorCitpbnQgZGE4NTBfcGxsX2luaXQoc3RydWN0IGRhdmluY2lfcGxsY19yZWdzICpyZWcsIHVuc2lnbmVkIGxvbmcgcGxsbXVsdCkKK3sKKwlpZiAocmVnID09IGRhdmluY2lfcGxsYzBfcmVncykKKwkJLyogVW5sb2NrIFBMTCByZWdpc3RlcnMuICovCisJCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmdfcmVncy0+Y2ZnY2hpcDAsIFBMTF9NQVNURVJfTE9DSyk7CisKKwkvKgorCSAqIFNldCBQTExFTlNSQyAnMCcsYml0IDUsIFBMTCBFbmFibGUoUExMRU4pIHNlbGVjdGlvbiBpcyBjb250cm9sbGVkCisJICogdGhyb3VnaCBNTVIKKwkgKi8KKwljbHJiaXRzX2xlMzIoJnJlZy0+cGxsY3RsLCBQTExDVExfUExMRU5TUkMpOworCS8qIFBMTENUTC5FWFRDTEtTUkMgYml0IDkgc2hvdWxkIGJlIGxlZnQgYXQgMCBmb3IgRnJlb24gKi8KKwljbHJiaXRzX2xlMzIoJnJlZy0+cGxsY3RsLCBQTExDVExfRVhUQ0xLU1JDKTsKKworCS8qIFNldCBQTExFTj0wID0+IFBMTCBCWVBBU1MgTU9ERSAqLworCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIFBMTENUTF9QTExFTik7CisKKwlkYTg1MF93YWl0bG9vcCgxNTApOworCisJaWYgKHJlZyA9PSBkYXZpbmNpX3BsbGMwX3JlZ3MpIHsKKwkJLyoKKwkJICogU2VsZWN0IHRoZSBDbG9jayBNb2RlIGJpdCA4IGFzIEV4dGVybmFsIENsb2NrIG9yIE9uIENoaXAKKwkJICogT3NjaWxhdG9yCisJCSAqLworCQlkdl9tYXNrYml0cygmcmVnLT5wbGxjdGwsIH5QTExDVExfUkVTXzkpOworCQlzZXRiaXRzX2xlMzIoJnJlZy0+cGxsY3RsLAorCQkJKENPTkZJR19TWVNfRFZfQ0xLTU9ERSA8PCBQTExDVExfQ0xPQ0tfTU9ERV9TSElGVCkpOworCX0KKworCS8qIENsZWFyIFBMTFJTVCBiaXQgdG8gcmVzZXQgdGhlIFBMTCAqLworCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIFBMTENUTF9QTExSU1QpOworCisJLyogRGlzYWJsZSB0aGUgUExMIG91dHB1dCAqLworCXNldGJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIFBMTENUTF9QTExESVMpOworCisJLyogUExMIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCisJLyoKKwkgKiBQb3dlciB1cCB0aGUgUExMLSBQV1JETiBiaXQgc2V0IHRvIDAgdG8gYnJpbmcgdGhlIFBMTCBvdXQgb2YKKwkgKiBwb3dlciBkb3duIGJpdAorCSAqLworCWNscmJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIFBMTENUTF9QTExQV1JETik7CisKKwkvKiBFbmFibGUgdGhlIFBMTCBmcm9tIERpc2FibGUgTW9kZSBQTExESVMgYml0IHRvIDAgKi8KKwljbHJiaXRzX2xlMzIoJnJlZy0+cGxsY3RsLCBQTExDVExfUExMRElTKTsKKworCS8qIFByb2dyYW0gdGhlIHJlcXVpcmVkIG11bHRpcGxpZXIgdmFsdWUgaW4gUExMTSAqLworCXdyaXRlbChwbGxtdWx0LCAmcmVnLT5wbGxtKTsKKworCS8qIHByb2dyYW0gdGhlIHBvc3RkaXYgKi8KKwlpZiAocmVnID09IGRhdmluY2lfcGxsYzBfcmVncykKKwkJd3JpdGVsKChQTExfUE9TVERFTiB8IENPTkZJR19TWVNfREE4NTBfUExMMF9QT1NURElWKSwKKwkJCSZyZWctPnBvc3RkaXYpOworCWVsc2UKKwkJd3JpdGVsKChQTExfUE9TVERFTiB8IENPTkZJR19TWVNfREE4NTBfUExMMV9QT1NURElWKSwKKwkJCSZyZWctPnBvc3RkaXYpOworCisJLyoKKwkgKiBDaGVjayBmb3IgdGhlIEdPU1RBVCBiaXQgaW4gUExMU1RBVCB0byBjbGVhciB0byAwIHRvIGluZGljYXRlIHRoYXQKKwkgKiBubyBHTyBvcGVyYXRpb24gaXMgY3VycmVudGx5IGluIHByb2dyZXNzCisJICovCisJd2hpbGUgKChyZWFkbCgmcmVnLT5wbGxzdGF0KSAmIFBMTENNRF9HT1NUQVQpID09IFBMTENNRF9HT1NUQVQpCisJCTsKKworCWlmIChyZWcgPT0gZGF2aW5jaV9wbGxjMF9yZWdzKSB7CisJCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX1BMTDBfUExMRElWMSwgJnJlZy0+cGxsZGl2MSk7CisJCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX1BMTDBfUExMRElWMiwgJnJlZy0+cGxsZGl2Mik7CisJCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX1BMTDBfUExMRElWMywgJnJlZy0+cGxsZGl2Myk7CisJCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX1BMTDBfUExMRElWNCwgJnJlZy0+cGxsZGl2NCk7CisJCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX1BMTDBfUExMRElWNSwgJnJlZy0+cGxsZGl2NSk7CisJCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX1BMTDBfUExMRElWNiwgJnJlZy0+cGxsZGl2Nik7CisJCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX1BMTDBfUExMRElWNywgJnJlZy0+cGxsZGl2Nyk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMV9QTExESVYxLCAmcmVnLT5wbGxkaXYxKTsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMV9QTExESVYyLCAmcmVnLT5wbGxkaXYyKTsKKwkJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfUExMMV9QTExESVYzLCAmcmVnLT5wbGxkaXYzKTsKKwl9CisKKwkvKgorCSAqIFNldCB0aGUgR09TRVQgYml0IGluIFBMTENNRCB0byAxIHRvIGluaXRpYXRlIGEgbmV3IGRpdmlkZXIKKwkgKiB0cmFuc2l0aW9uLgorCSAqLworCXNldGJpdHNfbGUzMigmcmVnLT5wbGxjbWQsIFBMTENNRF9HT1NUQVQpOworCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgR09TVEFUIGJpdCBpbiBQTExTVEFUIHRvIGNsZWFyIHRvIDAKKwkgKiAoY29tcGxldGlvbiBvZiBwaGFzZSBhbGlnbm1lbnQpLgorCSAqLworCXdoaWxlICgocmVhZGwoJnJlZy0+cGxsc3RhdCkgJiBQTExDTURfR09TVEFUKSA9PSBQTExDTURfR09TVEFUKQorCQk7CisKKwkvKiBXYWl0IGZvciBQTEwgdG8gcmVzZXQgcHJvcGVybHkuIFNlZSBQTEwgc3BlYyBmb3IgUExMIHJlc2V0IHRpbWUgKi8KKwlkYTg1MF93YWl0bG9vcCgyMDApOworCisJLyogU2V0IHRoZSBQTExSU1QgYml0IGluIFBMTENUTCB0byAxIHRvIGJyaW5nIHRoZSBQTEwgb3V0IG9mIHJlc2V0ICovCisJc2V0Yml0c19sZTMyKCZyZWctPnBsbGN0bCwgUExMQ1RMX1BMTFJTVCk7CisKKwkvKiBXYWl0IGZvciBQTEwgdG8gbG9jay4gU2VlIFBMTCBzcGVjIGZvciBQTEwgbG9jayB0aW1lICovCisJZGE4NTBfd2FpdGxvb3AoMjQwMCk7CisKKwkvKgorCSAqIFNldCB0aGUgUExMRU4gYml0IGluIFBMTENUTCB0byAxIHRvIHJlbW92ZSB0aGUgUExMIGZyb20gYnlwYXNzCisJICogbW9kZQorCSAqLworCXNldGJpdHNfbGUzMigmcmVnLT5wbGxjdGwsIFBMTENUTF9QTExFTik7CisKKworCS8qCisJICogY2xlYXIgRU1JRkEgYW5kIEVNSUZCIGNsb2NrIHNvdXJjZSBzZXR0aW5ncywgbGV0IHRoZW0KKwkgKiBydW4gb2ZmIFNZU0NMSworCSAqLworCWlmIChyZWcgPT0gZGF2aW5jaV9wbGxjMF9yZWdzKQorCQlkdl9tYXNrYml0cygmZGF2aW5jaV9zeXNjZmdfcmVncy0+Y2ZnY2hpcDMsCisJCQl+KFBMTF9TQ1NDRkczX0RJVjQ1UEVOQSB8IFBMTF9TQ1NDRkczX0VNQV9DTEtTUkMpKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGE4NTBfZGRyX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZwl0bXA7CisKKwkvKiBFbmFibGUgdGhlIENsb2NrIHRvIEREUjIvbUREUiAqLworCWxwc2Nfb24oREFWSU5DSV9MUFNDX0REUl9FTUlGKTsKKworCXRtcCA9IHJlYWRsKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsKTsKKwlpZiAoKHRtcCAmIFZUUF9QT1dFUkRXTikgPT0gVlRQX1BPV0VSRFdOKSB7CisJCS8qIEJlZ2luIFZUUCBDYWxpYnJhdGlvbiAqLworCQljbHJiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9QT1dFUkRXTik7CisJCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0xPQ0spOworCQlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9DTEtSWik7CisJCWNscmJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0NMS1JaKTsKKwkJc2V0Yml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfQ0xLUlopOworCisJCS8qIFBvbGxpbmcgUkVBRFkgYml0IHRvIHNlZSB3aGVuIFZUUCBjYWxpYnJhdGlvbiBpcyBkb25lICovCisJCXRtcCA9IHJlYWRsKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsKTsKKwkJd2hpbGUgKCh0bXAgJiBWVFBfUkVBRFkpICE9IFZUUF9SRUFEWSkKKwkJCXRtcCA9IHJlYWRsKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsKTsKKworCQlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT52dHBpb19jdGwsIFZUUF9MT0NLKTsKKwkJc2V0Yml0c19sZTMyKCZkYXZpbmNpX3N5c2NmZzFfcmVncy0+dnRwaW9fY3RsLCBWVFBfUE9XRVJEV04pOworCisJCXNldGJpdHNfbGUzMigmZGF2aW5jaV9zeXNjZmcxX3JlZ3MtPnZ0cGlvX2N0bCwgVlRQX0lPUFdSRFdOKTsKKwl9CisKKwl3cml0ZWwoQ09ORklHX1NZU19EQTg1MF9ERFIyX0REUlBIWUNSLCAmZHZfZGRyMl9yZWdzX2N0cmwtPmRkcnBoeWNyKTsKKwljbHJiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnMV9yZWdzLT5kZHJfc2xldywKKwkJKDEgPDwgRERSX1NMRVdfQ01PU0VOX0JJVCkpOworCisJLyoKKwkgKiBTRFJBTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChTRENSKToKKwkgKiBGaXJzdCBzZXQgdGhlIEJPT1RVTkxPQ0sgYml0IHRvIG1ha2UgY29uZmlndXJhdGlvbiBiaXRzCisJICogd3JpdGVhYmxlLgorCSAqLworCXNldGJpdHNfbGUzMigmZHZfZGRyMl9yZWdzX2N0cmwtPnNkYmNyLCBEVl9ERFJfQk9PVFVOTE9DSyk7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBuZXcgdmFsdWUgb2YgdGhlc2UgYml0cyBhbmQgY2xlYXIgQk9PVFVOTE9DSy4KKwkgKiBBdCB0aGUgc2FtZSB0aW1lLCBzZXQgdGhlIFRJTVVOTE9DSyBiaXQgdG8gYWxsb3cgY2hhbmdpbmcKKwkgKiB0aGUgdGltaW5nIHJlZ2lzdGVycworCSAqLworCXRtcCA9IENPTkZJR19TWVNfREE4NTBfRERSMl9TREJDUjsKKwl0bXAgJj0gfkRWX0REUl9CT09UVU5MT0NLOworCXRtcCB8PSBEVl9ERFJfVElNVU5MT0NLOworCXdyaXRlbCh0bXAsICZkdl9kZHIyX3JlZ3NfY3RybC0+c2RiY3IpOworCisJLyogd3JpdGUgbWVtb3J5IGNvbmZpZ3VyYXRpb24gYW5kIHRpbWluZyAqLworCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX0REUjJfU0RCQ1IyLCAmZHZfZGRyMl9yZWdzX2N0cmwtPnNkYmNyMik7CisJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfRERSMl9TRFRJTVIsICZkdl9kZHIyX3JlZ3NfY3RybC0+c2R0aW1yKTsKKwl3cml0ZWwoQ09ORklHX1NZU19EQTg1MF9ERFIyX1NEVElNUjIsICZkdl9kZHIyX3JlZ3NfY3RybC0+c2R0aW1yMik7CisKKwkvKiBjbGVhciB0aGUgVElNVU5MT0NLIGJpdCBhbmQgd3JpdGUgdGhlIHZhbHVlIG9mIHRoZSBDTCBmaWVsZCAqLworCXRtcCAmPSB+RFZfRERSX1RJTVVOTE9DSzsKKwl3cml0ZWwodG1wLCAmZHZfZGRyMl9yZWdzX2N0cmwtPnNkYmNyKTsKKworCS8qCisJICogTFBNT0RFTiBhbmQgTUNMS1NUT1BFTiBtdXN0IGJlIHNldCEKKwkgKiBXaXRob3V0IHRoaXMgYml0cyBzZXQsIFBTQyBkb247dCBzd2l0Y2ggc3RhdGVzICEhCisJICovCisJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfRERSMl9TRFJDUiB8CisJCSgxIDw8IERWX0REUl9TUkNSX0xQTU9ERU5fU0hJRlQpIHwKKwkJKDEgPDwgRFZfRERSX1NSQ1JfTUNMS1NUT1BFTl9TSElGVCksCisJCSZkdl9kZHIyX3JlZ3NfY3RybC0+c2RyY3IpOworCisJLyogU3luY1Jlc2V0IHRoZSBDbG9jayB0byBFTUlGM0EgU0RSQU0gKi8KKwlscHNjX3N5bmNyZXNldChEQVZJTkNJX0xQU0NfRERSX0VNSUYpOworCS8qIEVuYWJsZSB0aGUgQ2xvY2sgdG8gRU1JRjNBIFNEUkFNICovCisJbHBzY19vbihEQVZJTkNJX0xQU0NfRERSX0VNSUYpOworCisJLyogZGlzYWJsZSBzZWxmIHJlZnJlc2ggKi8KKwljbHJiaXRzX2xlMzIoJmR2X2RkcjJfcmVnc19jdHJsLT5zZHJjciwKKwkJRFZfRERSX1NEUkNSX0xQTU9ERU4gfCBEVl9ERFJfU0RSQ1JfTFBNT0RFTik7CisJd3JpdGVsKENPTkZJR19TWVNfREE4NTBfRERSMl9QQkJQUiwgJmR2X2RkcjJfcmVnc19jdHJsLT5wYmJwcik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkYTg1MF9waW5tdXhfY3RsKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIG1hc2ssCisJdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwljbHJiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPnBpbm11eFtvZmZzZXRdLCBtYXNrKTsKKwlzZXRiaXRzX2xlMzIoJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPnBpbm11eFtvZmZzZXRdLCAobWFzayAmIHZhbHVlKSk7Cit9CisKK19fYXR0cmlidXRlX18oKHdlYWspKQordm9pZCBib2FyZF9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm47Cit9CisKK2ludCBhcmNoX2NwdV9pbml0KHZvaWQpCit7CisJLyogVW5sb2NrIGtpY2sgcmVnaXN0ZXJzICovCisJd3JpdGVsKERWX1NZU0NGR19LSUNLMF9VTkxPQ0ssICZkYXZpbmNpX3N5c2NmZ19yZWdzLT5raWNrMCk7CisJd3JpdGVsKERWX1NZU0NGR19LSUNLMV9VTkxPQ0ssICZkYXZpbmNpX3N5c2NmZ19yZWdzLT5raWNrMSk7CisKKwlkdl9tYXNrYml0cygmZGF2aW5jaV9zeXNjZmdfcmVncy0+c3VzcHNyYywKKwkJQ09ORklHX1NZU19EQTg1MF9TWVNDRkdfU1VTUFNSQyk7CisKKwkvKiBTZXR1cCBQaW5tdXggKi8KKwlkYTg1MF9waW5tdXhfY3RsKDAsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfREE4NTBfUElOTVVYMCk7CisJZGE4NTBfcGlubXV4X2N0bCgxLCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDEpOworCWRhODUwX3Bpbm11eF9jdGwoMiwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgyKTsKKwlkYTg1MF9waW5tdXhfY3RsKDMsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfREE4NTBfUElOTVVYMyk7CisJZGE4NTBfcGlubXV4X2N0bCg0LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDQpOworCWRhODUwX3Bpbm11eF9jdGwoNSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVg1KTsKKwlkYTg1MF9waW5tdXhfY3RsKDYsIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfREE4NTBfUElOTVVYNik7CisJZGE4NTBfcGlubXV4X2N0bCg3LCAweEZGRkZGRkZGLCBDT05GSUdfU1lTX0RBODUwX1BJTk1VWDcpOworCWRhODUwX3Bpbm11eF9jdGwoOCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVg4KTsKKwlkYTg1MF9waW5tdXhfY3RsKDksIDB4RkZGRkZGRkYsIENPTkZJR19TWVNfREE4NTBfUElOTVVYOSk7CisJZGE4NTBfcGlubXV4X2N0bCgxMCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxMCk7CisJZGE4NTBfcGlubXV4X2N0bCgxMSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxMSk7CisJZGE4NTBfcGlubXV4X2N0bCgxMiwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxMik7CisJZGE4NTBfcGlubXV4X2N0bCgxMywgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxMyk7CisJZGE4NTBfcGlubXV4X2N0bCgxNCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxNCk7CisJZGE4NTBfcGlubXV4X2N0bCgxNSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxNSk7CisJZGE4NTBfcGlubXV4X2N0bCgxNiwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxNik7CisJZGE4NTBfcGlubXV4X2N0bCgxNywgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxNyk7CisJZGE4NTBfcGlubXV4X2N0bCgxOCwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxOCk7CisJZGE4NTBfcGlubXV4X2N0bCgxOSwgMHhGRkZGRkZGRiwgQ09ORklHX1NZU19EQTg1MF9QSU5NVVgxOSk7CisKKwkvKiBQTEwgc2V0dXAgKi8KKwlkYTg1MF9wbGxfaW5pdChkYXZpbmNpX3BsbGMwX3JlZ3MsIENPTkZJR19TWVNfREE4NTBfUExMMF9QTExNKTsKKwlkYTg1MF9wbGxfaW5pdChkYXZpbmNpX3BsbGMxX3JlZ3MsIENPTkZJR19TWVNfREE4NTBfUExMMV9QTExNKTsKKworCS8qIEdQSU8gc2V0dXAgKi8KKwlib2FyZF9ncGlvX2luaXQoKTsKKworCS8qIHNldHVwIENTbiBjb25maWcgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfREE4NTBfQ1MyQ0ZHKQorCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX0NTMkNGRywgJmRhdmluY2lfZW1pZl9yZWdzLT5hYjFjcik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfREE4NTBfQ1MzQ0ZHKQorCXdyaXRlbChDT05GSUdfU1lTX0RBODUwX0NTM0NGRywgJmRhdmluY2lfZW1pZl9yZWdzLT5hYjJjcik7CisjZW5kaWYKKworCWxwc2Nfb24oQ09ORklHX1NZU19EQTg1MF9MUFNDX1VBUlQpOworCU5TMTY1NTBfaW5pdCgoTlMxNjU1MF90KShDT05GSUdfU1lTX05TMTY1NTBfQ09NMSksCisJCQlDT05GSUdfU1lTX05TMTY1NTBfQ0xLIC8gMTYgLyBDT05GSUdfQkFVRFJBVEUpOworCisJLyoKKwkgKiBGaXggUG93ZXIgYW5kIEVtdWxhdGlvbiBNYW5hZ2VtZW50IFJlZ2lzdGVyCisJICogc2VlIHNwcnVmdzNhLnBkZiBwYWdlIDM3IFRhYmxlIDI0CisJICovCisJd3JpdGVsKChEQVZJTkNJX1VBUlRfUFdSRU1VX01HTVRfRlJFRSB8IERBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9VUlJTVCB8CisJCURBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9VVFJTVCksCisJICAgICAgICZkYXZpbmNpX3VhcnQyX2N0cmxfcmVncy0+cHdyZW11X21nbXQpOworCisJZGE4NTBfZGRyX3NldHVwKCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvZG0zNjVfbG93bGV2ZWwuYyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9kbTM2NV9sb3dsZXZlbC5jCmluZGV4IDM3NzJlNjQuLjZlOTk4ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9kbTM2NV9sb3dsZXZlbC5jCisrKyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvZGF2aW5jaS9kbTM2NV9sb3dsZXZlbC5jCkBAIC00NSw3ICs0NSw4IEBACiAJY2xyYml0c19sZTMyKCZkdl9wbGwwX3JlZ3MtPnBsbGN0bCwgUExMQ1RMX1BMTFBXUkROKTsKIAogCWNscmJpdHNfbGUzMigmZHZfcGxsMF9yZWdzLT5wbGxjdGwsIFBMTENUTF9SRVNfOSk7Ci0Jc2V0Yml0c19sZTMyKCZkdl9wbGwwX3JlZ3MtPnBsbGN0bCwgY2xrc3JjIDw8IDgpOworCXNldGJpdHNfbGUzMigmZHZfcGxsMF9yZWdzLT5wbGxjdGwsCisJCWNsa3NyYyA8PCBQTExDVExfQ0xPQ0tfTU9ERV9TSElGVCk7CiAKIAkvKgogCSAqIFNldCBQTExFTlNSQyAnMCcsIFBMTCBFbmFibGUoUExMRU4pIHNlbGVjdGlvbiBpcyBjb250cm9sbGVkCkBAIC04Miw3ICs4Myw3IEBACiAJd3JpdGVsKFBMTFNFQ0NUTF9TVE9QTU9ERSB8IFBMTFNFQ0NUTF9USU5JVFosICZkdl9wbGwwX3JlZ3MtPnNlY2N0bCk7CiAKIAkvKiBQcm9ncmFtIHRoZSBQb3N0RGl2IGZvciBQTEwxICovCi0Jd3JpdGVsKDB4ODAwMCwgJmR2X3BsbDBfcmVncy0+cG9zdGRpdik7CisJd3JpdGVsKFBMTF9QT1NUREVOLCAmZHZfcGxsMF9yZWdzLT5wb3N0ZGl2KTsKIAogCS8qIFBvc3QgZGl2aWRlciBzZXR0aW5nIGZvciBQTEwxICovCiAJd3JpdGVsKENPTkZJR19TWVNfRE0zNnhfUExMMV9QTExESVYxLCAmZHZfcGxsMF9yZWdzLT5wbGxkaXYxKTsKQEAgLTEyNiw3ICsxMjcsOCBAQAogCSAqIFZEQiBoYXMgaW5wdXQgb24gTVhJIHBpbgogCSAqLwogCWNscmJpdHNfbGUzMigmZHZfcGxsMV9yZWdzLT5wbGxjdGwsIFBMTENUTF9SRVNfOSk7Ci0Jc2V0Yml0c19sZTMyKCZkdl9wbGwxX3JlZ3MtPnBsbGN0bCwgY2xrc3JjIDw8IDgpOworCXNldGJpdHNfbGUzMigmZHZfcGxsMV9yZWdzLT5wbGxjdGwsCisJCWNsa3NyYyA8PCBQTExDVExfQ0xPQ0tfTU9ERV9TSElGVCk7CiAKIAkvKgogCSAqIFNldCBQTExFTlNSQyAnMCcsIFBMTCBFbmFibGUoUExMRU4pIHNlbGVjdGlvbiBpcyBjb250cm9sbGVkCkBAIC0xNTEsNyArMTUzLDcgQEAKIAl3cml0ZWwocGxsbSwgJmR2X3BsbDFfcmVncy0+cGxsbSk7CiAJd3JpdGVsKHByZWRpdiwgJmR2X3BsbDFfcmVncy0+cHJlZGl2KTsKIAotCXdyaXRlbCgweDgwMDAsICZkdl9wbGwxX3JlZ3MtPnBvc3RkaXYpOworCXdyaXRlbChQTExfUE9TVERFTiwgJmR2X3BsbDFfcmVncy0+cG9zdGRpdik7CiAKIAkvKiBBc3NlcnQgVEVOQUJMRSA9IDEsIFRFTkFCTEVESVYgPSAxLCBUSU5JVFogPSAxICovCiAJd3JpdGVsKFBMTFNFQ0NUTF9TVE9QTU9ERSB8IFBMTFNFQ0NUTF9URU5BQkxFRElWIHwgUExMU0VDQ1RMX1RFTkFCTEUgfApAQCAtMjYxLDIxICsyNjMsMjMgQEAKIAkJVlBTU19DTEtfQ1RMX1ZQU1NfQ0xLTUQpOwogCiAJLyogTFBTQyBTeW5jUmVzZXQgRERSIENsb2NrIEVuYWJsZSAqLwotCXdyaXRlbCgoKHJlYWRsKCZkdl9wc2NfcmVncy0+bWRjdGxbNDddKSAmIH5QU0NfTURfU1RBVEVfTVNLKSB8Ci0JCVBTQ19TWU5DUkVTRVQpLCAmZHZfcHNjX3JlZ3MtPm1kY3RsWzQ3XSk7CisJd3JpdGVsKCgocmVhZGwoJmR2X3BzY19yZWdzLT5tZGN0bFtEQVZJTkNJX0xQU0NfVlBTU01BU1RFUl0pICYKKwkJflBTQ19NRF9TVEFURV9NU0spIHwgUFNDX1NZTkNSRVNFVCksCisJCSZkdl9wc2NfcmVncy0+bWRjdGxbREFWSU5DSV9MUFNDX1ZQU1NNQVNURVJdKTsKIAogCXdyaXRlbCgoMSA8PCBQZE51bSksICZkdl9wc2NfcmVncy0+cHRjbWQpOwogCiAJd2hpbGUgKCEoKChyZWFkbCgmZHZfcHNjX3JlZ3MtPnB0c3RhdCkgPj4gUGROdW0pICYgUFNDX0dPU1RBVCkgPT0gMCkpCiAJCTsKLQl3aGlsZSAoISgocmVhZGwoJmR2X3BzY19yZWdzLT5tZHN0YXRbNDddKSAmICBQU0NfTURfU1RBVEVfTVNLKSA9PQotCQlQU0NfU1lOQ1JFU0VUKSkKKwl3aGlsZSAoISgocmVhZGwoJmR2X3BzY19yZWdzLT5tZHN0YXRbREFWSU5DSV9MUFNDX1ZQU1NNQVNURVJdKSAmCisJCVBTQ19NRF9TVEFURV9NU0spID09IFBTQ19TWU5DUkVTRVQpKQogCQk7CiB9CiAKIHZvaWQgZG0zNjVfcG9yX3Jlc2V0KHZvaWQpCiB7Ci0JaWYgKHJlYWRsKCZkdl9wbGwwX3JlZ3MtPnJzdHlwZSkgJiAzKQorCWlmIChyZWFkbCgmZHZfcGxsMF9yZWdzLT5yc3R5cGUpICYKKwkJKFBMTF9SU1RZUEVfUE9SIHwgUExMX1JTVFlQRV9YV1JTVCkpCiAJCWRtMzY1X3Zwc3Nfc3luY19yZXNldCgpOwogfQogCkBAIC0yOTEsMTkgKzI5NSwyMCBAQAogCiAJZm9yIChscHNjZ3JvdXAgPSBscHNjbWluOyBscHNjZ3JvdXAgPD0gbHBzY21heDsgbHBzY2dyb3VwKyspIHsKIAkJaWYgKGxwc2Nncm91cCA9PSAwKSB7Ci0JCQlscHNjX3N0YXJ0ID0gMDsgLyogRW5hYmxpbmcgTFBTQyAzIHRvIDI4IFNDUiBmaXJzdCAqLwotCQkJbHBzY19lbmQgICA9IDI4OworCQkJLyogRW5hYmxpbmcgTFBTQyAzIHRvIDI4IFNDUiBmaXJzdCAqLworCQkJbHBzY19zdGFydCA9IERBVklOQ0lfTFBTQ19WUFNTTVNUUjsKKwkJCWxwc2NfZW5kICAgPSBEQVZJTkNJX0xQU0NfVElNRVIxOwogCQl9IGVsc2UgaWYgKGxwc2Nncm91cCA9PSAxKSB7IC8qIFNraXAgbG9ja2VkIExQU0NzIFsyOS0zN10gKi8KLQkJCWxwc2Nfc3RhcnQgPSAzODsKLQkJCWxwc2NfZW5kICAgPSA0NzsKKwkJCWxwc2Nfc3RhcnQgPSBEQVZJTkNJX0xQU0NfQ0ZHNTsKKwkJCWxwc2NfZW5kICAgPSBEQVZJTkNJX0xQU0NfVlBTU01BU1RFUjsKIAkJfSBlbHNlIHsKLQkJCWxwc2Nfc3RhcnQgPSA1MDsKLQkJCWxwc2NfZW5kICAgPSA1MTsKKwkJCWxwc2Nfc3RhcnQgPSBEQVZJTkNJX0xQU0NfTUpDUDsKKwkJCWxwc2NfZW5kICAgPSBEQVZJTkNJX0xQU0NfSERWSUNQOwogCQl9CiAKIAkJLyogTkVYVD0weDMsIEVuYWJsZSBMUFNDJ3MgKi8KIAkJZm9yIChpID0gbHBzY19zdGFydDsgaSA8PSBscHNjX2VuZDsgaSsrKQotCQkJc2V0Yml0c19sZTMyKCZkdl9wc2NfcmVncy0+bWRjdGxbaV0sIDB4Myk7CisJCQlzZXRiaXRzX2xlMzIoJmR2X3BzY19yZWdzLT5tZGN0bFtpXSwgUFNDX0VOQUJMRSk7CiAKIAkJLyoKIAkJICogUHJvZ3JhbSBnb2N0bCB0byBzdGFydCB0cmFuc2l0aW9uIHNlcXVlbmNlIGZvciBMUFNDcwpAQCAtMzIyLDcgKzMyNyw3IEBACiAJCS8qIFdhaXQgZm9yIE1PRFNUQVQgPSBFTkFCTEUgZnJvbSBMUFNDJ3MgKi8KIAkJZm9yIChpID0gbHBzY19zdGFydDsgaSA8PSBscHNjX2VuZDsgaSsrKQogCQkJd2hpbGUgKCEoKHJlYWRsKCZkdl9wc2NfcmVncy0+bWRzdGF0W2ldKSAmCi0JCQkJUFNDX01EX1NUQVRFX01TSykgPT0gMHgzKSkKKwkJCQlQU0NfTURfU1RBVEVfTVNLKSA9PSBQU0NfRU5BQkxFKSkKIAkJCQk7CiAJfQogfQpAQCAtMzMyLDcgKzMzNyw3IEBACiAJd3JpdGVsKENPTkZJR19TWVNfRE0zNnhfQVdDQ1IsICZkYXZpbmNpX2VtaWZfcmVncy0+YXdjY3IpOwogCXdyaXRlbChDT05GSUdfU1lTX0RNMzZ4X0FCMUNSLCAmZGF2aW5jaV9lbWlmX3JlZ3MtPmFiMWNyKTsKIAotCXNldGJpdHNfbGUzMigmZGF2aW5jaV9lbWlmX3JlZ3MtPm5hbmRmY3IsIDEpOworCXNldGJpdHNfbGUzMigmZGF2aW5jaV9lbWlmX3JlZ3MtPm5hbmRmY3IsIERBVklOQ0lfTkFOREZDUl9DUzJOQU5EKTsKIAogCXdyaXRlbChDT05GSUdfU1lTX0RNMzZ4X0FCMkNSLCAmZGF2aW5jaV9lbWlmX3JlZ3MtPmFiMmNyKTsKIApAQCAtMzYxLDMxICszNjYsMTIgQEAKIAogdm9pZCBkbTM2eF9sb3dsZXZlbF9pbml0KHVsb25nIGJvb3RmbGFnKQogewotCS8qCi0JICogY29waWVkIGZyb20gYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9zdGFydC5TCi0JICoKLQkgKiBmbHVzaCB2NCBJL0QgY2FjaGVzCi0JICovCi0JYXNtKCJtb3YJcjAsICMwIik7Ci0JYXNtKCJtY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwIik7CS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCi0JYXNtKCJtY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwIik7CS8qIGZsdXNoIHY0IFRMQiAqLwotCi0JLyoKLQkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCi0JICovCi0JYXNtKCJtcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwIik7Ci0JLyogY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpICovCi0JYXNtKCJiaWMJcjAsIHIwLCAjMHgwMDAwMjMwMCIpOwotCS8qIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pICovCi0JYXNtKCJiaWMJcjAsIHIwLCAjMHgwMDAwMDA4NyIpOwotCS8qIHNldCBiaXQgMiAoQSkgQWxpZ24gKi8KLQlhc20oIm9ycglyMCwgcjAsICMweDAwMDAwMDAyIik7Ci0JLyogc2V0IGJpdCAxMiAoSSkgSS1DYWNoZSAqLwotCWFzbSgib3JyCXIwLCByMCwgIzB4MDAwMDEwMDAiKTsKLQlhc20oIm1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAiKTsKKwlzdHJ1Y3QgZGF2aW5jaV91YXJ0X2N0cmxfcmVncyAqZGF2aW5jaV91YXJ0X2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgZGF2aW5jaV91YXJ0X2N0cmxfcmVncyAqKShDT05GSUdfU1lTX05TMTY1NTBfQ09NMSArCisJCURBVklOQ0lfVUFSVF9DVFJMX0JBU0UpOwogCiAJLyogTWFzayBhbGwgaW50ZXJydXB0cyAqLwotCXdyaXRlbCgweDA0LCAmZHZfYWludGNfcmVncy0+aW50Y3RsKTsKKwl3cml0ZWwoRFZfQUlOVENfSU5UQ1RMX0lETU9ERSwgJmR2X2FpbnRjX3JlZ3MtPmludGN0bCk7CiAJd3JpdGVsKDB4MCwgJmR2X2FpbnRjX3JlZ3MtPmVhYmFzZSk7CiAJd3JpdGVsKDB4MCwgJmR2X2FpbnRjX3JlZ3MtPmVpbnQwKTsKIAl3cml0ZWwoMHgwLCAmZHZfYWludGNfcmVncy0+ZWludDEpOwpAQCAtNDIyLDcgKzQwOCwxMCBAQAogCSAqIEZpeCBQb3dlciBhbmQgRW11bGF0aW9uIE1hbmFnZW1lbnQgUmVnaXN0ZXIKIAkgKiBzZWUgc3BydWZoMi5wZGYgcGFnZSAzOCBUYWJsZSAyMgogCSAqLwotCXdyaXRlbCgweDAwMDBlMDAzLCAoQ09ORklHX1NZU19OUzE2NTUwX0NPTTEgKyAweDMwKSk7CisJd3JpdGVsKChEQVZJTkNJX1VBUlRfUFdSRU1VX01HTVRfRlJFRSB8IERBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9VUlJTVCB8CisJCURBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9VVFJTVCksCisJICAgICAgICZkYXZpbmNpX3VhcnRfY3RybF9yZWdzLT5wd3JlbXVfbWdtdCk7CisKIAlwdXRzKCJkZHIgaW5pdFxuIik7CiAJZG0zNjVfZGRyX3NldHVwKCk7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjIyNi9NYWtlZmlsZSBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBib2FyZC9jc2IyMjYvTWFrZWZpbGUKcmVuYW1lIHRvIGFyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC9NYWtlZmlsZQppbmRleCA2ZmU5YmVjLi43ODQ1MzEwIDEwMDY0NAotLS0gYS9ib2FyZC9jc2IyMjYvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L01ha2VmaWxlCkBAIC0yMywxNCArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9ICQob2JqKWxpYiQoQk9BUkQpLm8KK0xJQgk9ICQob2JqKWxpYiQoU09DKS5vCiAKLUNPQkpTCTo9IGNzYjIyNi5vIGZsYXNoLm8KK0NPQkpTCT0gY2xvY2subyBteDI4Lm8gaW9tdXgubyB0aW1lci5vCiAKLVNSQ1MJOj0gJChDT0JKUzoubz0uYykKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQogCi0kKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorYWxsOgkkKG9iaikuZGVwZW5kICQoTElCKQorCiskKExJQik6CSQoT0JKUykKIAkkKGNhbGwgY21kX2xpbmtfb190YXJnZXQsICQoT0JKUykpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC9jbG9jay5jIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5ODUwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC9jbG9jay5jCkBAIC0wLDAgKzEsMzU1IEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBjbG9jayBzZXR1cCBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorCisvKiBUaGUgUExMIGZyZXF1ZW5jeSBpcyBhbHdheXMgNDgwTUh6LCBzZWUgc2VjdGlvbiAxMC4yIGluIGlNWDI4IGRhdGFzaGVldC4gKi8KKyNkZWZpbmUJUExMX0ZSRVFfS0haCTQ4MDAwMAorI2RlZmluZQlQTExfRlJFUV9DT0VGCTE4CisvKiBUaGUgWFRBTCBmcmVxdWVuY3kgaXMgYWx3YXlzIDI0TUh6LCBzZWUgc2VjdGlvbiAxMC4yIGluIGlNWDI4IGRhdGFzaGVldC4gKi8KKyNkZWZpbmUJWFRBTF9GUkVRX0tIWgkyNDAwMAorCisjZGVmaW5lCVBMTF9GUkVRX01IWgkoUExMX0ZSRVFfS0haIC8gMTAwMCkKKyNkZWZpbmUJWFRBTF9GUkVRX01IWgkoWFRBTF9GUkVRX0tIWiAvIDEwMDApCisKK3N0YXRpYyB1aW50MzJfdCBteDI4X2dldF9wY2xrKHZvaWQpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKworCXVpbnQzMl90IGNsa2N0cmwsIGNsa3NlcSwgY2xrZnJhYzsKKwl1aW50MzJfdCBmcmFjLCBkaXY7CisKKwljbGtjdHJsID0gcmVhZGwoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jcHUpOworCisJLyogTm8gc3VwcG9ydCBvZiBmcmFjdGlvbmFsIGRpdmlkZXIgY2FsY3VsYXRpb24gKi8KKwlpZiAoY2xrY3RybCAmCisJCShDTEtDVFJMX0NQVV9ESVZfWFRBTF9GUkFDX0VOIHwgQ0xLQ1RSTF9DUFVfRElWX0NQVV9GUkFDX0VOKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwljbGtzZXEgPSByZWFkbCgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2Nsa3NlcSk7CisKKwkvKiBYVEFMIFBhdGggKi8KKwlpZiAoY2xrc2VxICYgQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0NQVSkgeworCQlkaXYgPSAoY2xrY3RybCAmIENMS0NUUkxfQ1BVX0RJVl9YVEFMX01BU0spID4+CisJCQlDTEtDVFJMX0NQVV9ESVZfWFRBTF9PRkZTRVQ7CisJCXJldHVybiBYVEFMX0ZSRVFfTUhaIC8gZGl2OworCX0KKworCS8qIFJFRiBQYXRoICovCisJY2xrZnJhYyA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzApOworCWZyYWMgPSBjbGtmcmFjICYgQ0xLQ1RSTF9GUkFDMF9DUFVGUkFDX01BU0s7CisJZGl2ID0gY2xrY3RybCAmIENMS0NUUkxfQ1BVX0RJVl9DUFVfTUFTSzsKKwlyZXR1cm4gKFBMTF9GUkVRX01IWiAqIFBMTF9GUkVRX0NPRUYgLyBmcmFjKSAvIGRpdjsKK30KKworc3RhdGljIHVpbnQzMl90IG14MjhfZ2V0X2hjbGsodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCisJdWludDMyX3QgZGl2OworCXVpbnQzMl90IGNsa2N0cmw7CisKKwljbGtjdHJsID0gcmVhZGwoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9oYnVzKTsKKworCS8qIE5vIHN1cHBvcnQgb2YgZnJhY3Rpb25hbCBkaXZpZGVyIGNhbGN1bGF0aW9uICovCisJaWYgKGNsa2N0cmwgJiBDTEtDVFJMX0hCVVNfRElWX0ZSQUNfRU4pCisJCXJldHVybiAwOworCisJZGl2ID0gY2xrY3RybCAmIENMS0NUUkxfSEJVU19ESVZfTUFTSzsKKwlyZXR1cm4gbXgyOF9nZXRfcGNsaygpIC8gZGl2OworfQorCitzdGF0aWMgdWludDMyX3QgbXgyOF9nZXRfZW1pY2xrKHZvaWQpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKworCXVpbnQzMl90IGZyYWMsIGRpdjsKKwl1aW50MzJfdCBjbGtjdHJsLCBjbGtzZXEsIGNsa2ZyYWM7CisKKwljbGtzZXEgPSByZWFkbCgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2Nsa3NlcSk7CisJY2xrY3RybCA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZW1pKTsKKworCS8qIFhUQUwgUGF0aCAqLworCWlmIChjbGtzZXEgJiBDTEtDVFJMX0NMS1NFUV9CWVBBU1NfRU1JKSB7CisJCWRpdiA9IChjbGtjdHJsICYgQ0xLQ1RSTF9FTUlfRElWX1hUQUxfTUFTSykgPj4KKwkJCUNMS0NUUkxfRU1JX0RJVl9YVEFMX09GRlNFVDsKKwkJcmV0dXJuIFhUQUxfRlJFUV9NSFogLyBkaXY7CisJfQorCisJY2xrZnJhYyA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzApOworCisJLyogUkVGIFBhdGggKi8KKwlmcmFjID0gKGNsa2ZyYWMgJiBDTEtDVFJMX0ZSQUMwX0VNSUZSQUNfTUFTSykgPj4KKwkJQ0xLQ1RSTF9GUkFDMF9FTUlGUkFDX09GRlNFVDsKKwlkaXYgPSBjbGtjdHJsICYgQ0xLQ1RSTF9FTUlfRElWX0VNSV9NQVNLOworCXJldHVybiAoUExMX0ZSRVFfTUhaICogUExMX0ZSRVFfQ09FRiAvIGZyYWMpIC8gZGl2OworfQorCitzdGF0aWMgdWludDMyX3QgbXgyOF9nZXRfZ3BtaWNsayh2b2lkKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisKKwl1aW50MzJfdCBmcmFjLCBkaXY7CisJdWludDMyX3QgY2xrY3RybCwgY2xrc2VxLCBjbGtmcmFjOworCisJY2xrc2VxID0gcmVhZGwoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXEpOworCWNsa2N0cmwgPSByZWFkbCgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2dwbWkpOworCisJLyogWFRBTCBQYXRoICovCisJaWYgKGNsa3NlcSAmIENMS0NUUkxfQ0xLU0VRX0JZUEFTU19HUE1JKSB7CisJCWRpdiA9IGNsa2N0cmwgJiBDTEtDVFJMX0dQTUlfRElWX01BU0s7CisJCXJldHVybiBYVEFMX0ZSRVFfTUhaIC8gZGl2OworCX0KKworCWNsa2ZyYWMgPSByZWFkbCgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMxKTsKKworCS8qIFJFRiBQYXRoICovCisJZnJhYyA9IChjbGtmcmFjICYgQ0xLQ1RSTF9GUkFDMV9HUE1JRlJBQ19NQVNLKSA+PgorCQlDTEtDVFJMX0ZSQUMxX0dQTUlGUkFDX09GRlNFVDsKKwlkaXYgPSBjbGtjdHJsICYgQ0xLQ1RSTF9HUE1JX0RJVl9NQVNLOworCXJldHVybiAoUExMX0ZSRVFfTUhaICogUExMX0ZSRVFfQ09FRiAvIGZyYWMpIC8gZGl2OworfQorCisvKgorICogU2V0IElPIGNsb2NrIGZyZXF1ZW5jeSwgaW4ga0h6CisgKi8KK3ZvaWQgbXgyOF9zZXRfaW9jbGsoZW51bSBteHNfaW9jbG9jayBpbywgdWludDMyX3QgZnJlcSkKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCXVpbnQzMl90IGRpdjsKKworCWlmIChmcmVxID09IDApCisJCXJldHVybjsKKworCWlmIChpbyA+IE1YQ19JT0NMSzEpCisJCXJldHVybjsKKworCWRpdiA9IChQTExfRlJFUV9LSFogKiBQTExfRlJFUV9DT0VGKSAvIGZyZXE7CisKKwlpZiAoZGl2IDwgMTgpCisJCWRpdiA9IDE4OworCisJaWYgKGRpdiA+IDM1KQorCQlkaXYgPSAzNTsKKworCWlmIChpbyA9PSBNWENfSU9DTEswKSB7CisJCXdyaXRlbChDTEtDVFJMX0ZSQUMwX0NMS0dBVEVJTzAsCisJCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMwX3NldCk7CisJCWNscnNldGJpdHNfbGUzMigmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMwLAorCQkJCUNMS0NUUkxfRlJBQzBfSU8wRlJBQ19NQVNLLAorCQkJCWRpdiA8PCBDTEtDVFJMX0ZSQUMwX0lPMEZSQUNfT0ZGU0VUKTsKKwkJd3JpdGVsKENMS0NUUkxfRlJBQzBfQ0xLR0FURUlPMCwKKwkJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzBfY2xyKTsKKwl9IGVsc2UgeworCQl3cml0ZWwoQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFSU8xLAorCQkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMF9zZXQpOworCQljbHJzZXRiaXRzX2xlMzIoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMCwKKwkJCQlDTEtDVFJMX0ZSQUMwX0lPMUZSQUNfTUFTSywKKwkJCQlkaXYgPDwgQ0xLQ1RSTF9GUkFDMF9JTzFGUkFDX09GRlNFVCk7CisJCXdyaXRlbChDTEtDVFJMX0ZSQUMwX0NMS0dBVEVJTzEsCisJCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMwX2Nscik7CisJfQorfQorCisvKgorICogR2V0IElPIGNsb2NrLCByZXR1cm5zIElPIGNsb2NrIGluIGtIegorICovCitzdGF0aWMgdWludDMyX3QgbXgyOF9nZXRfaW9jbGsoZW51bSBteHNfaW9jbG9jayBpbykKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCXVpbnQzMl90IHRtcCwgcmV0OworCisJaWYgKGlvID4gTVhDX0lPQ0xLMSkKKwkJcmV0dXJuIDA7CisKKwl0bXAgPSByZWFkbCgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMwKTsKKworCWlmIChpbyA9PSBNWENfSU9DTEswKQorCQlyZXQgPSAodG1wICYgQ0xLQ1RSTF9GUkFDMF9JTzBGUkFDX01BU0spID4+CisJCQlDTEtDVFJMX0ZSQUMwX0lPMEZSQUNfT0ZGU0VUOworCWVsc2UKKwkJcmV0ID0gKHRtcCAmIENMS0NUUkxfRlJBQzBfSU8xRlJBQ19NQVNLKSA+PgorCQkJQ0xLQ1RSTF9GUkFDMF9JTzFGUkFDX09GRlNFVDsKKworCXJldHVybiAoUExMX0ZSRVFfS0haICogUExMX0ZSRVFfQ09FRikgLyByZXQ7Cit9CisKKy8qCisgKiBDb25maWd1cmUgU1NQIGNsb2NrIGZyZXF1ZW5jeSwgaW4ga0h6CisgKi8KK3ZvaWQgbXgyOF9zZXRfc3NwY2xrKGVudW0gbXhzX3NzcGNsb2NrIHNzcCwgdWludDMyX3QgZnJlcSwgaW50IHh0YWwpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKwl1aW50MzJfdCBjbGssIGNsa3JlZzsKKworCWlmIChzc3AgPiBNWENfU1NQQ0xLMykKKwkJcmV0dXJuOworCisJY2xrcmVnID0gKHVpbnQzMl90KSgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX3NzcDApICsKKwkJCShzc3AgKiBzaXplb2Yoc3RydWN0IG14MjhfcmVnaXN0ZXIpKTsKKworCWNscmJpdHNfbGUzMihjbGtyZWcsIENMS0NUUkxfU1NQX0NMS0dBVEUpOworCXdoaWxlIChyZWFkbChjbGtyZWcpICYgQ0xLQ1RSTF9TU1BfQ0xLR0FURSkKKwkJOworCisJaWYgKHh0YWwpCisJCWNsayA9IFhUQUxfRlJFUV9LSFo7CisJZWxzZQorCQljbGsgPSBteDI4X2dldF9pb2Nsayhzc3AgPj4gMSk7CisKKwlpZiAoZnJlcSA+IGNsaykKKwkJcmV0dXJuOworCisJLyogQ2FsY3VsYXRlIHRoZSBkaXZpZGVyIGFuZCBjYXAgaXQgaWYgbmVjZXNzYXJ5ICovCisJY2xrIC89IGZyZXE7CisJaWYgKGNsayA+IENMS0NUUkxfU1NQX0RJVl9NQVNLKQorCQljbGsgPSBDTEtDVFJMX1NTUF9ESVZfTUFTSzsKKworCWNscnNldGJpdHNfbGUzMihjbGtyZWcsIENMS0NUUkxfU1NQX0RJVl9NQVNLLCBjbGspOworCXdoaWxlIChyZWFkbChjbGtyZWcpICYgQ0xLQ1RSTF9TU1BfQlVTWSkKKwkJOworCisJaWYgKHh0YWwpCisJCXdyaXRlbChDTEtDVFJMX0NMS1NFUV9CWVBBU1NfU1NQMCA8PCBzc3AsCisJCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2Nsa3NlcV9zZXQpOworCWVsc2UKKwkJd3JpdGVsKENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AwIDw8IHNzcCwKKwkJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfY2xrc2VxX2Nscik7Cit9CisKKy8qCisgKiBSZXR1cm4gU1NQIGZyZXF1ZW5jeSwgaW4ga0h6CisgKi8KK3N0YXRpYyB1aW50MzJfdCBteDI4X2dldF9zc3BjbGsoZW51bSBteHNfc3NwY2xvY2sgc3NwKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisJdWludDMyX3QgY2xrcmVnOworCXVpbnQzMl90IGNsaywgdG1wOworCisJaWYgKHNzcCA+IE1YQ19TU1BDTEszKQorCQlyZXR1cm4gMDsKKworCXRtcCA9IHJlYWRsKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfY2xrc2VxKTsKKwlpZiAodG1wICYgKENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AwIDw8IHNzcCkpCisJCXJldHVybiBYVEFMX0ZSRVFfS0haOworCisJY2xrcmVnID0gKHVpbnQzMl90KSgmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX3NzcDApICsKKwkJCShzc3AgKiBzaXplb2Yoc3RydWN0IG14MjhfcmVnaXN0ZXIpKTsKKworCXRtcCA9IHJlYWRsKGNsa3JlZykgJiBDTEtDVFJMX1NTUF9ESVZfTUFTSzsKKworCWlmICh0bXAgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwljbGsgPSBteDI4X2dldF9pb2Nsayhzc3AgPj4gMSk7CisKKwlyZXR1cm4gY2xrIC8gdG1wOworfQorCisvKgorICogU2V0IFNTUC9NTUMgYnVzIGZyZXF1ZW5jeSwgaW4ga0h6KQorICovCit2b2lkIG14Mjhfc2V0X3NzcF9idXNjbG9jayh1bnNpZ25lZCBpbnQgYnVzLCB1aW50MzJfdCBmcmVxKQoreworCXN0cnVjdCBteDI4X3NzcF9yZWdzICpzc3BfcmVnczsKKwljb25zdCB1aW50MzJfdCBzc3BjbGsgPSBteDI4X2dldF9zc3BjbGsoYnVzKTsKKwl1aW50MzJfdCByZWc7CisJdWludDMyX3QgZGl2aWRlLCByYXRlLCB0Z3RjbGs7CisKKwlzc3BfcmVncyA9IChzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqKShNWFNfU1NQMF9CQVNFICsgKGJ1cyAqIDB4MjAwMCkpOworCisJLyoKKwkgKiBTU1AgYml0IHJhdGUgPSBTU1BDTEsgLyAoQ0xPQ0tfRElWSURFICogKDEgKyBDTE9DS19SQVRFKSksCisJICogQ0xPQ0tfRElWSURFIGhhcyB0byBiZSBhbiBldmVuIHZhbHVlIGZyb20gMiB0byAyNTQsIGFuZAorCSAqIENMT0NLX1JBVEUgY291bGQgYmUgYW55IGludGVnZXIgZnJvbSAwIHRvIDI1NS4KKwkgKi8KKwlmb3IgKGRpdmlkZSA9IDI7IGRpdmlkZSA8IDI1NDsgZGl2aWRlICs9IDIpIHsKKwkJcmF0ZSA9IHNzcGNsayAvIGZyZXEgLyBkaXZpZGU7CisJCWlmIChyYXRlIDw9IDI1NikKKwkJCWJyZWFrOworCX0KKworCXRndGNsayA9IHNzcGNsayAvIGRpdmlkZSAvIHJhdGU7CisJd2hpbGUgKHRndGNsayA+IGZyZXEpIHsKKwkJcmF0ZSsrOworCQl0Z3RjbGsgPSBzc3BjbGsgLyBkaXZpZGUgLyByYXRlOworCX0KKwlpZiAocmF0ZSA+IDI1NikKKwkJcmF0ZSA9IDI1NjsKKworCS8qIEFsd2F5cyBzZXQgdGltZW91dCB0aGUgbWF4aW11bSAqLworCXJlZyA9IFNTUF9USU1JTkdfVElNRU9VVF9NQVNLIHwKKwkJKGRpdmlkZSA8PCBTU1BfVElNSU5HX0NMT0NLX0RJVklERV9PRkZTRVQpIHwKKwkJKChyYXRlIC0gMSkgPDwgU1NQX1RJTUlOR19DTE9DS19SQVRFX09GRlNFVCk7CisJd3JpdGVsKHJlZywgJnNzcF9yZWdzLT5od19zc3BfdGltaW5nKTsKKworCWRlYnVnKCJTUEklZDogU2V0IGZyZXEgcmF0ZSB0byAlZCBLSHogKHJlcXVlc3RlZCAlZCBLSHopXG4iLAorCQlidXMsIHRndGNsaywgZnJlcSk7Cit9CisKK3VpbnQzMl90IG14Y19nZXRfY2xvY2soZW51bSBteGNfY2xvY2sgY2xrKQoreworCXN3aXRjaCAoY2xrKSB7CisJY2FzZSBNWENfQVJNX0NMSzoKKwkJcmV0dXJuIG14MjhfZ2V0X3BjbGsoKSAqIDEwMDAwMDA7CisJY2FzZSBNWENfR1BNSV9DTEs6CisJCXJldHVybiBteDI4X2dldF9ncG1pY2xrKCkgKiAxMDAwMDAwOworCWNhc2UgTVhDX0FIQl9DTEs6CisJY2FzZSBNWENfSVBHX0NMSzoKKwkJcmV0dXJuIG14MjhfZ2V0X2hjbGsoKSAqIDEwMDAwMDA7CisJY2FzZSBNWENfRU1JX0NMSzoKKwkJcmV0dXJuIG14MjhfZ2V0X2VtaWNsaygpOworCWNhc2UgTVhDX0lPMF9DTEs6CisJCXJldHVybiBteDI4X2dldF9pb2NsayhNWENfSU9DTEswKTsKKwljYXNlIE1YQ19JTzFfQ0xLOgorCQlyZXR1cm4gbXgyOF9nZXRfaW9jbGsoTVhDX0lPQ0xLMSk7CisJY2FzZSBNWENfU1NQMF9DTEs6CisJCXJldHVybiBteDI4X2dldF9zc3BjbGsoTVhDX1NTUENMSzApOworCWNhc2UgTVhDX1NTUDFfQ0xLOgorCQlyZXR1cm4gbXgyOF9nZXRfc3NwY2xrKE1YQ19TU1BDTEsxKTsKKwljYXNlIE1YQ19TU1AyX0NMSzoKKwkJcmV0dXJuIG14MjhfZ2V0X3NzcGNsayhNWENfU1NQQ0xLMik7CisJY2FzZSBNWENfU1NQM19DTEs6CisJCXJldHVybiBteDI4X2dldF9zc3BjbGsoTVhDX1NTUENMSzMpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L2lvbXV4LmMgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL214MjgvaW9tdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE0MTFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L2lvbXV4LmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA2LDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBKYW4gV2VpdHplbCBQaHl0ZWMgTWVzc3RlY2huaWsgR21iSCwKKyAqICAgICAgICAgICAgICAgICAgICAgICA8YXJtbGludXhAcGh5dGVjLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKworI2lmCWRlZmluZWQoQ09ORklHX01YMjMpCisjZGVmaW5lCURSSVZFX09GRlNFVAkweDIwMAorI2RlZmluZQlQVUxMX09GRlNFVAkweDQwMAorI2VsaWYJZGVmaW5lZChDT05GSUdfTVgyOCkKKyNkZWZpbmUJRFJJVkVfT0ZGU0VUCTB4MzAwCisjZGVmaW5lCVBVTExfT0ZGU0VUCTB4NjAwCisjZWxzZQorI2Vycm9yICJQbGVhc2Ugc2VsZWN0IENPTkZJR19NWDIzIG9yIENPTkZJR19NWDI4IgorI2VuZGlmCisKKy8qCisgKiBjb25maWd1cmVzIGEgc2luZ2xlIHBhZCBpbiB0aGUgaW9tdXhlcgorICovCitpbnQgbXhzX2lvbXV4X3NldHVwX3BhZChpb211eF9jZmdfdCBwYWQpCit7CisJdTMyIHJlZywgb2ZzLCBicCwgYm07CisJdm9pZCAqaW9tdXhfYmFzZSA9ICh2b2lkICopTVhTX1BJTkNUUkxfQkFTRTsKKwlzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqbXhzX3JlZzsKKworCS8qIG11eHNlbCAqLworCW9mcyA9IDB4MTAwOworCW9mcyArPSBQQURfQkFOSyhwYWQpICogMHgyMCArIFBBRF9QSU4ocGFkKSAvIDE2ICogMHgxMDsKKwlicCA9IFBBRF9QSU4ocGFkKSAlIDE2ICogMjsKKwlibSA9IDB4MyA8PCBicDsKKwlyZWcgPSByZWFkbChpb211eF9iYXNlICsgb2ZzKTsKKwlyZWcgJj0gfmJtOworCXJlZyB8PSBQQURfTVVYU0VMKHBhZCkgPDwgYnA7CisJd3JpdGVsKHJlZywgaW9tdXhfYmFzZSArIG9mcyk7CisKKwkvKiBkcml2ZSAqLworCW9mcyA9IERSSVZFX09GRlNFVDsKKwlvZnMgKz0gUEFEX0JBTksocGFkKSAqIDB4NDAgKyBQQURfUElOKHBhZCkgLyA4ICogMHgxMDsKKwkvKiBtQSAqLworCWlmIChQQURfTUFfVkFMSUQocGFkKSkgeworCQlicCA9IFBBRF9QSU4ocGFkKSAlIDggKiA0OworCQlibSA9IDB4MyA8PCBicDsKKwkJcmVnID0gcmVhZGwoaW9tdXhfYmFzZSArIG9mcyk7CisJCXJlZyAmPSB+Ym07CisJCXJlZyB8PSBQQURfTUEocGFkKSA8PCBicDsKKwkJd3JpdGVsKHJlZywgaW9tdXhfYmFzZSArIG9mcyk7CisJfQorCS8qIHZvbCAqLworCWlmIChQQURfVk9MX1ZBTElEKHBhZCkpIHsKKwkJYnAgPSBQQURfUElOKHBhZCkgJSA4ICogNCArIDI7CisJCW14c19yZWcgPSAoc3RydWN0IG14MjhfcmVnaXN0ZXIgKikoaW9tdXhfYmFzZSArIG9mcyk7CisJCWlmIChQQURfVk9MKHBhZCkpCisJCQl3cml0ZWwoMSA8PCBicCwgJm14c19yZWctPnJlZ19zZXQpOworCQllbHNlCisJCQl3cml0ZWwoMSA8PCBicCwgJm14c19yZWctPnJlZ19jbHIpOworCX0KKworCS8qIHB1bGwgKi8KKwlpZiAoUEFEX1BVTExfVkFMSUQocGFkKSkgeworCQlvZnMgPSBQVUxMX09GRlNFVDsKKwkJb2ZzICs9IFBBRF9CQU5LKHBhZCkgKiAweDEwOworCQlicCA9IFBBRF9QSU4ocGFkKTsKKwkJbXhzX3JlZyA9IChzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqKShpb211eF9iYXNlICsgb2ZzKTsKKwkJaWYgKFBBRF9QVUxMKHBhZCkpCisJCQl3cml0ZWwoMSA8PCBicCwgJm14c19yZWctPnJlZ19zZXQpOworCQllbHNlCisJCQl3cml0ZWwoMSA8PCBicCwgJm14c19yZWctPnJlZ19jbHIpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgbXhzX2lvbXV4X3NldHVwX211bHRpcGxlX3BhZHMoY29uc3QgaW9tdXhfY2ZnX3QgKnBhZF9saXN0LCB1bnNpZ25lZCBjb3VudCkKK3sKKwljb25zdCBpb211eF9jZmdfdCAqcCA9IHBhZF9saXN0OworCWludCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlyZXQgPSBteHNfaW9tdXhfc2V0dXBfcGFkKCpwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXArKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC9teDI4LmMgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL214MjgvbXgyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OGMwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtOTI2ZWpzL214MjgvbXgyOC5jCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBjb21tb24gY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKy8qIDEgc2Vjb25kIGRlbGF5IHNob3VsZCBiZSBwbGVudHkgb2YgdGltZSBmb3IgYmxvY2sgcmVzZXQuICovCisjZGVmaW5lCVJFU0VUX01BWF9USU1FT1VUCTEwMDAwMDAKKworI2RlZmluZQlNWDI4X0JMT0NLX1NGVFJTVAkoMSA8PCAzMSkKKyNkZWZpbmUJTVgyOF9CTE9DS19DTEtHQVRFCSgxIDw8IDMwKQorCisvKiBMb3dsZXZlbCBpbml0IGlzbid0IHVzZWQgb24gaS5NWDI4LCBzbyBqdXN0IGhhdmUgYSBkdW1teSBoZXJlICovCitpbmxpbmUgdm9pZCBsb3dsZXZlbF9pbml0KHZvaWQpIHt9CisKK3ZvaWQgcmVzZXRfY3B1KHVsb25nIGlnbm9yZWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CisKK3ZvaWQgcmVzZXRfY3B1KHVsb25nIGlnbm9yZWQpCit7CisKKwlzdHJ1Y3QgbXgyOF9ydGNfcmVncyAqcnRjX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcnRjX3JlZ3MgKilNWFNfUlRDX0JBU0U7CisKKwkvKiBXYWl0IDEgdVMgYmVmb3JlIGRvaW5nIHRoZSBhY3R1YWwgd2F0Y2hkb2cgcmVzZXQgKi8KKwl3cml0ZWwoMSwgJnJ0Y19yZWdzLT5od19ydGNfd2F0Y2hkb2cpOworCXdyaXRlbChSVENfQ1RSTF9XQVRDSERPR0VOLCAmcnRjX3JlZ3MtPmh3X3J0Y19jdHJsX3NldCk7CisKKwkvKiBFbmRsZXNzIGxvb3AsIHJlc2V0IHdpbGwgZXhpdCBmcm9tIGhlcmUgKi8KKwlmb3IgKDs7KQorCQk7Cit9CisKK2ludCBteDI4X3dhaXRfbWFza19zZXQoc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZywgdWludDMyX3QgbWFzaywgaW50IHRpbWVvdXQpCit7CisJd2hpbGUgKC0tdGltZW91dCkgeworCQlpZiAoKHJlYWRsKCZyZWctPnJlZykgJiBtYXNrKSA9PSBtYXNrKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9CisKKwlyZXR1cm4gIXRpbWVvdXQ7Cit9CisKK2ludCBteDI4X3dhaXRfbWFza19jbHIoc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZywgdWludDMyX3QgbWFzaywgaW50IHRpbWVvdXQpCit7CisJd2hpbGUgKC0tdGltZW91dCkgeworCQlpZiAoKHJlYWRsKCZyZWctPnJlZykgJiBtYXNrKSA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9CisKKwlyZXR1cm4gIXRpbWVvdXQ7Cit9CisKK2ludCBteDI4X3Jlc2V0X2Jsb2NrKHN0cnVjdCBteDI4X3JlZ2lzdGVyICpyZWcpCit7CisJLyogQ2xlYXIgU0ZUUlNUICovCisJd3JpdGVsKE1YMjhfQkxPQ0tfU0ZUUlNULCAmcmVnLT5yZWdfY2xyKTsKKworCWlmIChteDI4X3dhaXRfbWFza19jbHIocmVnLCBNWDI4X0JMT0NLX1NGVFJTVCwgUkVTRVRfTUFYX1RJTUVPVVQpKQorCQlyZXR1cm4gMTsKKworCS8qIENsZWFyIENMS0dBVEUgKi8KKwl3cml0ZWwoTVgyOF9CTE9DS19DTEtHQVRFLCAmcmVnLT5yZWdfY2xyKTsKKworCS8qIFNldCBTRlRSU1QgKi8KKwl3cml0ZWwoTVgyOF9CTE9DS19TRlRSU1QsICZyZWctPnJlZ19zZXQpOworCisJLyogV2FpdCBmb3IgQ0xLR0FURSBiZWluZyBzZXQgKi8KKwlpZiAobXgyOF93YWl0X21hc2tfc2V0KHJlZywgTVgyOF9CTE9DS19DTEtHQVRFLCBSRVNFVF9NQVhfVElNRU9VVCkpCisJCXJldHVybiAxOworCisJLyogQ2xlYXIgU0ZUUlNUICovCisJd3JpdGVsKE1YMjhfQkxPQ0tfU0ZUUlNULCAmcmVnLT5yZWdfY2xyKTsKKworCWlmIChteDI4X3dhaXRfbWFza19jbHIocmVnLCBNWDI4X0JMT0NLX1NGVFJTVCwgUkVTRVRfTUFYX1RJTUVPVVQpKQorCQlyZXR1cm4gMTsKKworCS8qIENsZWFyIENMS0dBVEUgKi8KKwl3cml0ZWwoTVgyOF9CTE9DS19DTEtHQVRFLCAmcmVnLT5yZWdfY2xyKTsKKworCWlmIChteDI4X3dhaXRfbWFza19jbHIocmVnLCBNWDI4X0JMT0NLX0NMS0dBVEUsIFJFU0VUX01BWF9USU1FT1VUKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBteDI4X2ZpeHVwX3Z0KHVpbnQzMl90IHN0YXJ0X2FkZHIpCit7CisJdWludDMyX3QgKnZ0ID0gKHVpbnQzMl90ICopMHgyMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXZ0W2ldID0gc3RhcnRfYWRkciArICg0ICogaSk7Cit9CisKKyNpZmRlZglDT05GSUdfQVJDSF9NSVNDX0lOSVQKK2ludCBhcmNoX21pc2NfaW5pdCh2b2lkKQoreworCW14MjhfZml4dXBfdnQoZ2QtPnJlbG9jYWRkcik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19BUkNIX0NQVV9JTklUCitpbnQgYXJjaF9jcHVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisJZXh0ZXJuIHVpbnQzMl90IF9zdGFydDsKKworCW14MjhfZml4dXBfdnQoKHVpbnQzMl90KSZfc3RhcnQpOworCisJLyoKKwkgKiBFbmFibGUgTkFORCBjbG9jaworCSAqLworCS8qIENsZWFyIGJ5cGFzcyBiaXQgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0dQTUksCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfY2xrc2VxX3NldCk7CisKKwkvKiBTZXQgR1BNSSBjbG9jayB0byByZWZfZ3BtaSAvIDEyICovCisJY2xyc2V0Yml0c19sZTMyKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZ3BtaSwKKwkJQ0xLQ1RSTF9HUE1JX0NMS0dBVEUgfCBDTEtDVFJMX0dQTUlfRElWX01BU0ssIDEpOworCisJdWRlbGF5KDEwMDApOworCisJLyoKKwkgKiBDb25maWd1cmUgR1BJTyB1bml0CisJICovCisJbXhzX2dwaW9faW5pdCgpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0RJU1BMQVlfQ1BVSU5GTykKK2ludCBwcmludF9jcHVpbmZvKHZvaWQpCit7CisJcHJpbnRmKCJGcmVlc2NhbGUgaS5NWDI4IGZhbWlseVxuIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IGRvX214Mjhfc2hvd2Nsb2NrcyhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSkKK3sKKwlwcmludGYoIkNQVTogICAlM2QgTUh6XG4iLCBteGNfZ2V0X2Nsb2NrKE1YQ19BUk1fQ0xLKSAvIDEwMDAwMDApOworCXByaW50ZigiQlVTOiAgICUzZCBNSHpcbiIsIG14Y19nZXRfY2xvY2soTVhDX0FIQl9DTEspIC8gMTAwMDAwMCk7CisJcHJpbnRmKCJFTUk6ICAgJTNkIE1IelxuIiwgbXhjX2dldF9jbG9jayhNWENfRU1JX0NMSykpOworCXByaW50ZigiR1BNSTogICUzZCBNSHpcbiIsIG14Y19nZXRfY2xvY2soTVhDX0dQTUlfQ0xLKSAvIDEwMDAwMDApOworCXJldHVybiAwOworfQorCisvKgorICogSW5pdGlhbGl6ZXMgb24tY2hpcCBldGhlcm5ldCBjb250cm9sbGVycy4KKyAqLworI2lmZGVmCUNPTkZJR19DTURfTkVUCitpbnQgY3B1X2V0aF9pbml0KGJkX3QgKmJpcykKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCisJLyogVHVybiBvbiBFTkVUIGNsb2NrcyAqLworCWNscmJpdHNfbGUzMigmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2VuZXQsCisJCUNMS0NUUkxfRU5FVF9TTEVFUCB8IENMS0NUUkxfRU5FVF9ESVNBQkxFKTsKKworCS8qIFNldCB1cCBFTkVUIFBMTCBmb3IgNTAgTUh6ICovCisJLyogUG93ZXIgb24gRU5FVCBQTEwgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9QTEwyQ1RSTDBfUE9XRVIsCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfcGxsMmN0cmwwX3NldCk7CisKKwl1ZGVsYXkoMTApOworCisJLyogR2F0ZSBvbiBFTkVUIFBMTCAqLworCXdyaXRlbChDTEtDVFJMX1BMTDJDVFJMMF9DTEtHQVRFLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX3BsbDJjdHJsMF9jbHIpOworCisJLyogRW5hYmxlIHBhZCBvdXRwdXQgKi8KKwlzZXRiaXRzX2xlMzIoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9lbmV0LCBDTEtDVFJMX0VORVRfQ0xLX09VVF9FTik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitVX0JPT1RfQ01EKAorCWNsb2NrcywJQ09ORklHX1NZU19NQVhBUkdTLCAxLCBkb19teDI4X3Nob3djbG9ja3MsCisJImRpc3BsYXkgY2xvY2tzIiwKKwkiIgorKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC90aW1lci5jIGIvYXJjaC9hcm0vY3B1L2FybTkyNmVqcy9teDI4L3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjOTA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC90aW1lci5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCB0aW1lciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOS0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisKKy8qIE1heGltdW0gZml4ZWQgY291bnQgKi8KKyNkZWZpbmUgVElNRVJfTE9BRF9WQUwJMHhmZmZmZmZmZgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2RlZmluZSB0aW1lc3RhbXAgKGdkLT50YmwpCisjZGVmaW5lIGxhc3RkZWMgKGdkLT5sYXN0aW5jKQorCisvKgorICogVGhpcyBkcml2ZXIgdXNlcyAxa0h6IGNsb2NrIHNvdXJjZS4KKyAqLworI2RlZmluZQlNWDI4X0lOQ1JFTUVOVEVSX0haCQkxMDAwCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aWNrX3RvX3RpbWUodW5zaWduZWQgbG9uZyB0aWNrKQoreworCXJldHVybiB0aWNrIC8gKE1YMjhfSU5DUkVNRU5URVJfSFogLyBDT05GSUdfU1lTX0haKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRpbWVfdG9fdGljayh1bnNpZ25lZCBsb25nIHRpbWUpCit7CisJcmV0dXJuIHRpbWUgKiAoTVgyOF9JTkNSRU1FTlRFUl9IWiAvIENPTkZJR19TWVNfSFopOworfQorCisvKiBDYWxjdWxhdGUgaG93IG1hbnkgdGlja3MgaGFwcGVuIGluICJ1cyIgbWljcm9zZWNvbmRzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXNfdG9fdGljayh1bnNpZ25lZCBsb25nIHVzKQoreworCXJldHVybiAodXMgKiBNWDI4X0lOQ1JFTUVOVEVSX0haKSAvIDEwMDAwMDA7Cit9CisKK2ludCB0aW1lcl9pbml0KHZvaWQpCit7CisJc3RydWN0IG14MjhfdGltcm90X3JlZ3MgKnRpbXJvdF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3RpbXJvdF9yZWdzICopTVhTX1RJTVJPVF9CQVNFOworCisJLyogUmVzZXQgVGltZXJzIGFuZCBSb3RhcnkgRW5jb2RlciBtb2R1bGUgKi8KKwlteDI4X3Jlc2V0X2Jsb2NrKCZ0aW1yb3RfcmVncy0+aHdfdGltcm90X3JvdGN0cmxfcmVnKTsKKworCS8qIFNldCBmaXhlZF9jb3VudCB0byAwICovCisJd3JpdGVsKDAsICZ0aW1yb3RfcmVncy0+aHdfdGltcm90X2ZpeGVkX2NvdW50MCk7CisKKwkvKiBTZXQgVVBEQVRFIGJpdCBhbmQgMUtoeiBmcmVxdWVuY3kgKi8KKwl3cml0ZWwoVElNUk9UX1RJTUNUUkxuX1VQREFURSB8IFRJTVJPVF9USU1DVFJMbl9SRUxPQUQgfAorCQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUXzFLSFpfWFRBTCwKKwkJJnRpbXJvdF9yZWdzLT5od190aW1yb3RfdGltY3RybDApOworCisJLyogU2V0IGZpeGVkX2NvdW50IHRvIG1heGltYWwgdmFsdWUgKi8KKwl3cml0ZWwoVElNRVJfTE9BRF9WQUwsICZ0aW1yb3RfcmVncy0+aHdfdGltcm90X2ZpeGVkX2NvdW50MCk7CisKKwlyZXR1cm4gMDsKK30KKwordWxvbmcgZ2V0X3RpbWVyKHVsb25nIGJhc2UpCit7CisJc3RydWN0IG14MjhfdGltcm90X3JlZ3MgKnRpbXJvdF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3RpbXJvdF9yZWdzICopTVhTX1RJTVJPVF9CQVNFOworCisJLyogQ3VycmVudCB0aWNrIHZhbHVlICovCisJdWludDMyX3Qgbm93ID0gcmVhZGwoJnRpbXJvdF9yZWdzLT5od190aW1yb3RfcnVubmluZ19jb3VudDApOworCisJaWYgKGxhc3RkZWMgPj0gbm93KSB7CisJCS8qCisJCSAqIG5vcm1hbCBtb2RlIChub24gcm9sbCkKKwkJICogbW92ZSBzdGFtcCBmb3J3YXJkIHdpdGggYWJzb2x1dCBkaWZmIHRpY2tzCisJCSAqLworCQl0aW1lc3RhbXAgKz0gKGxhc3RkZWMgLSBub3cpOworCX0gZWxzZSB7CisJCS8qIHdlIGhhdmUgcm9sbG92ZXIgb2YgZGVjcmVtZW50ZXIgKi8KKwkJdGltZXN0YW1wICs9IChUSU1FUl9MT0FEX1ZBTCAtIG5vdykgKyBsYXN0ZGVjOworCisJfQorCWxhc3RkZWMgPSBub3c7CisKKwlyZXR1cm4gdGlja190b190aW1lKHRpbWVzdGFtcCkgLSBiYXNlOworfQorCisvKiBXZSB1c2UgdGhlIEhXX0RJR0NUTF9NSUNST1NFQ09ORFMgcmVnaXN0ZXIgZm9yIHN1Yi1taWxsaXNlY29uZCB0aW1lci4gKi8KKyNkZWZpbmUJTVgyOF9IV19ESUdDVExfTUlDUk9TRUNPTkRTCTB4ODAwMWMwYzAKKwordm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisJdWludDMyX3Qgb2xkLCBuZXcsIGluY3I7CisJdWludDMyX3QgY291bnRlciA9IDA7CisKKwlvbGQgPSByZWFkbChNWDI4X0hXX0RJR0NUTF9NSUNST1NFQ09ORFMpOworCisJd2hpbGUgKGNvdW50ZXIgPCB1c2VjKSB7CisJCW5ldyA9IHJlYWRsKE1YMjhfSFdfRElHQ1RMX01JQ1JPU0VDT05EUyk7CisKKwkJLyogQ2hlY2sgaWYgdGhlIHRpbWVyIHdyYXBwZWQuICovCisJCWlmIChuZXcgPCBvbGQpIHsKKwkJCWluY3IgPSAweGZmZmZmZmZmIC0gb2xkOworCQkJaW5jciArPSBuZXc7CisJCX0gZWxzZSB7CisJCQlpbmNyID0gbmV3IC0gb2xkOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2UgYXJlIGNsb3NlIHRvIHRoZSBtYXhpbXVtIHRpbWUgYW5kIHRoZSBjb3VudGVyCisJCSAqIHdvdWxkIHdyYXAgaWYgaW5jcmVtZW50ZWQuIElmIHRoYXQncyB0aGUgY2FzZSwgYnJlYWsgb3V0CisJCSAqIGZyb20gdGhlIGxvb3AgYXMgdGhlIHJlcXVlc3RlZCBkZWxheSB0aW1lIHBhc3NlZC4KKwkJICovCisJCWlmIChjb3VudGVyICsgaW5jciA8IGNvdW50ZXIpCisJCQlicmVhazsKKworCQljb3VudGVyICs9IGluY3I7CisJCW9sZCA9IG5ldzsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vTWFrZWZpbGUgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vTWFrZWZpbGUKaW5kZXggMWRlZTgxZi4uYTY4NDYxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9NYWtlZmlsZQpAQCAtMzMsNiArMzMsMTMgQEAKIENPQkpTCSs9IGdwaW8ubwogZW5kaWYKIAoraWZuZXEgKCQoQ09ORklHX09NQVA0NFhYKSQoQ09ORklHX09NQVA1NFhYKSwpCitDT0JKUwkrPSBod2luaXQtY29tbW9uLm8KK0NPQkpTCSs9IGNsb2Nrcy1jb21tb24ubworQ09CSlMJKz0gZW1pZi1jb21tb24ubworU09CSlMJKz0gbG93bGV2ZWxfaW5pdC5vCitlbmRpZgorCiBpZmRlZiBDT05GSUdfU1BMX0JVSUxECiBDT0JKUwkrPSBzcGwubwogaWZkZWYgQ09ORklHX1NQTF9OQU5EX1NVUFBPUlQKQEAgLTQzLDYgKzUwLDEyIEBACiBlbmRpZgogZW5kaWYKIAoraWZuZGVmIENPTkZJR19TUExfQlVJTEQKK2lmbmVxICgkKENPTkZJR19PTUFQNDRYWCkkKENPTkZJR19PTUFQNTRYWCksKQorQ09CSlMJKz0gbWVtLWNvbW1vbi5vCitlbmRpZgorZW5kaWYKKwogU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9jbG9ja3MtY29tbW9uLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vY2xvY2tzLWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NGExMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vY2xvY2tzLWNvbW1vbi5jCkBAIC0wLDAgKzEsNjA5IEBACisvKgorICoKKyAqIENsb2NrIGluaXRpYWxpemF0aW9uIGZvciBPTUFQNAorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIEFuZWVzaCBWIDxhbmVlc2hAdGkuY29tPgorICoKKyAqIEJhc2VkIG9uIHByZXZpb3VzIHdvcmsgYnk6CisgKglTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgorICoJUmFqZW5kcmEgTmF5YWsgPHJuYXlha0B0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9vbWFwX2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3V0aWxzLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfZ3Bpby5oPgorCisjaWZuZGVmIENPTkZJR19TUExfQlVJTEQKKy8qCisgKiBwcmludGluZyB0byBjb25zb2xlIGRvZXNuJ3Qgd29yayB1bmxlc3MKKyAqIHRoaXMgY29kZSBpcyBleGVjdXRlZCBmcm9tIFNQTAorICovCisjZGVmaW5lIHByaW50ZihmbXQsIGFyZ3MuLi4pCisjZGVmaW5lIHB1dHMocykKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHUzMiBfX2dldF9zeXNfY2xrX2luZGV4KHZvaWQpCit7CisJdTMyIGluZDsKKwkvKgorCSAqIEZvciBFUzEgdGhlIFJPTSBjb2RlIGNhbGlicmF0aW9uIG9mIHN5cyBjbG9jayBpcyBub3QgcmVsaWFibGUKKwkgKiBkdWUgdG8gaHcgaXNzdWUuIFNvLCB1c2UgaGFyZC1jb2RlZCB2YWx1ZS4gSWYgdGhpcyB2YWx1ZSBpcyBub3QKKwkgKiBjb3JyZWN0IGZvciBhbnkgYm9hcmQgb3Zlci1yaWRlIHRoaXMgZnVuY3Rpb24gaW4gYm9hcmQgZmlsZQorCSAqIEZyb20gRVMyLjAgb253YXJkcyB5b3Ugd2lsbCBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tCisJICogQ01fU1lTX0NMS1NFTAorCSAqLworCWlmIChvbWFwX3JldmlzaW9uKCkgPT0gT01BUDQ0MzBfRVMxXzApCisJCWluZCA9IE9NQVBfU1lTX0NMS19JTkRfMzhfNF9NSFo7CisJZWxzZSB7CisJCS8qIFNZU19DTEtTRUwgLSAxIHRvIG1hdGNoIHRoZSBkcGxsIHBhcmFtIGFycmF5IGluZGljZXMgKi8KKwkJaW5kID0gKHJlYWRsKCZwcmNtLT5jbV9zeXNfY2xrc2VsKSAmCisJCQlDTV9TWVNfQ0xLU0VMX1NZU19DTEtTRUxfTUFTSykgLSAxOworCX0KKwlyZXR1cm4gaW5kOworfQorCit1MzIgZ2V0X3N5c19jbGtfaW5kZXgodm9pZCkKKwlfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoIl9fZ2V0X3N5c19jbGtfaW5kZXgiKSkpOworCit1MzIgZ2V0X3N5c19jbGtfZnJlcSh2b2lkKQoreworCXU4IGluZGV4ID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlyZXR1cm4gc3lzX2Nsa19hcnJheVtpbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19ieXBhc3NfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCit7CisJc3RydWN0IGRwbGxfcmVncyAqZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOworCisJY2xyc2V0Yml0c19sZTMyKCZkcGxsX3JlZ3MtPmNtX2Nsa21vZGVfZHBsbCwKKwkJCUNNX0NMS01PREVfRFBMTF9EUExMX0VOX01BU0ssCisJCQlEUExMX0VOX0ZBU1RfUkVMT0NLX0JZUEFTUyA8PAorCQkJQ01fQ0xLTU9ERV9EUExMX0VOX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2J5cGFzcyh1MzIgKmNvbnN0IGJhc2UpCit7CisJc3RydWN0IGRwbGxfcmVncyAqY29uc3QgZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOworCisJaWYgKCF3YWl0X29uX3ZhbHVlKFNUX0RQTExfQ0xLX01BU0ssIDAsICZkcGxsX3JlZ3MtPmNtX2lkbGVzdF9kcGxsLAorCQkJCUxERUxBWSkpIHsKKwkJcHJpbnRmKCJCeXBhc3NpbmcgRFBMTCBmYWlsZWQgJXBcbiIsIGJhc2UpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRvX2xvY2tfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCit7CisJc3RydWN0IGRwbGxfcmVncyAqY29uc3QgZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOworCisJY2xyc2V0Yml0c19sZTMyKCZkcGxsX3JlZ3MtPmNtX2Nsa21vZGVfZHBsbCwKKwkJICAgICAgQ01fQ0xLTU9ERV9EUExMX0RQTExfRU5fTUFTSywKKwkJICAgICAgRFBMTF9FTl9MT0NLIDw8IENNX0NMS01PREVfRFBMTF9FTl9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9sb2NrKHUzMiAqY29uc3QgYmFzZSkKK3sKKwlzdHJ1Y3QgZHBsbF9yZWdzICpjb25zdCBkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7CisKKwlpZiAoIXdhaXRfb25fdmFsdWUoU1RfRFBMTF9DTEtfTUFTSywgU1RfRFBMTF9DTEtfTUFTSywKKwkJJmRwbGxfcmVncy0+Y21faWRsZXN0X2RwbGwsIExERUxBWSkpIHsKKwkJcHJpbnRmKCJEUExMIGxvY2tpbmcgZmFpbGVkIGZvciAlcFxuIiwgYmFzZSk7CisJCWhhbmcoKTsKKwl9Cit9CisKK2lubGluZSB1MzIgY2hlY2tfZm9yX2xvY2sodTMyICpjb25zdCBiYXNlKQoreworCXN0cnVjdCBkcGxsX3JlZ3MgKmNvbnN0IGRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKKwl1MzIgbG9jayA9IHJlYWRsKCZkcGxsX3JlZ3MtPmNtX2lkbGVzdF9kcGxsKSAmIFNUX0RQTExfQ0xLX01BU0s7CisKKwlyZXR1cm4gbG9jazsKK30KKworc3RhdGljIHZvaWQgZG9fc2V0dXBfZHBsbCh1MzIgKmNvbnN0IGJhc2UsIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zLAorCQkJCXU4IGxvY2ssIGNoYXIgKmRwbGwpCit7CisJdTMyIHRlbXAsIE0sIE47CisJc3RydWN0IGRwbGxfcmVncyAqY29uc3QgZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOworCisJdGVtcCA9IHJlYWRsKCZkcGxsX3JlZ3MtPmNtX2Nsa3NlbF9kcGxsKTsKKworCWlmIChjaGVja19mb3JfbG9jayhiYXNlKSkgeworCQkvKgorCQkgKiBUaGUgRHBsbCBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBieSByb20gY29kZSB1c2luZyBDSC4KKwkJICogQ2hlY2sgaWYgTSxOIGFyZSBtYXRjaGluZyB3aXRoIElkZWFsIG5vbWluYWwgb3BwIHZhbHVlcy4KKwkJICogSWYgbWF0Y2hlcywgc2tpcCB0aGUgcmVzdCBvdGhlcndpc2UgcmVsb2NrLgorCQkgKi8KKwkJTSA9ICh0ZW1wICYgQ01fQ0xLU0VMX0RQTExfTV9NQVNLKSA+PiBDTV9DTEtTRUxfRFBMTF9NX1NISUZUOworCQlOID0gKHRlbXAgJiBDTV9DTEtTRUxfRFBMTF9OX01BU0spID4+IENNX0NMS1NFTF9EUExMX05fU0hJRlQ7CisJCWlmICgoTSAhPSAocGFyYW1zLT5tKSkgfHwgKE4gIT0gKHBhcmFtcy0+bikpKSB7CisJCQlkZWJ1ZygiXG4gJXMgRHBsbCBsb2NrZWQsIGJ1dCBub3QgZm9yIGlkZWFsIE0gPSAlZCwiCisJCQkJIk4gPSAlZCB2YWx1ZXMsIGN1cnJlbnQgdmFsdWVzIGFyZSBNID0gJWQsIgorCQkJCSJOPSAlZCIgLCBkcGxsLCBwYXJhbXMtPm0sIHBhcmFtcy0+biwKKwkJCQlNLCBOKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERwbGwgbG9ja2VkIHdpdGggaWRlYWwgdmFsdWVzIGZvciBub21pbmFsIG9wcHMuICovCisJCQlkZWJ1ZygiXG4gJXMgRHBsbCBhbHJlYWR5IGxvY2tlZCB3aXRoIGlkZWFsIgorCQkJCQkJIm5vbWluYWwgb3BwIHZhbHVlcyIsIGRwbGwpOworCQkJZ290byBzZXR1cF9wb3N0X2RpdmlkZXJzOworCQl9CisJfQorCisJYnlwYXNzX2RwbGwoYmFzZSk7CisKKwkvKiBTZXQgTSAmIE4gKi8KKwl0ZW1wICY9IH5DTV9DTEtTRUxfRFBMTF9NX01BU0s7CisJdGVtcCB8PSAocGFyYW1zLT5tIDw8IENNX0NMS1NFTF9EUExMX01fU0hJRlQpICYgQ01fQ0xLU0VMX0RQTExfTV9NQVNLOworCisJdGVtcCAmPSB+Q01fQ0xLU0VMX0RQTExfTl9NQVNLOworCXRlbXAgfD0gKHBhcmFtcy0+biA8PCBDTV9DTEtTRUxfRFBMTF9OX1NISUZUKSAmIENNX0NMS1NFTF9EUExMX05fTUFTSzsKKworCXdyaXRlbCh0ZW1wLCAmZHBsbF9yZWdzLT5jbV9jbGtzZWxfZHBsbCk7CisKKwkvKiBMb2NrICovCisJaWYgKGxvY2spCisJCWRvX2xvY2tfZHBsbChiYXNlKTsKKworc2V0dXBfcG9zdF9kaXZpZGVyczoKKwlzZXR1cF9wb3N0X2RpdmlkZXJzKGJhc2UsIHBhcmFtcyk7CisKKwkvKiBXYWl0IHRpbGwgdGhlIERQTEwgbG9ja3MgKi8KKwlpZiAobG9jaykKKwkJd2FpdF9mb3JfbG9jayhiYXNlKTsKK30KKwordTMyIG9tYXBfZGRyX2Nsayh2b2lkKQoreworCXUzMiBkZHJfY2xrLCBzeXNfY2xrX2toeiwgb21hcF9yZXYsIGRpdmlkZXI7CisJY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpjb3JlX2RwbGxfcGFyYW1zOworCisJb21hcF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7CisJc3lzX2Nsa19raHogPSBnZXRfc3lzX2Nsa19mcmVxKCkgLyAxMDAwOworCisJY29yZV9kcGxsX3BhcmFtcyA9IGdldF9jb3JlX2RwbGxfcGFyYW1zKCk7CisKKwlkZWJ1Zygic3lzX2NsayAlZFxuICIsIHN5c19jbGtfa2h6ICogMTAwMCk7CisKKwkvKiBGaW5kIENvcmUgRFBMTCBsb2NrZWQgZnJlcXVlbmN5IGZpcnN0ICovCisJZGRyX2NsayA9IHN5c19jbGtfa2h6ICogMiAqIGNvcmVfZHBsbF9wYXJhbXMtPm0gLworCQkJKGNvcmVfZHBsbF9wYXJhbXMtPm4gKyAxKTsKKworCWlmIChvbWFwX3JldiA8IE9NQVA1NDMwX0VTMV8wKSB7CisJCS8qCisJCSAqIEREUiBmcmVxdWVuY3kgaXMgUEhZX1JPT1RfQ0xLLzIKKwkJICogUEhZX1JPT1RfQ0xLID0gRmRwbGwvMi9NMgorCQkgKi8KKwkJZGl2aWRlciA9IDQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRERSIGZyZXF1ZW5jeSBpcyBQSFlfUk9PVF9DTEsKKwkJICogUEhZX1JPT1RfQ0xLID0gRmRwbGwvMi9NMgorCQkgKi8KKwkJZGl2aWRlciA9IDI7CisJfQorCisJZGRyX2NsayA9IGRkcl9jbGsgLyBkaXZpZGVyIC8gY29yZV9kcGxsX3BhcmFtcy0+bTI7CisJZGRyX2NsayAqPSAxMDAwOwkvKiBjb252ZXJ0IHRvIEh6ICovCisJZGVidWcoImRkcl9jbGsgJWRcbiAiLCBkZHJfY2xrKTsKKworCXJldHVybiBkZHJfY2xrOworfQorCisvKgorICogTG9jayBNUFUgZHBsbAorICoKKyAqIFJlc3VsdGluZyBNUFUgZnJlcXVlbmNpZXM6CisgKiA0NDMwIEVTMS4wCTogNjAwIE1IegorICogNDQzMCBFUzIueAk6IDc5MiBNSHogKE9QUCBUdXJibykKKyAqIDQ0NjAJCTogOTIwIE1IeiAoT1BQIFR1cmJvKSAtIERDQyBkaXNhYmxlZAorICovCit2b2lkIGNvbmZpZ3VyZV9tcHVfZHBsbCh2b2lkKQoreworCWNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zOworCXN0cnVjdCBkcGxsX3JlZ3MgKm1wdV9kcGxsX3JlZ3M7CisJdTMyIG9tYXBfcmV2OworCW9tYXBfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCisJLyoKKwkgKiBEQ0MgYW5kIGNsb2NrIGRpdmlkZXIgc2V0dGluZ3MgZm9yIDQ0NjAuCisJICogRENDIGlzIHJlcXVpcmVkLCBpZiBtb3JlIHRoYW4gYSBjZXJ0YWluIGZyZXF1ZW5jeSBpcyByZXF1aXJlZC4KKwkgKiBGb3IsIDQ0NjAgPiAxR0haLgorCSAqICAgICA1NDMwID4gMS40R0haLgorCSAqLworCWlmICgob21hcF9yZXYgPj0gT01BUDQ0NjBfRVMxXzApICYmIChvbWFwX3JldiA8IE9NQVA1NDMwX0VTMV8wKSkgeworCQltcHVfZHBsbF9yZWdzID0KKwkJCShzdHJ1Y3QgZHBsbF9yZWdzICopJnByY20tPmNtX2Nsa21vZGVfZHBsbF9tcHU7CisJCWJ5cGFzc19kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfbXB1KTsKKwkJY2xyYml0c19sZTMyKCZwcmNtLT5jbV9tcHVfbXB1X2Nsa2N0cmwsCisJCQlNUFVfQ0xLQ1RSTF9DTEtTRUxfRU1JRl9ESVZfTU9ERV9NQVNLKTsKKwkJc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9tcHVfbXB1X2Nsa2N0cmwsCisJCQlNUFVfQ0xLQ1RSTF9DTEtTRUxfQUJFX0RJVl9NT0RFX01BU0spOworCQljbHJiaXRzX2xlMzIoJm1wdV9kcGxsX3JlZ3MtPmNtX2Nsa3NlbF9kcGxsLAorCQkJQ01fQ0xLU0VMX0RDQ19FTl9NQVNLKTsKKwl9CisKKwlwYXJhbXMgPSBnZXRfbXB1X2RwbGxfcGFyYW1zKCk7CisKKwlkb19zZXR1cF9kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfbXB1LCBwYXJhbXMsIERQTExfTE9DSywgIm1wdSIpOworCWRlYnVnKCJNUFUgRFBMTCBsb2NrZWRcbiIpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9kcGxscyh2b2lkKQoreworCXUzMiBzeXNjbGtfaW5kLCB0ZW1wOworCWNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zOworCWRlYnVnKCJzZXR1cF9kcGxsc1xuIik7CisKKwlzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKworCS8qIENPUkUgZHBsbCAqLworCXBhcmFtcyA9IGdldF9jb3JlX2RwbGxfcGFyYW1zKCk7CS8qIGRlZmF1bHQgLSBzYWZlc3QgKi8KKwkvKgorCSAqIERvIG5vdCBsb2NrIHRoZSBjb3JlIERQTEwgbm93LiBKdXN0IHNldCBpdCB1cC4KKwkgKiBDb3JlIERQTEwgd2lsbCBiZSBsb2NrZWQgYWZ0ZXIgc2V0dGluZyB1cCBFTUlGCisJICogdXNpbmcgdGhlIEZSRVFfVVBEQVRFIG1ldGhvZChmcmVxX3VwZGF0ZV9jb3JlKCkpCisJICovCisJZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2NvcmUsIHBhcmFtcywgRFBMTF9OT19MT0NLLAorCQkJCQkJCQkiY29yZSIpOworCS8qIFNldCB0aGUgcmF0aW9zIGZvciBDT1JFX0NMSywgTDNfQ0xLLCBMNF9DTEsgKi8KKwl0ZW1wID0gKENMS1NFTF9DT1JFX1gyX0RJVl8xIDw8IENMS1NFTF9DT1JFX1NISUZUKSB8CisJICAgIChDTEtTRUxfTDNfQ09SRV9ESVZfMiA8PCBDTEtTRUxfTDNfU0hJRlQpIHwKKwkgICAgKENMS1NFTF9MNF9MM19ESVZfMiA8PCBDTEtTRUxfTDRfU0hJRlQpOworCXdyaXRlbCh0ZW1wLCAmcHJjbS0+Y21fY2xrc2VsX2NvcmUpOworCWRlYnVnKCJDb3JlIERQTEwgY29uZmlndXJlZFxuIik7CisKKwkvKiBsb2NrIFBFUiBkcGxsICovCisJcGFyYW1zID0gZ2V0X3Blcl9kcGxsX3BhcmFtcygpOworCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9wZXIsCisJCQlwYXJhbXMsIERQTExfTE9DSywgInBlciIpOworCWRlYnVnKCJQRVIgRFBMTCBsb2NrZWRcbiIpOworCisJLyogTVBVIGRwbGwgKi8KKwljb25maWd1cmVfbXB1X2RwbGwoKTsKK30KKworI2lmZGVmIENPTkZJR19TWVNfQ0xPQ0tTX0VOQUJMRV9BTEwKK3N0YXRpYyB2b2lkIHNldHVwX25vbl9lc3NlbnRpYWxfZHBsbHModm9pZCkKK3sKKwl1MzIgc3lzX2Nsa19raHosIGFiZV9yZWZfY2xrOworCXUzMiBzeXNjbGtfaW5kLCBzZF9kaXYsIG51bSwgZGVuOworCWNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zOworCisJc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisJc3lzX2Nsa19raHogPSBnZXRfc3lzX2Nsa19mcmVxKCkgLyAxMDAwOworCisJLyogSVZBICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9ieXBjbGtfZHBsbF9pdmEsCisJCUNNX0JZUENMS19EUExMX0lWQV9DTEtTRUxfTUFTSywgRFBMTF9JVkFfQ0xLU0VMX0NPUkVfWDJfRElWXzIpOworCisJcGFyYW1zID0gZ2V0X2l2YV9kcGxsX3BhcmFtcygpOworCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9pdmEsIHBhcmFtcywgRFBMTF9MT0NLLCAiaXZhIik7CisKKwkvKgorCSAqIFVTQjoKKwkgKiBVU0IgZHBsbCBpcyBKLXR5cGUuIE5lZWQgdG8gc2V0IERQTExfU0RfRElWIGZvciBqaXR0ZXIgY29ycmVjdGlvbgorCSAqIERQTExfU0RfRElWID0gQ0VJTElORyAoW0RQTExfTVVMVC8oRFBMTF9ESVYrMSldKiBDTEtJTlAgLyAyNTApCisJICogICAgICAtIHdoZXJlIENMS0lOUCBpcyBzeXNfY2xrIGluIE1IegorCSAqIFVzZSBDTEtJTlAgaW4gS0h6IGFuZCBhZGp1c3QgdGhlIGRlbm9taW5hdG9yIGFjY29yZGluZ2x5IHNvCisJICogdGhhdCB3ZSBoYXZlIGVub3VnaCBhY2N1cmFjeSBhbmQgYXQgdGhlIHNhbWUgdGltZSBubyBvdmVyZmxvdworCSAqLworCXBhcmFtcyA9IGdldF91c2JfZHBsbF9wYXJhbXMoKTsKKwludW0gPSBwYXJhbXMtPm0gKiBzeXNfY2xrX2toejsKKwlkZW4gPSAocGFyYW1zLT5uICsgMSkgKiAyNTAgKiAxMDAwOworCW51bSArPSBkZW4gLSAxOworCXNkX2RpdiA9IG51bSAvIGRlbjsKKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2Nsa3NlbF9kcGxsX3VzYiwKKwkJCUNNX0NMS1NFTF9EUExMX0RQTExfU0RfRElWX01BU0ssCisJCQlzZF9kaXYgPDwgQ01fQ0xLU0VMX0RQTExfRFBMTF9TRF9ESVZfU0hJRlQpOworCisJLyogTm93IHNldHVwIHRoZSBkcGxsIHdpdGggdGhlIHJlZ3VsYXIgZnVuY3Rpb24gKi8KKwlkb19zZXR1cF9kcGxsKCZwcmNtLT5jbV9jbGttb2RlX2RwbGxfdXNiLCBwYXJhbXMsIERQTExfTE9DSywgInVzYiIpOworCisJLyogQ29uZmlndXJlIEFCRSBkcGxsICovCisJcGFyYW1zID0gZ2V0X2FiZV9kcGxsX3BhcmFtcygpOworI2lmZGVmIENPTkZJR19TWVNfT01BUF9BQkVfU1lTQ0sKKwlhYmVfcmVmX2NsayA9IENNX0FCRV9QTExfUkVGX0NMS1NFTF9DTEtTRUxfU1lTQ0xLOworI2Vsc2UKKwlhYmVfcmVmX2NsayA9IENNX0FCRV9QTExfUkVGX0NMS1NFTF9DTEtTRUxfMzJLQ0xLOworCS8qCisJICogV2UgbmVlZCB0byBlbmFibGUgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWNoaWV2ZQorCSAqIDE5Ni42MDhNSHogZnJvbSAzMjc2OCBIegorCSAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2FiZSwKKwkJCUNNX0NMS01PREVfRFBMTF9EUklGVEdVQVJEX0VOX01BU0t8CisJCQlDTV9DTEtNT0RFX0RQTExfUkVMT0NLX1JBTVBfRU5fTUFTS3wKKwkJCUNNX0NMS01PREVfRFBMTF9MUE1PREVfRU5fTUFTS3wKKwkJCUNNX0NMS01PREVfRFBMTF9SRUdNNFhFTl9NQVNLKTsKKwkvKiBTcGVuZCA0IFJFRkNMSyBjeWNsZXMgYXQgZWFjaCBzdGFnZSAqLworCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2FiZSwKKwkJCUNNX0NMS01PREVfRFBMTF9SQU1QX1JBVEVfTUFTSywKKwkJCTEgPDwgQ01fQ0xLTU9ERV9EUExMX1JBTVBfUkFURV9TSElGVCk7CisjZW5kaWYKKworCS8qIFNlbGVjdCB0aGUgcmlnaHQgcmVmZXJlbmNlIGNsayAqLworCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fYWJlX3BsbF9yZWZfY2xrc2VsLAorCQkJQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9NQVNLLAorCQkJYWJlX3JlZl9jbGsgPDwgQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9TSElGVCk7CisJLyogTG9jayB0aGUgZHBsbCAqLworCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9hYmUsIHBhcmFtcywgRFBMTF9MT0NLLCAiYWJlIik7Cit9CisjZW5kaWYKKwordm9pZCBkb19zY2FsZV90cHM2MjM2MSh1MzIgcmVnLCB1MzIgdm9sdF9tdikKK3sKKwl1MzIgdGVtcCwgc3RlcDsKKworCXN0ZXAgPSB2b2x0X212IC0gVFBTNjIzNjFfQkFTRV9WT0xUX01WOworCXN0ZXAgLz0gMTA7CisKKwkvKgorCSAqIFNlbGVjdCBTRVQxIGluIFRQUzYyMzYxOgorCSAqIFZTRUwxIGlzIGdyb3VuZGVkIG9uIGJvYXJkLiBTbyB0aGUgZm9sbG93aW5nIHNlbGVjdHMKKwkgKiBWU0VMMSA9IDAgYW5kIFZTRUwwID0gMQorCSAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChUUFM2MjM2MV9WU0VMMF9HUElPLCAwKTsKKwlncGlvX3NldF92YWx1ZShUUFM2MjM2MV9WU0VMMF9HUElPLCAxKTsKKworCXRlbXAgPSBUUFM2MjM2MV9JMkNfU0xBVkVfQUREUiB8CisJICAgIChyZWcgPDwgUFJNX1ZDX1ZBTF9CWVBBU1NfUkVHQUREUl9TSElGVCkgfAorCSAgICAoc3RlcCA8PCBQUk1fVkNfVkFMX0JZUEFTU19EQVRBX1NISUZUKSB8CisJICAgIFBSTV9WQ19WQUxfQllQQVNTX1ZBTElEX0JJVDsKKwlkZWJ1ZygiZG9fc2NhbGVfdHBzNjIzNjE6IHZvbHQgLSAlZCBzdGVwIC0gMHgleFxuIiwgdm9sdF9tdiwgc3RlcCk7CisKKwl3cml0ZWwodGVtcCwgJnByY20tPnBybV92Y192YWxfYnlwYXNzKTsKKwlpZiAoIXdhaXRfb25fdmFsdWUoUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklULCAwLAorCQkJCSZwcmNtLT5wcm1fdmNfdmFsX2J5cGFzcywgTERFTEFZKSkgeworCQlwdXRzKCJTY2FsaW5nIHZvbHRhZ2UgZmFpbGVkIGZvciB2ZGRfbXB1IGZyb20gVFBTXG4iKTsKKwl9Cit9CisKK3ZvaWQgZG9fc2NhbGVfdmNvcmUodTMyIHZjb3JlX3JlZywgdTMyIHZvbHRfbXYpCit7CisJdTMyIHRlbXAsIG9mZnNldF9jb2RlOworCXUzMiBzdGVwID0gMTI2NjA7IC8qIDEyLjY2IG1WIHJlcHJlc2VudGVkIGluIHVWICovCisJdTMyIG9mZnNldCA9IHZvbHRfbXY7CisKKwkvKiBjb252ZXJ0IHRvIHVWIGZvciBiZXR0ZXIgYWNjdXJhY3kgaW4gdGhlIGNhbGN1bGF0aW9ucyAqLworCW9mZnNldCAqPSAxMDAwOworCisJaWYgKG9tYXBfcmV2aXNpb24oKSA9PSBPTUFQNDQzMF9FUzFfMCkKKwkJb2Zmc2V0IC09IFBIT0VOSVhfU01QU19CQVNFX1ZPTFRfU1REX01PREVfVVY7CisJZWxzZQorCQlvZmZzZXQgLT0gUEhPRU5JWF9TTVBTX0JBU0VfVk9MVF9TVERfTU9ERV9XSVRIX09GRlNFVF9VVjsKKworCW9mZnNldF9jb2RlID0gKG9mZnNldCArIHN0ZXAgLSAxKSAvIHN0ZXA7CisJLyogVGhlIGNvZGUgc3RhcnRzIGF0IDEgbm90IDAgKi8KKwlvZmZzZXRfY29kZSsrOworCisJZGVidWcoImRvX3NjYWxlX3Zjb3JlOiB2b2x0IC0gJWQgb2Zmc2V0X2NvZGUgLSAweCV4XG4iLCB2b2x0X212LAorCQlvZmZzZXRfY29kZSk7CisKKwl0ZW1wID0gU01QU19JMkNfU0xBVkVfQUREUiB8CisJICAgICh2Y29yZV9yZWcgPDwgUFJNX1ZDX1ZBTF9CWVBBU1NfUkVHQUREUl9TSElGVCkgfAorCSAgICAob2Zmc2V0X2NvZGUgPDwgUFJNX1ZDX1ZBTF9CWVBBU1NfREFUQV9TSElGVCkgfAorCSAgICBQUk1fVkNfVkFMX0JZUEFTU19WQUxJRF9CSVQ7CisJd3JpdGVsKHRlbXAsICZwcmNtLT5wcm1fdmNfdmFsX2J5cGFzcyk7CisJaWYgKCF3YWl0X29uX3ZhbHVlKFBSTV9WQ19WQUxfQllQQVNTX1ZBTElEX0JJVCwgMCwKKwkJCQkmcHJjbS0+cHJtX3ZjX3ZhbF9ieXBhc3MsIExERUxBWSkpIHsKKwkJcHJpbnRmKCJTY2FsaW5nIHZvbHRhZ2UgZmFpbGVkIGZvciAweCV4XG4iLCB2Y29yZV9yZWcpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9jbG9ja19kb21haW4odTMyICpjb25zdCBjbGtjdHJsX3JlZywgdTMyIGVuYWJsZV9tb2RlKQoreworCWNscnNldGJpdHNfbGUzMihjbGtjdHJsX3JlZywgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfTUFTSywKKwkJCWVuYWJsZV9tb2RlIDw8IENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NISUZUKTsKKwlkZWJ1ZygiRW5hYmxlIGNsb2NrIGRvbWFpbiAtICVwXG4iLCBjbGtjdHJsX3JlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9jbGtfZW5hYmxlKHUzMiAqY2xrY3RybF9hZGRyKQoreworCXUzMiBjbGtjdHJsLCBpZGxlc3QgPSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfRElTQUJMRUQ7CisJdTMyIGJvdW5kID0gTERFTEFZOworCisJd2hpbGUgKChpZGxlc3QgPT0gTU9EVUxFX0NMS0NUUkxfSURMRVNUX0RJU0FCTEVEKSB8fAorCQkoaWRsZXN0ID09IE1PRFVMRV9DTEtDVFJMX0lETEVTVF9UUkFOU0lUSU9OSU5HKSkgeworCisJCWNsa2N0cmwgPSByZWFkbChjbGtjdHJsX2FkZHIpOworCQlpZGxlc3QgPSAoY2xrY3RybCAmIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9NQVNLKSA+PgorCQkJIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9TSElGVDsKKwkJaWYgKC0tYm91bmQgPT0gMCkgeworCQkJcHJpbnRmKCJDbG9jayBlbmFibGUgZmFpbGVkIGZvciAweCVwIGlkbGVzdCAweCV4XG4iLAorCQkJCWNsa2N0cmxfYWRkciwgY2xrY3RybCk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY2xvY2tfbW9kdWxlKHUzMiAqY29uc3QgY2xrY3RybF9hZGRyLCB1MzIgZW5hYmxlX21vZGUsCisJCQkJdTMyIHdhaXRfZm9yX2VuYWJsZSkKK3sKKwljbHJzZXRiaXRzX2xlMzIoY2xrY3RybF9hZGRyLCBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCisJCQllbmFibGVfbW9kZSA8PCBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKKwlkZWJ1ZygiRW5hYmxlIGNsb2NrIG1vZHVsZSAtICVwXG4iLCBjbGtjdHJsX2FkZHIpOworCWlmICh3YWl0X2Zvcl9lbmFibGUpCisJCXdhaXRfZm9yX2Nsa19lbmFibGUoY2xrY3RybF9hZGRyKTsKK30KKwordm9pZCBmcmVxX3VwZGF0ZV9jb3JlKHZvaWQpCit7CisJdTMyIGZyZXFfY29uZmlnMSA9IDA7CisJY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpjb3JlX2RwbGxfcGFyYW1zOworCisJY29yZV9kcGxsX3BhcmFtcyA9IGdldF9jb3JlX2RwbGxfcGFyYW1zKCk7CisJLyogUHV0IEVNSUYgY2xvY2sgZG9tYWluIGluIHN3IHdha2V1cCBtb2RlICovCisJZW5hYmxlX2Nsb2NrX2RvbWFpbigmcHJjbS0+Y21fbWVtaWZfY2xrc3RjdHJsLAorCQkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1dLVVApOworCXdhaXRfZm9yX2Nsa19lbmFibGUoJnByY20tPmNtX21lbWlmX2VtaWZfMV9jbGtjdHJsKTsKKwl3YWl0X2Zvcl9jbGtfZW5hYmxlKCZwcmNtLT5jbV9tZW1pZl9lbWlmXzJfY2xrY3RybCk7CisKKwlmcmVxX2NvbmZpZzEgPSBTSEFET1dfRlJFUV9DT05GSUcxX0ZSRVFfVVBEQVRFX01BU0sgfAorCSAgICBTSEFET1dfRlJFUV9DT05GSUcxX0RMTF9SRVNFVF9NQVNLOworCisJZnJlcV9jb25maWcxIHw9IChEUExMX0VOX0xPQ0sgPDwgU0hBRE9XX0ZSRVFfQ09ORklHMV9EUExMX0VOX1NISUZUKSAmCisJCQkJU0hBRE9XX0ZSRVFfQ09ORklHMV9EUExMX0VOX01BU0s7CisKKwlmcmVxX2NvbmZpZzEgfD0gKGNvcmVfZHBsbF9wYXJhbXMtPm0yIDw8CisJCQlTSEFET1dfRlJFUV9DT05GSUcxX00yX0RJVl9TSElGVCkgJgorCQkJU0hBRE9XX0ZSRVFfQ09ORklHMV9NMl9ESVZfTUFTSzsKKworCXdyaXRlbChmcmVxX2NvbmZpZzEsICZwcmNtLT5jbV9zaGFkb3dfZnJlcV9jb25maWcxKTsKKwlpZiAoIXdhaXRfb25fdmFsdWUoU0hBRE9XX0ZSRVFfQ09ORklHMV9GUkVRX1VQREFURV9NQVNLLCAwLAorCQkJCSZwcmNtLT5jbV9zaGFkb3dfZnJlcV9jb25maWcxLCBMREVMQVkpKSB7CisJCXB1dHMoIkZSRVEgVVBEQVRFIHByb2NlZHVyZSBmYWlsZWQhISIpOworCQloYW5nKCk7CisJfQorCisJLyogUHV0IEVNSUYgY2xvY2sgZG9tYWluIGJhY2sgaW4gaHcgYXV0byBtb2RlICovCisJZW5hYmxlX2Nsb2NrX2RvbWFpbigmcHJjbS0+Y21fbWVtaWZfY2xrc3RjdHJsLAorCQkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX0hXX0FVVE8pOworCXdhaXRfZm9yX2Nsa19lbmFibGUoJnByY20tPmNtX21lbWlmX2VtaWZfMV9jbGtjdHJsKTsKKwl3YWl0X2Zvcl9jbGtfZW5hYmxlKCZwcmNtLT5jbV9tZW1pZl9lbWlmXzJfY2xrY3RybCk7Cit9CisKK3ZvaWQgYnlwYXNzX2RwbGwodTMyICpjb25zdCBiYXNlKQoreworCWRvX2J5cGFzc19kcGxsKGJhc2UpOworCXdhaXRfZm9yX2J5cGFzcyhiYXNlKTsKK30KKwordm9pZCBsb2NrX2RwbGwodTMyICpjb25zdCBiYXNlKQoreworCWRvX2xvY2tfZHBsbChiYXNlKTsKKwl3YWl0X2Zvcl9sb2NrKGJhc2UpOworfQorCit2b2lkIHNldHVwX2Nsb2Nrc19mb3JfY29uc29sZSh2b2lkKQoreworCS8qIERvIG5vdCBhZGQgYW55IHNwbF9kZWJ1ZyBwcmludHMgaW4gdGhpcyBmdW5jdGlvbiAqLworCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfY2xrc3RjdHJsLCBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9NQVNLLAorCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU1dfV0tVUCA8PAorCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU0hJRlQpOworCisJLyogRW5hYmxlIGFsbCBVQVJUcyAtIGNvbnNvbGUgd2lsbCBiZSBvbiBvbmUgb2YgdGhlbSAqLworCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfdWFydDFfY2xrY3RybCwKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRVhQTElDSVRfRU4gPDwKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOworCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl91YXJ0Ml9jbGtjdHJsLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiA8PAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX3VhcnQzX2Nsa2N0cmwsCisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOIDw8CisJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKKworCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfdWFydDNfY2xrY3RybCwKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRVhQTElDSVRfRU4gPDwKKwkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOworCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl9jbGtzdGN0cmwsIENEX0NMS0NUUkxfQ0xLVFJDVFJMX01BU0ssCisJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9IV19BVVRPIDw8CisJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TSElGVCk7Cit9CisKK3ZvaWQgc2V0dXBfc3JpMmModm9pZCkKK3sKKwl1MzIgc3lzX2Nsa19raHosIGN5Y2xlc19oaSwgY3ljbGVzX2xvdywgdGVtcDsKKworCXN5c19jbGtfa2h6ID0gZ2V0X3N5c19jbGtfZnJlcSgpIC8gMTAwMDsKKworCS8qCisJICogU2V0dXAgdGhlIGRlZGljYXRlZCBJMkMgY29udHJvbGxlciBmb3IgVm9sdGFnZSBDb250cm9sCisJICogSTJDIGNsayAtIGhpZ2ggcGVyaW9kIDQwJSBsb3cgcGVyaW9kIDYwJQorCSAqLworCWN5Y2xlc19oaSA9IHN5c19jbGtfa2h6ICogNCAvIFBSTV9WQ19JMkNfQ0hBTk5FTF9GUkVRX0tIWiAvIDEwOworCWN5Y2xlc19sb3cgPSBzeXNfY2xrX2toeiAqIDYgLyBQUk1fVkNfSTJDX0NIQU5ORUxfRlJFUV9LSFogLyAxMDsKKwkvKiB2YWx1ZXMgdG8gYmUgc2V0IGluIHJlZ2lzdGVyIC0gbGVzcyBieSA1ICYgNyByZXNwZWN0aXZlbHkgKi8KKwljeWNsZXNfaGkgLT0gNTsKKwljeWNsZXNfbG93IC09IDc7CisJdGVtcCA9IChjeWNsZXNfaGkgPDwgUFJNX1ZDX0NGR19JMkNfQ0xLX1NDTEhfU0hJRlQpIHwKKwkgICAgICAgKGN5Y2xlc19sb3cgPDwgUFJNX1ZDX0NGR19JMkNfQ0xLX1NDTExfU0hJRlQpOworCXdyaXRlbCh0ZW1wLCAmcHJjbS0+cHJtX3ZjX2NmZ19pMmNfY2xrKTsKKworCS8qIERpc2FibGUgaGlnaCBzcGVlZCBtb2RlIGFuZCBhbGwgYWR2YW5jZWQgZmVhdHVyZXMgKi8KKwl3cml0ZWwoMHgwLCAmcHJjbS0+cHJtX3ZjX2NmZ19pMmNfbW9kZSk7Cit9CisKK3ZvaWQgZG9fZW5hYmxlX2Nsb2Nrcyh1MzIgKmNvbnN0ICpjbGtfZG9tYWlucywKKwkJCSAgICB1MzIgKmNvbnN0ICpjbGtfbW9kdWxlc19od19hdXRvLAorCQkJICAgIHUzMiAqY29uc3QgKmNsa19tb2R1bGVzX2V4cGxpY2l0X2VuLAorCQkJICAgIHU4IHdhaXRfZm9yX2VuYWJsZSkKK3sKKwl1MzIgaSwgbWF4ID0gMTAwOworCisJLyogUHV0IHRoZSBjbG9jayBkb21haW5zIGluIFNXX1dLVVAgbW9kZSAqLworCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfZG9tYWluc1tpXTsgaSsrKSB7CisJCWVuYWJsZV9jbG9ja19kb21haW4oY2xrX2RvbWFpbnNbaV0sCisJCQkJICAgIENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NXX1dLVVApOworCX0KKworCS8qIENsb2NrIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIHB1dCBpbiBIV19BVVRPICovCisJZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19tb2R1bGVzX2h3X2F1dG9baV07IGkrKykgeworCQllbmFibGVfY2xvY2tfbW9kdWxlKGNsa19tb2R1bGVzX2h3X2F1dG9baV0sCisJCQkJICAgIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfSFdfQVVUTywKKwkJCQkgICAgd2FpdF9mb3JfZW5hYmxlKTsKKwl9OworCisJLyogQ2xvY2sgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgcHV0IGluIFNXX0VYUExJQ0lUX0VOIG1vZGUgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5baV07IGkrKykgeworCQllbmFibGVfY2xvY2tfbW9kdWxlKGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuW2ldLAorCQkJCSAgICBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOLAorCQkJCSAgICB3YWl0X2Zvcl9lbmFibGUpOworCX07CisKKwkvKiBQdXQgdGhlIGNsb2NrIGRvbWFpbnMgaW4gSFdfQVVUTyBtb2RlIG5vdyAqLworCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfZG9tYWluc1tpXTsgaSsrKSB7CisJCWVuYWJsZV9jbG9ja19kb21haW4oY2xrX2RvbWFpbnNbaV0sCisJCQkJICAgIENEX0NMS0NUUkxfQ0xLVFJDVFJMX0hXX0FVVE8pOworCX0KK30KKwordm9pZCBwcmNtX2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKG9tYXBfaHdfaW5pdF9jb250ZXh0KCkpIHsKKwljYXNlIE9NQVBfSU5JVF9DT05URVhUX1NQTDoKKwljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0ZST01fTk9SOgorCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfQ0g6CisJCWVuYWJsZV9iYXNpY19jbG9ja3MoKTsKKwkJc2NhbGVfdmNvcmVzKCk7CisJCXNldHVwX2RwbGxzKCk7CisjaWZkZWYgQ09ORklHX1NZU19DTE9DS1NfRU5BQkxFX0FMTAorCQlzZXR1cF9ub25fZXNzZW50aWFsX2RwbGxzKCk7CisJCWVuYWJsZV9ub25fZXNzZW50aWFsX2Nsb2NrcygpOworI2VuZGlmCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChPTUFQX0lOSVRfQ09OVEVYVF9TUEwgIT0gb21hcF9od19pbml0X2NvbnRleHQoKSkKKwkJZW5hYmxlX2Jhc2ljX3Vib290X2Nsb2NrcygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL2VtaWYtY29tbW9uLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vZW1pZi1jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTAzYjVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL2VtaWYtY29tbW9uLmMKQEAgLTAsMCArMSwxMTQwIEBACisvKgorICogRU1JRiBwcm9ncmFtbWluZworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIEFuZWVzaCBWIDxhbmVlc2hAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9lbWlmLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3V0aWxzLmg+CisKK2lubGluZSB1MzIgZW1pZl9udW0odTMyIGJhc2UpCit7CisJaWYgKGJhc2UgPT0gRU1JRjFfQkFTRSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYmFzZSA9PSBFTUlGMl9CQVNFKQorCQlyZXR1cm4gMjsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgdTMyIGdldF9tcih1MzIgYmFzZSwgdTMyIGNzLCB1MzIgbXJfYWRkcikKK3sKKwl1MzIgbXI7CisJc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKKworCW1yX2FkZHIgfD0gY3MgPDwgRU1JRl9SRUdfQ1NfU0hJRlQ7CisJd3JpdGVsKG1yX2FkZHIsICZlbWlmLT5lbWlmX2xwZGRyMl9tb2RlX3JlZ19jZmcpOworCWlmIChvbWFwX3JldmlzaW9uKCkgPT0gT01BUDQ0MzBfRVMyXzApCisJCW1yID0gcmVhZGwoJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGFfZXMyKTsKKwllbHNlCisJCW1yID0gcmVhZGwoJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGEpOworCWRlYnVnKCJnZXRfbXI6IEVNSUYlZCBjcyAlZCBtciAlMDh4IHZhbCAweCV4XG4iLCBlbWlmX251bShiYXNlKSwKKwkgICAgICBjcywgbXJfYWRkciwgbXIpOworCXJldHVybiBtcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9tcih1MzIgYmFzZSwgdTMyIGNzLCB1MzIgbXJfYWRkciwgdTMyIG1yX3ZhbCkKK3sKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJbXJfYWRkciB8PSBjcyA8PCBFTUlGX1JFR19DU19TSElGVDsKKwl3cml0ZWwobXJfYWRkciwgJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2NmZyk7CisJd3JpdGVsKG1yX3ZhbCwgJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGEpOworfQorCit2b2lkIGVtaWZfcmVzZXRfcGh5KHUzMiBiYXNlKQoreworCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7CisJdTMyIGlvZGZ0OworCisJaW9kZnQgPSByZWFkbCgmZW1pZi0+ZW1pZl9pb2RmdF90bGdjKTsKKwlpb2RmdCB8PSBFTUlGX1JFR19SRVNFVF9QSFlfTUFTSzsKKwl3cml0ZWwoaW9kZnQsICZlbWlmLT5lbWlmX2lvZGZ0X3RsZ2MpOworfQorCitzdGF0aWMgdm9pZCBkb19scGRkcjJfaW5pdCh1MzIgYmFzZSwgdTMyIGNzKQoreworCXUzMiBtcl9hZGRyOworCisJLyogV2FpdCB0aWxsIGRldmljZSBhdXRvIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlICovCisJd2hpbGUgKGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SMCkgJiBMUEREUjJfTVIwX0RBSV9NQVNLKQorCQk7CisJc2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIxMCwgTVIxMF9aUV9aUUlOSVQpOworCS8qCisJICogdFpRSU5JVCA9IDEgdXMKKwkgKiBFbm91Z2ggbG9vcHMgYXNzdW1pbmcgYSBtYXhpbXVtIG9mIDJHSHoKKwkgKi8KKwlzZGVsYXkoMjAwMCk7CisJc2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIxLCBNUjFfQkxfOF9CVF9TRVFfV1JBUF9FTl9OV1JfMyk7CisJc2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVIxNiwgTVIxNl9SRUZfRlVMTF9BUlJBWSk7CisJLyoKKwkgKiBFbmFibGUgcmVmcmVzaCBhbG9uZyB3aXRoIHdyaXRpbmcgTVIyCisJICogRW5jb2Rpbmcgb2YgUkwgaW4gTVIyIGlzIChSTCAtIDIpCisJICovCisJbXJfYWRkciA9IExQRERSMl9NUjIgfCBFTUlGX1JFR19SRUZSRVNIX0VOX01BU0s7CisJc2V0X21yKGJhc2UsIGNzLCBtcl9hZGRyLCBSTF9GSU5BTCAtIDIpOworfQorCitzdGF0aWMgdm9pZCBscGRkcjJfaW5pdCh1MzIgYmFzZSwgY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCisJLyogTm90IE5WTSAqLworCWNscmJpdHNfbGUzMigmZW1pZi0+ZW1pZl9scGRkcjJfbnZtX2NvbmZpZywgRU1JRl9SRUdfQ1MxTlZNRU5fTUFTSyk7CisKKwkvKgorCSAqIEtlZXAgUkVHX0lOSVRSRUZfRElTID0gMSB0byBwcmV2ZW50IHJlLWluaXRpYWxpemF0aW9uIG9mIFNEUkFNCisJICogd2hlbiBFTUlGX1NEUkFNX0NPTkZJRyByZWdpc3RlciBpcyB3cml0dGVuCisJICovCisJc2V0Yml0c19sZTMyKCZlbWlmLT5lbWlmX3NkcmFtX3JlZl9jdHJsLCBFTUlGX1JFR19JTklUUkVGX0RJU19NQVNLKTsKKworCS8qCisJICogU2V0IHRoZSBTRFJBTV9DT05GSUcgYW5kIFBIWV9DVFJMIGZvciB0aGUKKwkgKiB1bi1sb2NrZWQgZnJlcXVlbmN5ICYgZGVmYXVsdCBSTAorCSAqLworCXdyaXRlbChyZWdzLT5zZHJhbV9jb25maWdfaW5pdCwgJmVtaWYtPmVtaWZfc2RyYW1fY29uZmlnKTsKKwl3cml0ZWwocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0LCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMSk7CisKKwlkb19scGRkcjJfaW5pdChiYXNlLCBDUzApOworCWlmIChyZWdzLT5zZHJhbV9jb25maWcgJiBFTUlGX1JFR19FQkFOS19NQVNLKQorCQlkb19scGRkcjJfaW5pdChiYXNlLCBDUzEpOworCisJd3JpdGVsKHJlZ3MtPnNkcmFtX2NvbmZpZywgJmVtaWYtPmVtaWZfc2RyYW1fY29uZmlnKTsKKwl3cml0ZWwocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMSwgJmVtaWYtPmVtaWZfZGRyX3BoeV9jdHJsXzEpOworCisJLyogRW5hYmxlIHJlZnJlc2ggbm93ICovCisJY2xyYml0c19sZTMyKCZlbWlmLT5lbWlmX3NkcmFtX3JlZl9jdHJsLCBFTUlGX1JFR19JTklUUkVGX0RJU19NQVNLKTsKKworfQorCit2b2lkIGVtaWZfdXBkYXRlX3RpbWluZ3ModTMyIGJhc2UsIGNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKKworCXdyaXRlbChyZWdzLT5yZWZfY3RybCwgJmVtaWYtPmVtaWZfc2RyYW1fcmVmX2N0cmxfc2hkdyk7CisJd3JpdGVsKHJlZ3MtPnNkcmFtX3RpbTEsICZlbWlmLT5lbWlmX3NkcmFtX3RpbV8xX3NoZHcpOworCXdyaXRlbChyZWdzLT5zZHJhbV90aW0yLCAmZW1pZi0+ZW1pZl9zZHJhbV90aW1fMl9zaGR3KTsKKwl3cml0ZWwocmVncy0+c2RyYW1fdGltMywgJmVtaWYtPmVtaWZfc2RyYW1fdGltXzNfc2hkdyk7CisJaWYgKG9tYXBfcmV2aXNpb24oKSA9PSBPTUFQNDQzMF9FUzFfMCkgeworCQkvKiBFUzEgYnVnIEVNSUYgc2hvdWxkIGJlIGluIGZvcmNlIGlkbGUgZHVyaW5nIGZyZXFfdXBkYXRlICovCisJCXdyaXRlbCgwLCAmZW1pZi0+ZW1pZl9wd3JfbWdtdF9jdHJsKTsKKwl9IGVsc2UgeworCQl3cml0ZWwoRU1JRl9QV1JfTUdNVF9DVFJMLCAmZW1pZi0+ZW1pZl9wd3JfbWdtdF9jdHJsKTsKKwkJd3JpdGVsKEVNSUZfUFdSX01HTVRfQ1RSTF9TSERXLCAmZW1pZi0+ZW1pZl9wd3JfbWdtdF9jdHJsX3NoZHcpOworCX0KKwl3cml0ZWwocmVncy0+cmVhZF9pZGxlX2N0cmwsICZlbWlmLT5lbWlmX3JlYWRfaWRsZWN0cmxfc2hkdyk7CisJd3JpdGVsKHJlZ3MtPnpxX2NvbmZpZywgJmVtaWYtPmVtaWZfenFfY29uZmlnKTsKKwl3cml0ZWwocmVncy0+dGVtcF9hbGVydF9jb25maWcsICZlbWlmLT5lbWlmX3RlbXBfYWxlcnRfY29uZmlnKTsKKwl3cml0ZWwocmVncy0+ZW1pZl9kZHJfcGh5X2N0bHJfMSwgJmVtaWYtPmVtaWZfZGRyX3BoeV9jdHJsXzFfc2hkdyk7CisKKwlpZiAob21hcF9yZXZpc2lvbigpID09IE9NQVA1NDMwX0VTMV8wKSB7CisJCXdyaXRlbChFTUlGX0wzX0NPTkZJR19WQUxfU1lTXzEwX01QVV81X0xMXzAsCisJCQkmZW1pZi0+ZW1pZl9sM19jb25maWcpOworCX0gZWxzZSBpZiAob21hcF9yZXZpc2lvbigpID49IE9NQVA0NDYwX0VTMV8wKSB7CisJCXdyaXRlbChFTUlGX0wzX0NPTkZJR19WQUxfU1lTXzEwX01QVV8zX0xMXzAsCisJCQkmZW1pZi0+ZW1pZl9sM19jb25maWcpOworCX0gZWxzZSB7CisJCXdyaXRlbChFTUlGX0wzX0NPTkZJR19WQUxfU1lTXzEwX0xMXzAsCisJCQkmZW1pZi0+ZW1pZl9sM19jb25maWcpOworCX0KK30KKworI2lmbmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUworI2RlZmluZSBwcmludF90aW1pbmdfcmVnKHJlZykgZGVidWcoI3JlZyIgLSAweCUwOHhcbiIsIChyZWcpKQorCisvKgorICogT3JnYW5pemF0aW9uIGFuZCByZWZyZXNoIHJlcXVpcmVtZW50cyBmb3IgTFBERFIyIGRldmljZXMgb2YgZGlmZmVyZW50CisgKiB0eXBlcyBhbmQgZGVuc2l0aWVzLiBEZXJpdmVkIGZyb20gSkVTRDIwOS0yIHNlY3Rpb24gMi40CisgKi8KK2NvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyBhZGRyZXNzaW5nX3RhYmxlW10gPSB7CisJLyogQmFua3MgdFJFRkl4MTAgICAgIHJvd3gzMixyb3d4MTYgICAgICBjb2x4MzIsY29seDE2CWRlbnNpdHkgKi8KKwl7QkFOS1M0LCBUX1JFRklfMTVfNiwge1JPV18xMiwgUk9XXzEyfSwge0NPTF83LCBDT0xfOH0gfSwvKjY0TSAqLworCXtCQU5LUzQsIFRfUkVGSV8xNV82LCB7Uk9XXzEyLCBST1dfMTJ9LCB7Q09MXzgsIENPTF85fSB9LC8qMTI4TSAqLworCXtCQU5LUzQsIFRfUkVGSV83XzgsIHtST1dfMTMsIFJPV18xM30sIHtDT0xfOCwgQ09MXzl9IH0sLyoyNTZNICovCisJe0JBTktTNCwgVF9SRUZJXzdfOCwge1JPV18xMywgUk9XXzEzfSwge0NPTF85LCBDT0xfMTB9IH0sLyo1MTJNICovCisJe0JBTktTOCwgVF9SRUZJXzdfOCwge1JPV18xMywgUk9XXzEzfSwge0NPTF85LCBDT0xfMTB9IH0sLyoxR1M0ICovCisJe0JBTktTOCwgVF9SRUZJXzNfOSwge1JPV18xNCwgUk9XXzE0fSwge0NPTF85LCBDT0xfMTB9IH0sLyoyR1M0ICovCisJe0JBTktTOCwgVF9SRUZJXzNfOSwge1JPV18xNCwgUk9XXzE0fSwge0NPTF8xMCwgQ09MXzExfSB9LC8qNEcgKi8KKwl7QkFOS1M4LCBUX1JFRklfM185LCB7Uk9XXzE1LCBST1dfMTV9LCB7Q09MXzEwLCBDT0xfMTF9IH0sLyo4RyAqLworCXtCQU5LUzQsIFRfUkVGSV83XzgsIHtST1dfMTQsIFJPV18xNH0sIHtDT0xfOSwgQ09MXzEwfSB9LC8qMUdTMiAqLworCXtCQU5LUzQsIFRfUkVGSV8zXzksIHtST1dfMTUsIFJPV18xNX0sIHtDT0xfOSwgQ09MXzEwfSB9LC8qMkdTMiAqLworfTsKKworc3RhdGljIGNvbnN0IHUzMiBscGRkcjJfZGVuc2l0eV8yX3NpemVfaW5fbWJ5dGVzW10gPSB7CisJOCwJCQkvKiA2NE1iICovCisJMTYsCQkJLyogMTI4TWIgKi8KKwkzMiwJCQkvKiAyNTZNYiAqLworCTY0LAkJCS8qIDUxMk1iICovCisJMTI4LAkJCS8qIDFHYiAgICovCisJMjU2LAkJCS8qIDJHYiAgICovCisJNTEyLAkJCS8qIDRHYiAgICovCisJMTAyNCwJCQkvKiA4R2IgICAqLworCTIwNDgsCQkJLyogMTZHYiAgKi8KKwk0MDk2CQkJLyogMzJHYiAgKi8KK307CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIHBlcmlvZCBvZiBERFIgY2xvY2sgZnJvbSBmcmVxdWVuY3kgdmFsdWUgYW5kIHNldCB0aGUKKyAqIGRlbm9taW5hdG9yIGFuZCBudW1lcmF0b3IgaW4gZ2xvYmFsIHZhcmlhYmxlcyBmb3IgZWFzeSBhY2Nlc3MgbGF0ZXIKKyAqLworc3RhdGljIHZvaWQgc2V0X2Rkcl9jbGtfcGVyaW9kKHUzMiBmcmVxKQoreworCS8qCisJICogcGVyaW9kID0gMS9mcmVxCisJICogcGVyaW9kX2luX25zID0gMTBeOS9mcmVxCisJICovCisJKlRfbnVtID0gMTAwMDAwMDAwMDsKKwkqVF9kZW4gPSBmcmVxOworCWNhbmNlbF9vdXQoVF9udW0sIFRfZGVuLCAyMDApOworCit9CisKKy8qCisgKiBDb252ZXJ0IHRpbWUgaW4gbmFubyBzZWNvbmRzIHRvIG51bWJlciBvZiBjeWNsZXMgb2YgRERSIGNsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIG5zXzJfY3ljbGVzKHUzMiBucykKK3sKKwlyZXR1cm4gKChucyAqICgqVF9kZW4pKSArICgqVF9udW0pIC0gMSkgLyAoKlRfbnVtKTsKK30KKworLyoKKyAqIG5zXzJfY3ljbGVzIHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCB0aGUgdGltZSBwYXNzZWQgaXMgMiB0aW1lcyB0aGUgYWN0dWFsCisgKiB2YWx1ZSh0byBhdm9pZCBmcmFjdGlvbnMpLiBUaGUgY3ljbGVzIHJldHVybmVkIGlzIGZvciB0aGUgb3JpZ2luYWwgdmFsdWUgb2YKKyAqIHRoZSB0aW1pbmcgcGFyYW1ldGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIG5zX3gyXzJfY3ljbGVzKHUzMiBucykKK3sKKwlyZXR1cm4gKChucyAqICgqVF9kZW4pKSArICgqVF9udW0pICogMiAtIDEpIC8gKCgqVF9udW0pICogMik7Cit9CisKKy8qCisgKiBGaW5kIGFkZHJlc3NpbmcgdGFibGUgaW5kZXggYmFzZWQgb24gdGhlIGRldmljZSdzIHR5cGUoUzIgb3IgUzQpIGFuZAorICogZGVuc2l0eQorICovCitzOCBhZGRyZXNzaW5nX3RhYmxlX2luZGV4KHU4IHR5cGUsIHU4IGRlbnNpdHksIHU4IHdpZHRoKQoreworCXU4IGluZGV4OworCWlmICgoZGVuc2l0eSA+IExQRERSMl9ERU5TSVRZXzhHYikgfHwgKHdpZHRoID09IExQRERSMl9JT19XSURUSF84KSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBMb29rIGF0IHRoZSB3YXkgQUREUl9UQUJMRV9JTkRFWCogdmFsdWVzIGhhdmUgYmVlbiBkZWZpbmVkCisJICogaW4gZW1pZi5oIGNvbXBhcmVkIHRvIExQRERSMl9ERU5TSVRZXyogdmFsdWVzCisJICogVGhlIHRhYmxlIGlzIGxheWVkIG91dCBpbiB0aGUgaW5jcmVhc2luZyBvcmRlciBvZiBkZW5zaXR5CisJICogKGlnbm9yaW5nIHR5cGUpLiBUaGUgZXhjZXB0aW9ucyAxR1MyIGFuZCAyR1MyIGhhdmUgYmVlbiBwbGFjZWQKKwkgKiBhdCB0aGUgZW5kCisJICovCisJaWYgKCh0eXBlID09IExQRERSMl9UWVBFX1MyKSAmJiAoZGVuc2l0eSA9PSBMUEREUjJfREVOU0lUWV8xR2IpKQorCQlpbmRleCA9IEFERFJfVEFCTEVfSU5ERVgxR1MyOworCWVsc2UgaWYgKCh0eXBlID09IExQRERSMl9UWVBFX1MyKSAmJiAoZGVuc2l0eSA9PSBMUEREUjJfREVOU0lUWV8yR2IpKQorCQlpbmRleCA9IEFERFJfVEFCTEVfSU5ERVgyR1MyOworCWVsc2UKKwkJaW5kZXggPSBkZW5zaXR5OworCisJZGVidWcoImVtaWY6IGFkZHJlc3NpbmcgdGFibGUgaW5kZXggJWRcbiIsIGluZGV4KTsKKworCXJldHVybiBpbmRleDsKK30KKworLyoKKyAqIEZpbmQgdGhlIHRoZSByaWdodCB0aW1pbmcgdGFibGUgZnJvbSB0aGUgYXJyYXkgb2YgdGltaW5nCisgKiB0YWJsZXMgb2YgdGhlIGRldmljZSB1c2luZyBERFIgY2xvY2sgZnJlcXVlbmN5CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKmdldF90aW1pbmdzX3RhYmxlKGNvbnN0IHN0cnVjdAorCQkJbHBkZHIyX2FjX3RpbWluZ3MgY29uc3QgKmNvbnN0ICpkZXZpY2VfdGltaW5ncywKKwkJCXUzMiBmcmVxKQoreworCXUzMiBpLCB0ZW1wLCBmcmVxX25lYXJlc3Q7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICp0aW1pbmdzID0gMDsKKworCWVtaWZfYXNzZXJ0KGZyZXEgPD0gTUFYX0xQRERSMl9GUkVRKTsKKwllbWlmX2Fzc2VydChkZXZpY2VfdGltaW5ncyk7CisKKwkvKgorCSAqIFN0YXJ0IHdpdGggdGhlIG1heGltdW0gYWxsb3dlZCBmcmVxdWVuY3kgLSB0aGF0IGlzIGFsd2F5cyBzYWZlCisJICovCisJZnJlcV9uZWFyZXN0ID0gTUFYX0xQRERSMl9GUkVROworCS8qCisJICogRmluZCB0aGUgdGltaW5ncyB0YWJsZSB0aGF0IGhhcyB0aGUgbWF4IGZyZXF1ZW5jeSB2YWx1ZToKKwkgKiAgIGkuICBBYm92ZSBvciBlcXVhbCB0byB0aGUgRERSIGZyZXF1ZW5jeSAtIHNhZmUKKwkgKiAgIGlpLiBUaGUgbG93ZXN0IHRoYXQgc2F0aXNmaWVzIGNvbmRpdGlvbiAoaSkgLSBvcHRpbWFsCisJICovCisJZm9yIChpID0gMDsgKGkgPCBNQVhfTlVNX1NQRUVEQklOUykgJiYgZGV2aWNlX3RpbWluZ3NbaV07IGkrKykgeworCQl0ZW1wID0gZGV2aWNlX3RpbWluZ3NbaV0tPm1heF9mcmVxOworCQlpZiAoKHRlbXAgPj0gZnJlcSkgJiYgKHRlbXAgPD0gZnJlcV9uZWFyZXN0KSkgeworCQkJZnJlcV9uZWFyZXN0ID0gdGVtcDsKKwkJCXRpbWluZ3MgPSBkZXZpY2VfdGltaW5nc1tpXTsKKwkJfQorCX0KKwlkZWJ1ZygiZW1pZjogdGltaW5ncyB0YWJsZTogJWRcbiIsIGZyZXFfbmVhcmVzdCk7CisJcmV0dXJuIHRpbWluZ3M7Cit9CisKKy8qCisgKiBGaW5kcyB0aGUgdmFsdWUgb2YgZW1pZl9zZHJhbV9jb25maWdfcmVnCisgKiBBbGwgcGFyYW1ldGVycyBhcmUgcHJvZ3JhbW1lZCBiYXNlZCBvbiB0aGUgZGV2aWNlIG9uIENTMC4KKyAqIElmIHRoZXJlIGlzIGEgZGV2aWNlIG9uIENTMSwgaXQgd2lsbCBiZSBzYW1lIGFzIHRoYXQgb24gQ1MwIG9yCisgKiBpdCB3aWxsIGJlIE5WTS4gV2UgZG9uJ3Qgc3VwcG9ydCBOVk0geWV0LgorICogSWYgY3MxX2RldmljZSBwb2ludGVyIGlzIE5VTEwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG5vIGRldmljZQorICogb24gQ1MxCisgKi8KK3N0YXRpYyB1MzIgZ2V0X3NkcmFtX2NvbmZpZ19yZWcoY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2RldmljZSwKKwkJCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlLAorCQkJCWNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZywKKwkJCQl1OCBSTCkKK3sKKwl1MzIgY29uZmlnX3JlZyA9IDA7CisKKwljb25maWdfcmVnIHw9ICAoY3MwX2RldmljZS0+dHlwZSArIDQpIDw8IEVNSUZfUkVHX1NEUkFNX1RZUEVfU0hJRlQ7CisJY29uZmlnX3JlZyB8PSAgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZX01BWF9JTlRFUkxFQVZJTkcgPDwKKwkJCUVNSUZfUkVHX0lCQU5LX1BPU19TSElGVDsKKworCWNvbmZpZ19yZWcgfD0gY3MwX2RldmljZS0+aW9fd2lkdGggPDwgRU1JRl9SRUdfTkFSUk9XX01PREVfU0hJRlQ7CisKKwljb25maWdfcmVnIHw9IFJMIDw8IEVNSUZfUkVHX0NMX1NISUZUOworCisJY29uZmlnX3JlZyB8PSBhZGRyZXNzaW5nLT5yb3dfc3pbY3MwX2RldmljZS0+aW9fd2lkdGhdIDw8CisJCQlFTUlGX1JFR19ST1dTSVpFX1NISUZUOworCisJY29uZmlnX3JlZyB8PSBhZGRyZXNzaW5nLT5udW1fYmFua3MgPDwgRU1JRl9SRUdfSUJBTktfU0hJRlQ7CisKKwljb25maWdfcmVnIHw9IChjczFfZGV2aWNlID8gRUJBTktfQ1MxX0VOIDogRUJBTktfQ1MxX0RJUykgPDwKKwkJCUVNSUZfUkVHX0VCQU5LX1NISUZUOworCisJY29uZmlnX3JlZyB8PSBhZGRyZXNzaW5nLT5jb2xfc3pbY3MwX2RldmljZS0+aW9fd2lkdGhdIDw8CisJCQlFTUlGX1JFR19QQUdFU0laRV9TSElGVDsKKworCXJldHVybiBjb25maWdfcmVnOworfQorCitzdGF0aWMgdTMyIGdldF9zZHJhbV9yZWZfY3RybCh1MzIgZnJlcSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZykKK3sKKwl1MzIgcmVmX2N0cmwgPSAwLCB2YWwgPSAwLCBmcmVxX2toejsKKwlmcmVxX2toeiA9IGZyZXEgLyAxMDAwOworCS8qCisJICogcmVmcmVzaCByYXRlIHRvIGJlIHNldCBpcyAndFJFRkkgKiBmcmVxIGluIE1IegorCSAqIGRpdmlzaW9uIGJ5IDEwMDAwIHRvIGFjY291bnQgZm9yIGtoeiBhbmQgeDEwIGluIHRfUkVGSV91c194MTAKKwkgKi8KKwl2YWwgPSBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwICogZnJlcV9raHogLyAxMDAwMDsKKwlyZWZfY3RybCB8PSB2YWwgPDwgRU1JRl9SRUdfUkVGUkVTSF9SQVRFX1NISUZUOworCisJcmV0dXJuIHJlZl9jdHJsOworfQorCitzdGF0aWMgdTMyIGdldF9zZHJhbV90aW1fMV9yZWcoY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICp0aW1pbmdzLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfbWluX3RjayAqbWluX3RjaywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3NpbmcpCit7CisJdTMyIHRpbTEgPSAwLCB2YWwgPSAwOworCXZhbCA9IG1heChtaW5fdGNrLT50V1RSLCBuc194Ml8yX2N5Y2xlcyh0aW1pbmdzLT50V1RSeDIpKSAtIDE7CisJdGltMSB8PSB2YWwgPDwgRU1JRl9SRUdfVF9XVFJfU0hJRlQ7CisKKwlpZiAoYWRkcmVzc2luZy0+bnVtX2JhbmtzID09IEJBTktTOCkKKwkJdmFsID0gKHRpbWluZ3MtPnRGQVcgKiAoKlRfZGVuKSArIDQgKiAoKlRfbnVtKSAtIDEpIC8KKwkJCQkJCQkoNCAqICgqVF9udW0pKSAtIDE7CisJZWxzZQorCQl2YWwgPSBtYXgobWluX3Rjay0+dFJSRCwgbnNfMl9jeWNsZXModGltaW5ncy0+dFJSRCkpIC0gMTsKKworCXRpbTEgfD0gdmFsIDw8IEVNSUZfUkVHX1RfUlJEX1NISUZUOworCisJdmFsID0gbnNfMl9jeWNsZXModGltaW5ncy0+dFJBU21pbiArIHRpbWluZ3MtPnRSUGFiKSAtIDE7CisJdGltMSB8PSB2YWwgPDwgRU1JRl9SRUdfVF9SQ19TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50UkFTX01JTiwgbnNfMl9jeWNsZXModGltaW5ncy0+dFJBU21pbikpIC0gMTsKKwl0aW0xIHw9IHZhbCA8PCBFTUlGX1JFR19UX1JBU19TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50V1IsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRXUikpIC0gMTsKKwl0aW0xIHw9IHZhbCA8PCBFTUlGX1JFR19UX1dSX1NISUZUOworCisJdmFsID0gbWF4KG1pbl90Y2stPnRSQ0QsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSQ0QpKSAtIDE7CisJdGltMSB8PSB2YWwgPDwgRU1JRl9SRUdfVF9SQ0RfU0hJRlQ7CisKKwl2YWwgPSBtYXgobWluX3Rjay0+dFJQX0FCLCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UlBhYikpIC0gMTsKKwl0aW0xIHw9IHZhbCA8PCBFTUlGX1JFR19UX1JQX1NISUZUOworCisJcmV0dXJuIHRpbTE7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3NkcmFtX3RpbV8yX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3MsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrKQoreworCXUzMiB0aW0yID0gMCwgdmFsID0gMDsKKwl2YWwgPSBtYXgobWluX3Rjay0+dENLRSwgdGltaW5ncy0+dENLRSkgLSAxOworCXRpbTIgfD0gdmFsIDw8IEVNSUZfUkVHX1RfQ0tFX1NISUZUOworCisJdmFsID0gbWF4KG1pbl90Y2stPnRSVFAsIG5zX3gyXzJfY3ljbGVzKHRpbWluZ3MtPnRSVFB4MikpIC0gMTsKKwl0aW0yIHw9IHZhbCA8PCBFTUlGX1JFR19UX1JUUF9TSElGVDsKKworCS8qCisJICogdFhTUkQgPSB0UkZDYWIgKyAxMCBucy4gWFNSRCBhbmQgWFNOUiBzaG91bGQgaGF2ZSB0aGUKKwkgKiBzYW1lIHZhbHVlCisJICovCisJdmFsID0gbnNfMl9jeWNsZXModGltaW5ncy0+dFhTUikgLSAxOworCXRpbTIgfD0gdmFsIDw8IEVNSUZfUkVHX1RfWFNSRF9TSElGVDsKKwl0aW0yIHw9IHZhbCA8PCBFTUlGX1JFR19UX1hTTlJfU0hJRlQ7CisKKwl2YWwgPSBtYXgobWluX3Rjay0+dFhQLCBuc194Ml8yX2N5Y2xlcyh0aW1pbmdzLT50WFB4MikpIC0gMTsKKwl0aW0yIHw9IHZhbCA8PCBFTUlGX1JFR19UX1hQX1NISUZUOworCisJcmV0dXJuIHRpbTI7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3NkcmFtX3RpbV8zX3JlZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgKnRpbWluZ3MsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZykKK3sKKwl1MzIgdGltMyA9IDAsIHZhbCA9IDA7CisJdmFsID0gbWluKHRpbWluZ3MtPnRSQVNtYXggKiAxMCAvIGFkZHJlc3NpbmctPnRfUkVGSV91c194MTAgLSAxLCAweEYpOworCXRpbTMgfD0gdmFsIDw8IEVNSUZfUkVHX1RfUkFTX01BWF9TSElGVDsKKworCXZhbCA9IG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSRkNhYikgLSAxOworCXRpbTMgfD0gdmFsIDw8IEVNSUZfUkVHX1RfUkZDX1NISUZUOworCisJdmFsID0gbnNfeDJfMl9jeWNsZXModGltaW5ncy0+dERRU0NLTUFYeDIpIC0gMTsKKwl0aW0zIHw9IHZhbCA8PCBFTUlGX1JFR19UX1REUVNDS01BWF9TSElGVDsKKworCXZhbCA9IG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRaUUNTKSAtIDE7CisJdGltMyB8PSB2YWwgPDwgRU1JRl9SRUdfWlFfWlFDU19TSElGVDsKKworCXZhbCA9IG1heChtaW5fdGNrLT50Q0tFU1IsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRDS0VTUikpIC0gMTsKKwl0aW0zIHw9IHZhbCA8PCBFTUlGX1JFR19UX0NLRVNSX1NISUZUOworCisJcmV0dXJuIHRpbTM7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3pxX2NvbmZpZ19yZWcoY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nLAorCQkJICAgICB1OCB2b2x0X3JhbXApCit7CisJdTMyIHpxID0gMCwgdmFsID0gMDsKKwlpZiAodm9sdF9yYW1wKQorCQl2YWwgPQorCQkgICAgRU1JRl9aUUNTX0lOVEVSVkFMX0RWRlNfSU5fVVMgKiAxMCAvCisJCSAgICBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwOworCWVsc2UKKwkJdmFsID0KKwkJICAgIEVNSUZfWlFDU19JTlRFUlZBTF9OT1JNQUxfSU5fVVMgKiAxMCAvCisJCSAgICBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwOworCXpxIHw9IHZhbCA8PCBFTUlGX1JFR19aUV9SRUZJTlRFUlZBTF9TSElGVDsKKworCXpxIHw9IChSRUdfWlFfWlFDTF9NVUxUIC0gMSkgPDwgRU1JRl9SRUdfWlFfWlFDTF9NVUxUX1NISUZUOworCisJenEgfD0gKFJFR19aUV9aUUlOSVRfTVVMVCAtIDEpIDw8IEVNSUZfUkVHX1pRX1pRSU5JVF9NVUxUX1NISUZUOworCisJenEgfD0gUkVHX1pRX1NGRVhJVEVOX0VOQUJMRSA8PCBFTUlGX1JFR19aUV9TRkVYSVRFTl9TSElGVDsKKworCS8qCisJICogQXNzdW1pbmcgdGhhdCB0d28gY2hpcHNlbGVjdHMgaGF2ZSBhIHNpbmdsZSBjYWxpYnJhdGlvbiByZXNpc3RvcgorCSAqIElmIHRoZXJlIGFyZSBpbmRlZWQgdHdvIGNhbGlicmF0aW9uIHJlc2lzdG9ycywgdGhlbiB0aGlzIGZsYWcgc2hvdWxkCisJICogYmUgZW5hYmxlZCB0byB0YWtlIGFkdmFudGFnZSBvZiBkdWFsIGNhbGlicmF0aW9uIGZlYXR1cmUuCisJICogVGhpcyBkYXRhIHNob3VsZCBpZGVhbGx5IGNvbWUgZnJvbSBib2FyZCBmaWxlcy4gQnV0IGNvbnNpZGVyaW5nCisJICogdGhhdCBub25lIG9mIHRoZSBib2FyZHMgdG9kYXkgaGF2ZSBjYWxpYnJhdGlvbiByZXNpc3RvcnMgcGVyIENTLAorCSAqIGl0IHdvdWxkIGJlIGFuIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgorCSAqLworCXpxIHw9IFJFR19aUV9EVUFMQ0FMRU5fRElTQUJMRSA8PCBFTUlGX1JFR19aUV9EVUFMQ0FMRU5fU0hJRlQ7CisKKwl6cSB8PSBSRUdfWlFfQ1MwRU5fRU5BQkxFIDw8IEVNSUZfUkVHX1pRX0NTMEVOX1NISUZUOworCisJenEgfD0gKGNzMV9kZXZpY2UgPyAxIDogMCkgPDwgRU1JRl9SRUdfWlFfQ1MxRU5fU0hJRlQ7CisKKwlyZXR1cm4genE7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3RlbXBfYWxlcnRfY29uZmlnKGNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2UsCisJCQkJIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZywKKwkJCQkgdTggaXNfZGVyYXRlZCkKK3sKKwl1MzIgYWxlcnQgPSAwLCBpbnRlcnZhbDsKKwlpbnRlcnZhbCA9CisJICAgIFRFTVBfQUxFUlRfUE9MTF9JTlRFUlZBTF9NUyAqIDEwMDAwIC8gYWRkcmVzc2luZy0+dF9SRUZJX3VzX3gxMDsKKwlpZiAoaXNfZGVyYXRlZCkKKwkJaW50ZXJ2YWwgKj0gNDsKKwlhbGVydCB8PSBpbnRlcnZhbCA8PCBFTUlGX1JFR19UQV9SRUZJTlRFUlZBTF9TSElGVDsKKworCWFsZXJ0IHw9IFRFTVBfQUxFUlRfQ09ORklHX0RFVkNUXzEgPDwgRU1JRl9SRUdfVEFfREVWQ05UX1NISUZUOworCisJYWxlcnQgfD0gVEVNUF9BTEVSVF9DT05GSUdfREVWV0RUXzMyIDw8IEVNSUZfUkVHX1RBX0RFVldEVF9TSElGVDsKKworCWFsZXJ0IHw9IDEgPDwgRU1JRl9SRUdfVEFfU0ZFWElURU5fU0hJRlQ7CisKKwlhbGVydCB8PSAxIDw8IEVNSUZfUkVHX1RBX0NTMEVOX1NISUZUOworCisJYWxlcnQgfD0gKGNzMV9kZXZpY2UgPyAxIDogMCkgPDwgRU1JRl9SRUdfVEFfQ1MxRU5fU0hJRlQ7CisKKwlyZXR1cm4gYWxlcnQ7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X3JlYWRfaWRsZV9jdHJsX3JlZyh1OCB2b2x0X3JhbXApCit7CisJdTMyIGlkbGUgPSAwLCB2YWwgPSAwOworCWlmICh2b2x0X3JhbXApCisJCXZhbCA9IG5zXzJfY3ljbGVzKFJFQURfSURMRV9JTlRFUlZBTF9EVkZTKSAvIDY0IC0gMTsKKwllbHNlCisJCS8qTWF4aW11bSB2YWx1ZSBpbiBub3JtYWwgY29uZGl0aW9ucyAtIHN1Z2dlc3RlZCBieSBodyB0ZWFtICovCisJCXZhbCA9IDB4MUZGOworCWlkbGUgfD0gdmFsIDw8IEVNSUZfUkVHX1JFQURfSURMRV9JTlRFUlZBTF9TSElGVDsKKworCWlkbGUgfD0gRU1JRl9SRUdfUkVBRF9JRExFX0xFTl9WQUwgPDwgRU1JRl9SRUdfUkVBRF9JRExFX0xFTl9TSElGVDsKKworCXJldHVybiBpZGxlOworfQorCitzdGF0aWMgdTMyIGdldF9kZHJfcGh5X2N0cmxfMSh1MzIgZnJlcSwgdTggUkwpCit7CisJdTMyIHBoeSA9IDAsIHZhbCA9IDA7CisKKwlwaHkgfD0gKFJMICsgMikgPDwgRU1JRl9SRUdfUkVBRF9MQVRFTkNZX1NISUZUOworCisJaWYgKGZyZXEgPD0gMTAwMDAwMDAwKQorCQl2YWwgPSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF8xMDBfTUhaX0FORF9MRVNTOworCWVsc2UgaWYgKGZyZXEgPD0gMjAwMDAwMDAwKQorCQl2YWwgPSBFTUlGX0RMTF9TTEFWRV9ETFlfQ1RSTF8yMDBfTUhaOworCWVsc2UKKwkJdmFsID0gRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfNDAwX01IWjsKKwlwaHkgfD0gdmFsIDw8IEVNSUZfUkVHX0RMTF9TTEFWRV9ETFlfQ1RSTF9TSElGVDsKKworCS8qIE90aGVyIGZpZWxkcyBhcmUgY29uc3RhbnQgbWFnaWMgdmFsdWVzLiBIYXJkY29kZSB0aGVtIHRvZ2V0aGVyICovCisJcGh5IHw9IEVNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUwgPDwKKwkJRU1JRl9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NISUZUOworCisJcmV0dXJuIHBoeTsKK30KKworc3RhdGljIHUzMiBnZXRfZW1pZl9tZW1fc2l6ZShzdHJ1Y3QgZW1pZl9kZXZpY2VfZGV0YWlscyAqZGV2aWNlcykKK3sKKwl1MzIgc2l6ZV9tYnl0ZXMgPSAwLCB0ZW1wOworCisJaWYgKCFkZXZpY2VzKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXZpY2VzLT5jczBfZGV2aWNlX2RldGFpbHMpIHsKKwkJdGVtcCA9IGRldmljZXMtPmNzMF9kZXZpY2VfZGV0YWlscy0+ZGVuc2l0eTsKKwkJc2l6ZV9tYnl0ZXMgKz0gbHBkZHIyX2RlbnNpdHlfMl9zaXplX2luX21ieXRlc1t0ZW1wXTsKKwl9CisKKwlpZiAoZGV2aWNlcy0+Y3MxX2RldmljZV9kZXRhaWxzKSB7CisJCXRlbXAgPSBkZXZpY2VzLT5jczFfZGV2aWNlX2RldGFpbHMtPmRlbnNpdHk7CisJCXNpemVfbWJ5dGVzICs9IGxwZGRyMl9kZW5zaXR5XzJfc2l6ZV9pbl9tYnl0ZXNbdGVtcF07CisJfQorCS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKwlyZXR1cm4gc2l6ZV9tYnl0ZXMgPDwgMjA7Cit9CisKKy8qIEdldHMgdGhlIGVuY29kaW5nIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBETU0gc2VjdGlvbiBzaXplICovCit1MzIgZ2V0X2RtbV9zZWN0aW9uX3NpemVfbWFwKHUzMiBzZWN0aW9uX3NpemUpCit7CisJLyoKKwkgKiBTZWN0aW9uIHNpemUgbWFwcGluZzoKKwkgKiAweDA6IDE2LU1pQiBzZWN0aW9uCisJICogMHgxOiAzMi1NaUIgc2VjdGlvbgorCSAqIDB4MjogNjQtTWlCIHNlY3Rpb24KKwkgKiAweDM6IDEyOC1NaUIgc2VjdGlvbgorCSAqIDB4NDogMjU2LU1pQiBzZWN0aW9uCisJICogMHg1OiA1MTItTWlCIHNlY3Rpb24KKwkgKiAweDY6IDEtR2lCIHNlY3Rpb24KKwkgKiAweDc6IDItR2lCIHNlY3Rpb24KKwkgKi8KKwlzZWN0aW9uX3NpemUgPj49IDI0OyAvKiBkaXZpZGUgYnkgMTYgTUIgKi8KKwlyZXR1cm4gbG9nXzJfbl9yb3VuZF9kb3duKHNlY3Rpb25fc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaWZfY2FsY3VsYXRlX3JlZ3MoCisJCWNvbnN0IHN0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzICplbWlmX2Rldl9kZXRhaWxzLAorCQl1MzIgZnJlcSwgc3RydWN0IGVtaWZfcmVncyAqcmVncykKK3sKKwl1MzIgdGVtcCwgc3lzX2ZyZXE7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nOworCWNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqdGltaW5nczsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2s7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2Rldl9kZXRhaWxzID0KKwkJCQkJZW1pZl9kZXZfZGV0YWlscy0+Y3MwX2RldmljZV9kZXRhaWxzOworCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZfZGV0YWlscyA9CisJCQkJCWVtaWZfZGV2X2RldGFpbHMtPmNzMV9kZXZpY2VfZGV0YWlsczsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICpjczBfZGV2X3RpbWluZ3MgPQorCQkJCQllbWlmX2Rldl9kZXRhaWxzLT5jczBfZGV2aWNlX3RpbWluZ3M7CisKKwllbWlmX2Fzc2VydChlbWlmX2Rldl9kZXRhaWxzKTsKKwllbWlmX2Fzc2VydChyZWdzKTsKKwkvKgorCSAqIFlvdSBjYW4gbm90IGhhdmUgYSBkZXZpY2Ugb24gQ1MxIHdpdGhvdXQgb25lIG9uIENTMAorCSAqIFNvIGNvbmZpZ3VyaW5nIEVNSUYgd2l0aG91dCBhIGRldmljZSBvbiBDUzAgZG9lc24ndAorCSAqIG1ha2Ugc2Vuc2UKKwkgKi8KKwllbWlmX2Fzc2VydChjczBfZGV2X2RldGFpbHMpOworCWVtaWZfYXNzZXJ0KGNzMF9kZXZfZGV0YWlscy0+dHlwZSAhPSBMUEREUjJfVFlQRV9OVk0pOworCS8qCisJICogSWYgdGhlcmUgaXMgYSBkZXZpY2Ugb24gQ1MxIGl0IHNob3VsZCBiZSBzYW1lIHR5cGUgYXMgQ1MwCisJICogKG9yIE5WTS4gQnV0IE5WTSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZHJpdmVyIHlldCkKKwkgKi8KKwllbWlmX2Fzc2VydCgoY3MxX2Rldl9kZXRhaWxzID09IE5VTEwpIHx8CisJCSAgICAoY3MxX2Rldl9kZXRhaWxzLT50eXBlID09IExQRERSMl9UWVBFX05WTSkgfHwKKwkJICAgIChjczBfZGV2X2RldGFpbHMtPnR5cGUgPT0gY3MxX2Rldl9kZXRhaWxzLT50eXBlKSk7CisJZW1pZl9hc3NlcnQoZnJlcSA8PSBNQVhfTFBERFIyX0ZSRVEpOworCisJc2V0X2Rkcl9jbGtfcGVyaW9kKGZyZXEpOworCisJLyoKKwkgKiBUaGUgZGV2aWNlIG9uIENTMCBpcyB1c2VkIGZvciBhbGwgdGltaW5nIGNhbGN1bGF0aW9ucworCSAqIFRoZXJlIGlzIG9ubHkgb25lIHNldCBvZiByZWdpc3RlcnMgZm9yIHRpbWluZ3MgcGVyIEVNSUYuIFNvLCBpZiB0aGUKKwkgKiBzZWNvbmQgQ1MoQ1MxKSBoYXMgYSBkZXZpY2UsIGl0IHNob3VsZCBoYXZlIHRoZSBzYW1lIHRpbWluZ3MgYXMgdGhlCisJICogZGV2aWNlIG9uIENTMAorCSAqLworCXRpbWluZ3MgPSBnZXRfdGltaW5nc190YWJsZShjczBfZGV2X3RpbWluZ3MtPmFjX3RpbWluZ3MsIGZyZXEpOworCWVtaWZfYXNzZXJ0KHRpbWluZ3MpOworCW1pbl90Y2sgPSBjczBfZGV2X3RpbWluZ3MtPm1pbl90Y2s7CisKKwl0ZW1wID0gYWRkcmVzc2luZ190YWJsZV9pbmRleChjczBfZGV2X2RldGFpbHMtPnR5cGUsCisJCQkJICAgICAgY3MwX2Rldl9kZXRhaWxzLT5kZW5zaXR5LAorCQkJCSAgICAgIGNzMF9kZXZfZGV0YWlscy0+aW9fd2lkdGgpOworCisJZW1pZl9hc3NlcnQoKHRlbXAgPj0gMCkpOworCWFkZHJlc3NpbmcgPSAmKGFkZHJlc3NpbmdfdGFibGVbdGVtcF0pOworCWVtaWZfYXNzZXJ0KGFkZHJlc3NpbmcpOworCisJc3lzX2ZyZXEgPSBnZXRfc3lzX2Nsa19mcmVxKCk7CisKKwlyZWdzLT5zZHJhbV9jb25maWdfaW5pdCA9IGdldF9zZHJhbV9jb25maWdfcmVnKGNzMF9kZXZfZGV0YWlscywKKwkJCQkJCQljczFfZGV2X2RldGFpbHMsCisJCQkJCQkJYWRkcmVzc2luZywgUkxfQk9PVCk7CisKKwlyZWdzLT5zZHJhbV9jb25maWcgPSBnZXRfc2RyYW1fY29uZmlnX3JlZyhjczBfZGV2X2RldGFpbHMsCisJCQkJCQljczFfZGV2X2RldGFpbHMsCisJCQkJCQlhZGRyZXNzaW5nLCBSTF9GSU5BTCk7CisKKwlyZWdzLT5yZWZfY3RybCA9IGdldF9zZHJhbV9yZWZfY3RybChmcmVxLCBhZGRyZXNzaW5nKTsKKworCXJlZ3MtPnNkcmFtX3RpbTEgPSBnZXRfc2RyYW1fdGltXzFfcmVnKHRpbWluZ3MsIG1pbl90Y2ssIGFkZHJlc3NpbmcpOworCisJcmVncy0+c2RyYW1fdGltMiA9IGdldF9zZHJhbV90aW1fMl9yZWcodGltaW5ncywgbWluX3Rjayk7CisKKwlyZWdzLT5zZHJhbV90aW0zID0gZ2V0X3NkcmFtX3RpbV8zX3JlZyh0aW1pbmdzLCBtaW5fdGNrLCBhZGRyZXNzaW5nKTsKKworCXJlZ3MtPnJlYWRfaWRsZV9jdHJsID0gZ2V0X3JlYWRfaWRsZV9jdHJsX3JlZyhMUEREUjJfVk9MVEFHRV9TVEFCTEUpOworCisJcmVncy0+dGVtcF9hbGVydF9jb25maWcgPQorCSAgICBnZXRfdGVtcF9hbGVydF9jb25maWcoY3MxX2Rldl9kZXRhaWxzLCBhZGRyZXNzaW5nLCAwKTsKKworCXJlZ3MtPnpxX2NvbmZpZyA9IGdldF96cV9jb25maWdfcmVnKGNzMV9kZXZfZGV0YWlscywgYWRkcmVzc2luZywKKwkJCQkJICAgIExQRERSMl9WT0xUQUdFX1NUQUJMRSk7CisKKwlyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQgPQorCQkJZ2V0X2Rkcl9waHlfY3RybF8xKHN5c19mcmVxIC8gMiwgUkxfQk9PVCk7CisKKwlyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xID0KKwkJCWdldF9kZHJfcGh5X2N0cmxfMShmcmVxLCBSTF9GSU5BTCk7CisKKwlyZWdzLT5mcmVxID0gZnJlcTsKKworCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fY29uZmlnX2luaXQpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fY29uZmlnKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnJlZl9jdHJsKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnNkcmFtX3RpbTEpOworCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fdGltMik7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV90aW0zKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnJlYWRfaWRsZV9jdHJsKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnRlbXBfYWxlcnRfY29uZmlnKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnpxX2NvbmZpZyk7CisJcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xKTsKKwlwcmludF90aW1pbmdfcmVnKHJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzFfaW5pdCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MgKi8KKworI2lmZGVmIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTgorY29uc3QgY2hhciAqZ2V0X2xwZGRyMl90eXBlKHU4IHR5cGVfaWQpCit7CisJc3dpdGNoICh0eXBlX2lkKSB7CisJY2FzZSBMUEREUjJfVFlQRV9TNDoKKwkJcmV0dXJuICJMUEREUjItUzQiOworCWNhc2UgTFBERFIyX1RZUEVfUzI6CisJCXJldHVybiAiTFBERFIyLVMyIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK2NvbnN0IGNoYXIgKmdldF9scGRkcjJfaW9fd2lkdGgodTggd2lkdGhfaWQpCit7CisJc3dpdGNoICh3aWR0aF9pZCkgeworCWNhc2UgTFBERFIyX0lPX1dJRFRIXzg6CisJCXJldHVybiAieDgiOworCWNhc2UgTFBERFIyX0lPX1dJRFRIXzE2OgorCQlyZXR1cm4gIngxNiI7CisJY2FzZSBMUEREUjJfSU9fV0lEVEhfMzI6CisJCXJldHVybiAieDMyIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK2NvbnN0IGNoYXIgKmdldF9scGRkcjJfbWFudWZhY3R1cmVyKHUzMiBtYW51ZmFjdHVyZXIpCit7CisJc3dpdGNoIChtYW51ZmFjdHVyZXIpIHsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfU0FNU1VORzoKKwkJcmV0dXJuICJTYW1zdW5nIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfUUlNT05EQToKKwkJcmV0dXJuICJRaW1vbmRhIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfRUxQSURBOgorCQlyZXR1cm4gIkVscGlkYSI7CisJY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VUUk9OOgorCQlyZXR1cm4gIkV0cm9uIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfTkFOWUE6CisJCXJldHVybiAiTmFueWEiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9IWU5JWDoKKwkJcmV0dXJuICJIeW5peCI7CisJY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX01PU0VMOgorCQlyZXR1cm4gIk1vc2VsIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfV0lOQk9ORDoKKwkJcmV0dXJuICJXaW5ib25kIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfRVNNVDoKKwkJcmV0dXJuICJFU01UIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfU1BBTlNJT046CisJCXJldHVybiAiU3BhbnNpb24iOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9TU1Q6CisJCXJldHVybiAiU1NUIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfWk1PUzoKKwkJcmV0dXJuICJaTU9TIjsKKwljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfSU5URUw6CisJCXJldHVybiAiSW50ZWwiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9OVU1PTllYOgorCQlyZXR1cm4gIk51bW9ueXgiOworCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9NSUNST046CisJCXJldHVybiAiTWljcm9uIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfc2RyYW1fZGV0YWlscyh1MzIgZW1pZl9uciwgdTMyIGNzLAorCQkJCSAgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqZGV2aWNlKQoreworCWNvbnN0IGNoYXIgKm1mZ19zdHI7CisJY29uc3QgY2hhciAqdHlwZV9zdHI7CisJY2hhciBkZW5zaXR5X3N0clsxMF07CisJdTMyIGRlbnNpdHk7CisKKwlkZWJ1ZygiRU1JRiVkIENTJWRcdCIsIGVtaWZfbnIsIGNzKTsKKworCWlmICghZGV2aWNlKSB7CisJCWRlYnVnKCJOb25lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW1mZ19zdHIgPSBnZXRfbHBkZHIyX21hbnVmYWN0dXJlcihkZXZpY2UtPm1hbnVmYWN0dXJlcik7CisJdHlwZV9zdHIgPSBnZXRfbHBkZHIyX3R5cGUoZGV2aWNlLT50eXBlKTsKKworCWRlbnNpdHkgPSBscGRkcjJfZGVuc2l0eV8yX3NpemVfaW5fbWJ5dGVzW2RldmljZS0+ZGVuc2l0eV07CisJaWYgKChkZW5zaXR5IC8gMTAyNCAqIDEwMjQpID09IGRlbnNpdHkpIHsKKwkJZGVuc2l0eSAvPSAxMDI0OworCQlzcHJpbnRmKGRlbnNpdHlfc3RyLCAiJWQgR0IiLCBkZW5zaXR5KTsKKwl9IGVsc2UKKwkJc3ByaW50ZihkZW5zaXR5X3N0ciwgIiVkIE1CIiwgZGVuc2l0eSk7CisJaWYgKG1mZ19zdHIgJiYgdHlwZV9zdHIpCisJCWRlYnVnKCIlc1x0XHQlc1x0JXNcbiIsIG1mZ19zdHIsIHR5cGVfc3RyLCBkZW5zaXR5X3N0cik7Cit9CisKK3N0YXRpYyB1OCBpc19scGRkcjJfc2RyYW1fcHJlc2VudCh1MzIgYmFzZSwgdTMyIGNzLAorCQkJCSAgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqbHBkZHIyX2RldmljZSkKK3sKKwl1MzIgbXIgPSAwLCB0ZW1wOworCisJbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjApOworCWlmIChtciA+IDB4RkYpIHsKKwkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwl0ZW1wID0gKG1yICYgTFBERFIyX01SMF9ESV9NQVNLKSA+PiBMUEREUjJfTVIwX0RJX1NISUZUOworCWlmICh0ZW1wKSB7CisJCS8qIE5vdCBTRFJBTSAqLworCQlyZXR1cm4gMDsKKwl9CisJdGVtcCA9IChtciAmIExQRERSMl9NUjBfRE5WSV9NQVNLKSA+PiBMUEREUjJfTVIwX0ROVklfU0hJRlQ7CisKKwlpZiAodGVtcCkgeworCQkvKiBETlYgc3VwcG9ydGVkIC0gQnV0IEROViBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgTlZNICovCisJCXJldHVybiAwOworCX0KKworCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI0KTsKKwlpZiAobXIgPiAweEZGKSB7CisJCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjUpOworCWlmIChtciA+PSAweEZGKSB7CisJCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFnZXRfbHBkZHIyX21hbnVmYWN0dXJlcihtcikpIHsKKwkJLyogTWFudWZhY3R1cmVyIG5vdCBpZGVudGlmaWVkICovCisJCXJldHVybiAwOworCX0KKwlscGRkcjJfZGV2aWNlLT5tYW51ZmFjdHVyZXIgPSBtcjsKKworCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI2KTsKKwlpZiAobXIgPj0gMHhGRikgeworCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCisJCXJldHVybiAwOworCX0KKworCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI3KTsKKwlpZiAobXIgPj0gMHhGRikgeworCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCisJCXJldHVybiAwOworCX0KKworCW1yID0gZ2V0X21yKGJhc2UsIGNzLCBMUEREUjJfTVI4KTsKKwlpZiAobXIgPj0gMHhGRikgeworCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCisJCXJldHVybiAwOworCX0KKworCXRlbXAgPSAobXIgJiBNUjhfVFlQRV9NQVNLKSA+PiBNUjhfVFlQRV9TSElGVDsKKwlpZiAoIWdldF9scGRkcjJfdHlwZSh0ZW1wKSkgeworCQkvKiBOb3QgU0RSQU0gKi8KKwkJcmV0dXJuIDA7CisJfQorCWxwZGRyMl9kZXZpY2UtPnR5cGUgPSB0ZW1wOworCisJdGVtcCA9IChtciAmIE1SOF9ERU5TSVRZX01BU0spID4+IE1SOF9ERU5TSVRZX1NISUZUOworCWlmICh0ZW1wID4gTFBERFIyX0RFTlNJVFlfMzJHYikgeworCQkvKiBEZW5zaXR5IG5vdCBzdXBwb3J0ZWQgKi8KKwkJcmV0dXJuIDA7CisJfQorCWxwZGRyMl9kZXZpY2UtPmRlbnNpdHkgPSB0ZW1wOworCisJdGVtcCA9IChtciAmIE1SOF9JT19XSURUSF9NQVNLKSA+PiBNUjhfSU9fV0lEVEhfU0hJRlQ7CisJaWYgKCFnZXRfbHBkZHIyX2lvX3dpZHRoKHRlbXApKSB7CisJCS8qIElPIHdpZHRoIHVuc3VwcG9ydGVkIHZhbHVlICovCisJCXJldHVybiAwOworCX0KKwlscGRkcjJfZGV2aWNlLT5pb193aWR0aCA9IHRlbXA7CisKKwkvKgorCSAqIElmIGFsbCB0aGUgYWJvdmUgdGVzdHMgcGFzcyB3ZSBzaG91bGQKKwkgKiBoYXZlIGEgZGV2aWNlIG9uIHRoaXMgY2hpcC1zZWxlY3QKKwkgKi8KKwlyZXR1cm4gMTsKK30KKworc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqZW1pZl9nZXRfZGV2aWNlX2RldGFpbHModTMyIGVtaWZfbnIsIHU4IGNzLAorCQkJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqbHBkZHIyX2Rldl9kZXRhaWxzKQoreworCXUzMiBwaHk7CisJdTMyIGJhc2UgPSAoZW1pZl9uciA9PSAxKSA/IEVNSUYxX0JBU0UgOiBFTUlGMl9CQVNFOworCisJc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqZW1pZiA9IChzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICopYmFzZTsKKworCWlmICghbHBkZHIyX2Rldl9kZXRhaWxzKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIERvIHRoZSBtaW5pbXVtIGluaXQgZm9yIG1vZGUgcmVnaXN0ZXIgYWNjZXNzZXMgKi8KKwlpZiAoIXJ1bm5pbmdfZnJvbV9zZHJhbSgpKSB7CisJCXBoeSA9IGdldF9kZHJfcGh5X2N0cmxfMShnZXRfc3lzX2Nsa19mcmVxKCkgLyAyLCBSTF9CT09UKTsKKwkJd3JpdGVsKHBoeSwgJmVtaWYtPmVtaWZfZGRyX3BoeV9jdHJsXzEpOworCX0KKworCWlmICghKGlzX2xwZGRyMl9zZHJhbV9wcmVzZW50KGJhc2UsIGNzLCBscGRkcjJfZGV2X2RldGFpbHMpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkaXNwbGF5X3NkcmFtX2RldGFpbHMoZW1pZl9udW0oYmFzZSksIGNzLCBscGRkcjJfZGV2X2RldGFpbHMpOworCisJcmV0dXJuIGxwZGRyMl9kZXZfZGV0YWlsczsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1lTX0FVVE9NQVRJQ19TRFJBTV9ERVRFQ1RJT04gKi8KKworc3RhdGljIHZvaWQgZG9fc2RyYW1faW5pdCh1MzIgYmFzZSkKK3sKKwljb25zdCBzdHJ1Y3QgZW1pZl9yZWdzICpyZWdzOworCXUzMiBpbl9zZHJhbSwgZW1pZl9ucjsKKworCWRlYnVnKCI+PmRvX3NkcmFtX2luaXQoKSAleFxuIiwgYmFzZSk7CisKKwlpbl9zZHJhbSA9IHJ1bm5pbmdfZnJvbV9zZHJhbSgpOworCWVtaWZfbnIgPSAoYmFzZSA9PSBFTUlGMV9CQVNFKSA/IDEgOiAyOworCisjaWZkZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKKwllbWlmX2dldF9yZWdfZHVtcChlbWlmX25yLCAmcmVncyk7CisJaWYgKCFyZWdzKSB7CisJCWRlYnVnKCJFTUlGOiByZWcgZHVtcCBub3QgcHJvdmlkZWRcbiIpOworCQlyZXR1cm47CisJfQorI2Vsc2UKKwkvKgorCSAqIFRoZSB1c2VyIGhhcyBub3QgcHJvdmlkZWQgdGhlIHJlZ2lzdGVyIHZhbHVlcy4gV2UgbmVlZCB0bworCSAqIGNhbGN1bGF0ZSBpdCBiYXNlZCBvbiB0aGUgdGltaW5ncyBhbmQgdGhlIEREUiBmcmVxdWVuY3kKKwkgKi8KKwlzdHJ1Y3QgZW1pZl9kZXZpY2VfZGV0YWlscyBkZXZfZGV0YWlsczsKKwlzdHJ1Y3QgZW1pZl9yZWdzIGNhbGN1bGF0ZWRfcmVnczsKKworCS8qCisJICogR2V0IGRldmljZSBkZXRhaWxzOgorCSAqIC0gRGlzY292ZXJlZCBpZiBDT05GSUdfU1lTX0FVVE9NQVRJQ19TRFJBTV9ERVRFQ1RJT04gaXMgc2V0CisJICogLSBPYnRhaW5lZCBmcm9tIHVzZXIgb3RoZXJ3aXNlCisJICovCisJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyBjczBfZGV2X2RldGFpbHMsIGNzMV9kZXZfZGV0YWlsczsKKwllbWlmX3Jlc2V0X3BoeShiYXNlKTsKKwlkZXZfZGV0YWlscy5jczBfZGV2aWNlX2RldGFpbHMgPSBlbWlmX2dldF9kZXZpY2VfZGV0YWlscyhiYXNlLCBDUzAsCisJCQkJCQkmY3MwX2Rldl9kZXRhaWxzKTsKKwlkZXZfZGV0YWlscy5jczFfZGV2aWNlX2RldGFpbHMgPSBlbWlmX2dldF9kZXZpY2VfZGV0YWlscyhiYXNlLCBDUzEsCisJCQkJCQkmY3MxX2Rldl9kZXRhaWxzKTsKKwllbWlmX3Jlc2V0X3BoeShiYXNlKTsKKworCS8qIFJldHVybiBpZiBubyBkZXZpY2VzIG9uIHRoaXMgRU1JRiAqLworCWlmICghZGV2X2RldGFpbHMuY3MwX2RldmljZV9kZXRhaWxzICYmCisJICAgICFkZXZfZGV0YWlscy5jczFfZGV2aWNlX2RldGFpbHMpIHsKKwkJZW1pZl9zaXplc1tlbWlmX25yIC0gMV0gPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCFpbl9zZHJhbSkKKwkJZW1pZl9zaXplc1tlbWlmX25yIC0gMV0gPSBnZXRfZW1pZl9tZW1fc2l6ZSgmZGV2X2RldGFpbHMpOworCisJLyoKKwkgKiBHZXQgZGV2aWNlIHRpbWluZ3M6CisJICogLSBEZWZhdWx0IHRpbWluZ3Mgc3BlY2lmaWVkIGJ5IEpFU0QyMDktMiBpZgorCSAqICAgQ09ORklHX1NZU19ERUZBVUxUX0xQRERSMl9USU1JTkdTIGlzIHNldAorCSAqIC0gT2J0YWluZWQgZnJvbSB1c2VyIG90aGVyd2lzZQorCSAqLworCWVtaWZfZ2V0X2RldmljZV90aW1pbmdzKGVtaWZfbnIsICZkZXZfZGV0YWlscy5jczBfZGV2aWNlX3RpbWluZ3MsCisJCQkJJmRldl9kZXRhaWxzLmNzMV9kZXZpY2VfdGltaW5ncyk7CisKKwkvKiBDYWxjdWxhdGUgdGhlIHJlZ2lzdGVyIHZhbHVlcyAqLworCWVtaWZfY2FsY3VsYXRlX3JlZ3MoJmRldl9kZXRhaWxzLCBvbWFwX2Rkcl9jbGsoKSwgJmNhbGN1bGF0ZWRfcmVncyk7CisJcmVncyA9ICZjYWxjdWxhdGVkX3JlZ3M7CisjZW5kaWYgLyogQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MgKi8KKworCS8qCisJICogSW5pdGlhbGl6aW5nIHRoZSBMUEREUjIgZGV2aWNlIGNhbiBub3QgaGFwcGVuIGZyb20gU0RSQU0uCisJICogQ2hhbmdpbmcgdGhlIHRpbWluZyByZWdpc3RlcnMgaW4gRU1JRiBjYW4gaGFwcGVuKGdvaW5nIGZyb20gb25lCisJICogT1BQIHRvIGFub3RoZXIpCisJICovCisJaWYgKCFpbl9zZHJhbSkKKwkJbHBkZHIyX2luaXQoYmFzZSwgcmVncyk7CisKKwkvKiBXcml0ZSB0byB0aGUgc2hhZG93IHJlZ2lzdGVycyAqLworCWVtaWZfdXBkYXRlX3RpbWluZ3MoYmFzZSwgcmVncyk7CisKKwlkZWJ1ZygiPDxkb19zZHJhbV9pbml0KCkgJXhcbiIsIGJhc2UpOworfQorCit2b2lkIGVtaWZfcG9zdF9pbml0X2NvbmZpZyh1MzIgYmFzZSkKK3sKKwlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOworCXUzMiBvbWFwX3JldiA9IG9tYXBfcmV2aXNpb24oKTsKKworCWlmIChvbWFwX3JldiA9PSBPTUFQNTQzMF9FUzFfMCkKKwkJcmV0dXJuOworCisJLyogcmVzZXQgcGh5IG9uIEVTMi4wICovCisJaWYgKG9tYXBfcmV2ID09IE9NQVA0NDMwX0VTMl8wKQorCQllbWlmX3Jlc2V0X3BoeShiYXNlKTsKKworCS8qIFB1dCBFTUlGIGJhY2sgaW4gc21hcnQgaWRsZSBvbiBFUzEuMCAqLworCWlmIChvbWFwX3JldiA9PSBPTUFQNDQzMF9FUzFfMCkKKwkJd3JpdGVsKDB4ODAwMDAwMDAsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmwpOworfQorCit2b2lkIGRtbV9pbml0KHUzMiBiYXNlKQoreworCWNvbnN0IHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqbGlzYV9tYXBfcmVnczsKKworI2lmZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCisJZW1pZl9nZXRfZG1tX3JlZ3MoJmxpc2FfbWFwX3JlZ3MpOworI2Vsc2UKKwl1MzIgZW1pZjFfc2l6ZSwgZW1pZjJfc2l6ZSwgbWFwcGVkX3NpemUsIHNlY3Rpb25fbWFwID0gMDsKKwl1MzIgc2VjdGlvbl9jbnQsIHN5c19hZGRyOworCXN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyBsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZCA9IHswfTsKKworCW1hcHBlZF9zaXplID0gMDsKKwlzZWN0aW9uX2NudCA9IDM7CisJc3lzX2FkZHIgPSBDT05GSUdfU1lTX1NEUkFNX0JBU0U7CisJZW1pZjFfc2l6ZSA9IGVtaWZfc2l6ZXNbMF07CisJZW1pZjJfc2l6ZSA9IGVtaWZfc2l6ZXNbMV07CisJZGVidWcoImVtaWYxX3NpemUgMHgleCBlbWlmMl9zaXplIDB4JXhcbiIsIGVtaWYxX3NpemUsIGVtaWYyX3NpemUpOworCisJaWYgKCFlbWlmMV9zaXplICYmICFlbWlmMl9zaXplKQorCQlyZXR1cm47CisKKwkvKiBzeW1tZXRyaWMgaW50ZXJsZWF2ZWQgc2VjdGlvbiAqLworCWlmIChlbWlmMV9zaXplICYmIGVtaWYyX3NpemUpIHsKKwkJbWFwcGVkX3NpemUgPSBtaW4oZW1pZjFfc2l6ZSwgZW1pZjJfc2l6ZSk7CisJCXNlY3Rpb25fbWFwID0gRE1NX0xJU0FfTUFQX0lOVEVSTEVBVkVEX0JBU0VfVkFMOworCQlzZWN0aW9uX21hcCB8PSAwIDw8IEVNSUZfU0RSQ19BRERSX1NISUZUOworCQkvKiBvbmx5IE1TQiAqLworCQlzZWN0aW9uX21hcCB8PSAoc3lzX2FkZHIgPj4gMjQpIDw8CisJCQkJRU1JRl9TWVNfQUREUl9TSElGVDsKKwkJc2VjdGlvbl9tYXAgfD0gZ2V0X2RtbV9zZWN0aW9uX3NpemVfbWFwKG1hcHBlZF9zaXplICogMikKKwkJCQk8PCBFTUlGX1NZU19TSVpFX1NISUZUOworCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMyA9IHNlY3Rpb25fbWFwOworCQllbWlmMV9zaXplIC09IG1hcHBlZF9zaXplOworCQllbWlmMl9zaXplIC09IG1hcHBlZF9zaXplOworCQlzeXNfYWRkciArPSAobWFwcGVkX3NpemUgKiAyKTsKKwkJc2VjdGlvbl9jbnQtLTsKKwl9CisKKwkvKgorCSAqIFNpbmdsZSBFTUlGIHNlY3Rpb24od2UgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDEgc2luZ2xlIEVNSUYKKwkgKiBzZWN0aW9uLSBlaXRoZXIgRU1JRjEgb3IgRU1JRjIgb3Igbm9uZSwgYnV0IG5vdCBib3RoKQorCSAqLworCWlmIChlbWlmMV9zaXplKSB7CisJCXNlY3Rpb25fbWFwID0gRE1NX0xJU0FfTUFQX0VNSUYxX09OTFlfQkFTRV9WQUw7CisJCXNlY3Rpb25fbWFwIHw9IGdldF9kbW1fc2VjdGlvbl9zaXplX21hcChlbWlmMV9zaXplKQorCQkJCTw8IEVNSUZfU1lTX1NJWkVfU0hJRlQ7CisJCS8qIG9ubHkgTVNCICovCisJCXNlY3Rpb25fbWFwIHw9IChtYXBwZWRfc2l6ZSA+PiAyNCkgPDwKKwkJCQlFTUlGX1NEUkNfQUREUl9TSElGVDsKKwkJLyogb25seSBNU0IgKi8KKwkJc2VjdGlvbl9tYXAgfD0gKHN5c19hZGRyID4+IDI0KSA8PCBFTUlGX1NZU19BRERSX1NISUZUOworCQlzZWN0aW9uX2NudC0tOworCX0KKwlpZiAoZW1pZjJfc2l6ZSkgeworCQlzZWN0aW9uX21hcCA9IERNTV9MSVNBX01BUF9FTUlGMl9PTkxZX0JBU0VfVkFMOworCQlzZWN0aW9uX21hcCB8PSBnZXRfZG1tX3NlY3Rpb25fc2l6ZV9tYXAoZW1pZjJfc2l6ZSkgPDwKKwkJCQlFTUlGX1NZU19TSVpFX1NISUZUOworCQkvKiBvbmx5IE1TQiAqLworCQlzZWN0aW9uX21hcCB8PSBtYXBwZWRfc2l6ZSA+PiAyNCA8PCBFTUlGX1NEUkNfQUREUl9TSElGVDsKKwkJLyogb25seSBNU0IgKi8KKwkJc2VjdGlvbl9tYXAgfD0gc3lzX2FkZHIgPj4gMjQgPDwgRU1JRl9TWVNfQUREUl9TSElGVDsKKwkJc2VjdGlvbl9jbnQtLTsKKwl9CisKKwlpZiAoc2VjdGlvbl9jbnQgPT0gMikgeworCQkvKiBPbmx5IDEgc2VjdGlvbiAtIGVpdGhlciBzeW1tZXRyaWMgb3Igc2luZ2xlIEVNSUYgKi8KKwkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzMgPSBzZWN0aW9uX21hcDsKKwkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzIgPSAwOworCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMSA9IDA7CisJfSBlbHNlIHsKKwkJLyogMiBzZWN0aW9ucyAtIDEgc3ltbWV0cmljLCAxIHNpbmdsZSBFTUlGICovCisJCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8yID0gc2VjdGlvbl9tYXA7CisJCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8xID0gMDsKKwl9CisKKwkvKiBUUkFQIGZvciBpbnZhbGlkIFRJTEVSIG1hcHBpbmdzIGluIHNlY3Rpb24gMCAqLworCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8wID0gRE1NX0xJU0FfTUFQXzBfSU5WQUxfQUREUl9UUkFQOworCisJbGlzYV9tYXBfcmVncyA9ICZsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZDsKKyNlbmRpZgorCXN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqaHdfbGlzYV9tYXBfcmVncyA9CisJICAgIChzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKiliYXNlOworCisJd3JpdGVsKDAsICZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMyk7CisJd3JpdGVsKDAsICZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMik7CisJd3JpdGVsKDAsICZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSk7CisJd3JpdGVsKDAsICZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCk7CisKKwl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzMsCisJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMyk7CisJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yLAorCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzIpOworCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSwKKwkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8xKTsKKwl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzAsCisJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCk7CisKKwlpZiAob21hcF9yZXZpc2lvbigpID49IE9NQVA0NDYwX0VTMV8wKSB7CisJCWh3X2xpc2FfbWFwX3JlZ3MgPQorCQkgICAgKHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqKU1BX0JBU0U7CisKKwkJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8zLAorCQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8zKTsKKwkJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yLAorCQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yKTsKKwkJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8xLAorCQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8xKTsKKwkJd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8wLAorCQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8wKTsKKwl9Cit9CisKKy8qCisgKiBTRFJBTSBpbml0aWFsaXphdGlvbjoKKyAqIFNEUkFNIGluaXRpYWxpemF0aW9uIGhhcyB0d28gcGFydHM6CisgKiAxLiBDb25maWd1cmluZyB0aGUgU0RSQU0gZGV2aWNlCisgKiAyLiBVcGRhdGUgdGhlIEFDIHRpbWluZ3MgcmVsYXRlZCBwYXJhbWV0ZXJzIGluIHRoZSBFTUlGIG1vZHVsZQorICogKDEpIHNob3VsZCBiZSBkb25lIG9ubHkgb25jZSBhbmQgc2hvdWxkIG5vdCBiZSBkb25lIHdoaWxlIHdlIGFyZQorICogcnVubmluZyBmcm9tIFNEUkFNLgorICogKDIpIGNhbiBhbmQgc2hvdWxkIGJlIGRvbmUgbW9yZSB0aGFuIG9uY2UgaWYgT1BQIGNoYW5nZXMuCisgKiBQYXJ0aWN1bGFybHksIHRoaXMgbWF5IGJlIG5lZWRlZCB3aGVuIHdlIGJvb3Qgd2l0aG91dCBTUEwgYW5kCisgKiBhbmQgdXNpbmcgQ29uZmlndXJhdGlvbiBIZWFkZXIoQ0gpLiBST00gY29kZSBzdXBwb3J0cyBvbmx5IGF0IDUwJSBPUFAKKyAqIGF0IGJvb3QgKGxvdyBwb3dlciBib290KS4gU28gdS1ib290IGhhcyB0byBzd2l0Y2ggdG8gT1BQMTAwIGFuZCB1cGRhdGUKKyAqIHRoZSBmcmVxdWVuY3kuIFNvLAorICogRG9pbmcgKDEpIGFuZCAoMikgbWFrZXMgc2Vuc2UgLSBmaXJzdCB0aW1lIGluaXRpYWxpemF0aW9uCisgKiBEb2luZyAoMikgYW5kIG5vdCAoMSkgbWFrZXMgc2Vuc2UgLSBPUFAgY2hhbmdlICh3aGVuIHVzaW5nIENIKQorICogRG9pbmcgKDEpIGFuZCBub3QgKDIpIGRvZW4ndCBtYWtlIHNlbnNlCisgKiBTZWUgZG9fc2RyYW1faW5pdCgpIGZvciB0aGUgZGV0YWlscworICovCit2b2lkIHNkcmFtX2luaXQodm9pZCkKK3sKKwl1MzIgaW5fc2RyYW0sIHNpemVfcHJvZywgc2l6ZV9kZXRlY3Q7CisKKwlkZWJ1ZygiPj5zZHJhbV9pbml0KClcbiIpOworCisJaWYgKG9tYXBfaHdfaW5pdF9jb250ZXh0KCkgPT0gT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfU1BMKQorCQlyZXR1cm47CisKKwlpbl9zZHJhbSA9IHJ1bm5pbmdfZnJvbV9zZHJhbSgpOworCWRlYnVnKCJpbl9zZHJhbSA9ICVkXG4iLCBpbl9zZHJhbSk7CisKKwlpZiAoIWluX3NkcmFtKQorCQlieXBhc3NfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2NvcmUpOworCisKKwlkb19zZHJhbV9pbml0KEVNSUYxX0JBU0UpOworCWRvX3NkcmFtX2luaXQoRU1JRjJfQkFTRSk7CisKKwlpZiAoIWluX3NkcmFtKSB7CisJCWRtbV9pbml0KERNTV9CQVNFKTsKKwkJZW1pZl9wb3N0X2luaXRfY29uZmlnKEVNSUYxX0JBU0UpOworCQllbWlmX3Bvc3RfaW5pdF9jb25maWcoRU1JRjJfQkFTRSk7CisJfQorCisJLyogZm9yIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIHRvIHRha2UgZWZmZWN0ICovCisJZnJlcV91cGRhdGVfY29yZSgpOworCisJLyogRG8gc29tZSB0ZXN0aW5nIGFmdGVyIHRoZSBpbml0ICovCisJaWYgKCFpbl9zZHJhbSkgeworCQlzaXplX3Byb2cgPSBvbWFwX3NkcmFtX3NpemUoKTsKKwkJc2l6ZV9kZXRlY3QgPSBnZXRfcmFtX3NpemUoKGxvbmcgKilDT05GSUdfU1lTX1NEUkFNX0JBU0UsCisJCQkJCQlzaXplX3Byb2cpOworCQkvKiBDb21wYXJlIHdpdGggdGhlIHNpemUgcHJvZ3JhbW1lZCAqLworCQlpZiAoc2l6ZV9kZXRlY3QgIT0gc2l6ZV9wcm9nKSB7CisJCQlwcmludGYoIlNEUkFNOiBpZGVudGlmaWVkIHNpemUgbm90IHNhbWUgYXMgZXhwZWN0ZWQiCisJCQkJIiBzaXplIGlkZW50aWZpZWQ6ICV4IGV4cGVjdGVkOiAleFxuIiwKKwkJCQlzaXplX2RldGVjdCwKKwkJCQlzaXplX3Byb2cpOworCQl9IGVsc2UKKwkJCWRlYnVnKCJnZXRfcmFtX3NpemUoKSBzdWNjZXNzZnVsIik7CisJfQorCisJZGVidWcoIjw8c2RyYW1faW5pdCgpXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9od2luaXQtY29tbW9uLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vaHdpbml0LWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NTcwNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vaHdpbml0LWNvbW1vbi5jCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICoKKyAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIE9NQVA0LzUgYmFzZWQgYm9hcmRzCisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQXV0aG9yIDoKKyAqCUFuZWVzaCBWCTxhbmVlc2hAdGkuY29tPgorICoJU3RldmUgU2Frb21hbgk8c3RldmVAc2Frb21hbi5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9lbWlmLmg+CisjaW5jbHVkZSA8YXNtL29tYXBfY29tbW9uLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIKKyAqIHdhcyBleGVjdXRlZCBieSByb20gY29kZSBwcmlvciB0byBjb250cm9sIG9mIHRyYW5zZmVyCisgKiB0byB0aGUgYm9vdGxvYWRlci4gU1BMIGlzIHJlc3BvbnNpYmxlIGZvciBzYXZpbmcgYW5kCisgKiBwYXNzaW5nIHRoZSBib290X3BhcmFtcyBwb2ludGVyIHRvIHRoZSB1LWJvb3QuCisgKi8KK3N0cnVjdCBvbWFwX2Jvb3RfcGFyYW1ldGVycyBib290X3BhcmFtcyBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmRhdGEiKSkpOworCisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorLyoKKyAqIFdlIHVzZSBzdGF0aWMgdmFyaWFibGVzIGJlY2F1c2UgZ2xvYmFsIGRhdGEgaXMgbm90IHJlYWR5IHlldC4KKyAqIEluaXRpYWxpemVkIGRhdGEgaXMgYXZhaWxhYmxlIGluIFNQTCByaWdodCBmcm9tIHRoZSBiZWdpbm5pbmcuCisgKiBXZSB3b3VsZCBub3QgdHlwaWNhbGx5IG5lZWQgdG8gc2F2ZSB0aGVzZSBwYXJhbWV0ZXJzIGluIHJlZ3VsYXIKKyAqIFUtQm9vdC4gVGhpcyBpcyBuZWVkZWQgb25seSBpbiBTUEwgYXQgdGhlIG1vbWVudC4KKyAqLwordTMyIG9tYXBfYm9vdG1vZGUgPSBNTUNTRF9NT0RFX0ZBVDsKKwordTMyIG9tYXBfYm9vdF9kZXZpY2Uodm9pZCkKK3sKKwlyZXR1cm4gKHUzMikgKGJvb3RfcGFyYW1zLm9tYXBfYm9vdGRldmljZSk7Cit9CisKK3UzMiBvbWFwX2Jvb3RfbW9kZSh2b2lkKQoreworCXJldHVybiBvbWFwX2Jvb3Rtb2RlOworfQorI2VuZGlmCisKK3ZvaWQgZG9fc2V0X211eCh1MzIgYmFzZSwgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvbnN0ICphcnJheSwgaW50IHNpemUpCit7CisJaW50IGk7CisJc3RydWN0IHBhZF9jb25mX2VudHJ5ICpwYWQgPSAoc3RydWN0IHBhZF9jb25mX2VudHJ5ICopIGFycmF5OworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKywgcGFkKyspCisJCXdyaXRldyhwYWQtPnZhbCwgYmFzZSArIHBhZC0+b2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgc2V0X211eF9jb25mX3JlZ3Modm9pZCkKK3sKKwlzd2l0Y2ggKG9tYXBfaHdfaW5pdF9jb250ZXh0KCkpIHsKKwljYXNlIE9NQVBfSU5JVF9DT05URVhUX1NQTDoKKwkJc2V0X211eGNvbmZfcmVnc19lc3NlbnRpYWwoKTsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9BRlRFUl9TUEw6CisjaWZkZWYgQ09ORklHX1NZU19FTkFCTEVfUEFEU19BTEwKKwkJc2V0X211eGNvbmZfcmVnc19ub25fZXNzZW50aWFsKCk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9GUk9NX05PUjoKKwljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX0NIOgorCQlzZXRfbXV4Y29uZl9yZWdzX2Vzc2VudGlhbCgpOworI2lmZGVmIENPTkZJR19TWVNfRU5BQkxFX1BBRFNfQUxMCisJCXNldF9tdXhjb25mX3JlZ3Nfbm9uX2Vzc2VudGlhbCgpOworI2VuZGlmCisJCWJyZWFrOworCX0KK30KKwordTMyIGNvcnRleF9yZXYodm9pZCkKK3sKKworCXVuc2lnbmVkIGludCByZXY7CisKKwkvKiBSZWFkIE1haW4gSUQgUmVnaXN0ZXIgKE1JRFIpICovCisJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMwLCBjMCwgMCIgOiAiPXIiIChyZXYpKTsKKworCXJldHVybiByZXY7Cit9CisKK3ZvaWQgb21hcF9yZXZfc3RyaW5nKGNoYXIgKm9tYXBfcmV2X3N0cmluZykKK3sKKwl1MzIgb21hcF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7CisJdTMyIG9tYXBfdmFyaWFudCA9IChvbWFwX3JldiAmIDB4RkZGRjAwMDApID4+IDE2OworCXUzMiBtYWpvcl9yZXYgPSAob21hcF9yZXYgJiAweDAwMDAwRjAwKSA+PiA4OworCXUzMiBtaW5vcl9yZXYgPSAob21hcF9yZXYgJiAweDAwMDAwMEYwKSA+PiA0OworCisJc3ByaW50ZihvbWFwX3Jldl9zdHJpbmcsICJPTUFQJXggRVMleC4leCIsIG9tYXBfdmFyaWFudCwgbWFqb3JfcmV2LAorCQltaW5vcl9yZXYpOworfQorCisjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAorc3RhdGljIHZvaWQgaW5pdF9ib290X3BhcmFtcyh2b2lkKQoreworCWJvb3RfcGFyYW1zX3B0ciA9ICh1MzIgKikgJmJvb3RfcGFyYW1zOworfQorI2VuZGlmCisKKy8qCisgKiBSb3V0aW5lOiBzX2luaXQKKyAqIERlc2NyaXB0aW9uOiBEb2VzIGVhcmx5IHN5c3RlbSBpbml0IG9mIHdhdGNoZG9nLCBtdXhpbmcsICBhbmRjbG9ja3MKKyAqIFdhdGNoZG9nIGRpc2FibGUgaXMgZG9uZSBhbHdheXMuIEZvciB0aGUgcmVzdCB3aGF0IGdldHMgZG9uZQorICogZGVwZW5kcyBvbiB0aGUgYm9vdCBtb2RlIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQKKyAqICAgMS4gc19pbml0IG9mIFNQTCBydW5uaW5nIGZyb20gU1JBTQorICogICAyLiBzX2luaXQgb2YgVS1Cb290IHJ1bm5pbmcgZnJvbSBGTEFTSAorICogICAzLiBzX2luaXQgb2YgVS1Cb290IGxvYWRlZCB0byBTRFJBTSBieSBTUEwKKyAqICAgNC4gc19pbml0IG9mIFUtQm9vdCBsb2FkZWQgdG8gU0RSQU0gYnkgUk9NIGNvZGUgdXNpbmcgdGhlCisgKglDb25maWd1cmF0aW9uIEhlYWRlciBmZWF0dXJlCisgKiBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIHRvIHNlZSB3aGF0IGdldHMKKyAqIGRvbmUgaW4gZWFjaCBvZiB0aGVzZSBjYXNlcworICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBTUkFNIHN0YWNrLgorICovCit2b2lkIHNfaW5pdCh2b2lkKQoreworCWluaXRfb21hcF9yZXZpc2lvbigpOworCXdhdGNoZG9nX2luaXQoKTsKKwlzZXRfbXV4X2NvbmZfcmVncygpOworI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKwlzZXR1cF9jbG9ja3NfZm9yX2NvbnNvbGUoKTsKKwlwcmVsb2FkZXJfY29uc29sZV9pbml0KCk7CisJZG9faW9fc2V0dGluZ3MoKTsKKyNlbmRpZgorCXByY21faW5pdCgpOworI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKwkvKiBGb3IgcmVndWxhciB1LWJvb3Qgc2RyYW1faW5pdCgpIGlzIGNhbGxlZCBmcm9tIGRyYW1faW5pdCgpICovCisJc2RyYW1faW5pdCgpOworCWluaXRfYm9vdF9wYXJhbXMoKTsKKyNlbmRpZgorfQorCisvKgorICogUm91dGluZTogd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZQorICogRGVzY3JpcHRpb246IFdhaXQgZm9yIHBvc3RpbmcgdG8gZmluaXNoIG9uIHdhdGNoZG9nCisgKi8KK3ZvaWQgd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZShzdHJ1Y3Qgd2F0Y2hkb2cgKndkX2Jhc2UpCit7CisJaW50IHBlbmRpbmcgPSAxOworCWRvIHsKKwkJcGVuZGluZyA9IHJlYWRsKCZ3ZF9iYXNlLT53d3BzKTsKKwl9IHdoaWxlIChwZW5kaW5nKTsKK30KKworLyoKKyAqIFJvdXRpbmU6IHdhdGNoZG9nX2luaXQKKyAqIERlc2NyaXB0aW9uOiBTaHV0IGRvd24gd2F0Y2ggZG9ncworICovCit2b2lkIHdhdGNoZG9nX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgd2F0Y2hkb2cgKndkMl9iYXNlID0gKHN0cnVjdCB3YXRjaGRvZyAqKVdEVDJfQkFTRTsKKworCXdyaXRlbChXRF9VTkxPQ0sxLCAmd2QyX2Jhc2UtPndzcHIpOworCXdhaXRfZm9yX2NvbW1hbmRfY29tcGxldGUod2QyX2Jhc2UpOworCXdyaXRlbChXRF9VTkxPQ0syLCAmd2QyX2Jhc2UtPndzcHIpOworfQorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBTRFJBTSBzaXplIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtCisgKiBiYXNlZCBvbiBETU0gc2VjdGlvbiBjb25maWd1cmF0aW9ucworICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgc2l6ZSBvZiBtZW1vcnkgaW5zdGFsbGVkIG1heSBiZQorICogZGlmZmVyZW50IG9uIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgYm9hcmQKKyAqLwordTMyIG9tYXBfc2RyYW1fc2l6ZSh2b2lkKQoreworCXUzMiBzZWN0aW9uLCBpLCB0b3RhbF9zaXplID0gMCwgc2l6ZSwgYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc2VjdGlvbgk9IF9fcmF3X3JlYWRsKERNTV9CQVNFICsgaSo0KTsKKwkJYWRkciA9IHNlY3Rpb24gJiBFTUlGX1NZU19BRERSX01BU0s7CisJCS8qIFNlZSBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCAqLworCQlpZiAoKGFkZHIgPj0gRFJBTV9BRERSX1NQQUNFX1NUQVJUKSAmJgorCQkgICAgKGFkZHIgPCBEUkFNX0FERFJfU1BBQ0VfRU5EKSkgeworCQkJc2l6ZSA9ICgoc2VjdGlvbiAmIEVNSUZfU1lTX1NJWkVfTUFTSykgPj4KKwkJCQkgICBFTUlGX1NZU19TSVpFX1NISUZUKTsKKwkJCXNpemUgPSAxIDw8IHNpemU7CisJCQlzaXplICo9IFNaXzE2TTsKKwkJCXRvdGFsX3NpemUgKz0gc2l6ZTsKKwkJfQorCX0KKworCXJldHVybiB0b3RhbF9zaXplOworfQorCisKKy8qCisgKiBSb3V0aW5lOiBkcmFtX2luaXQKKyAqIERlc2NyaXB0aW9uOiBzZXRzIHVib290cyBpZGVhIG9mIHNkcmFtIHNpemUKKyAqLworaW50IGRyYW1faW5pdCh2b2lkKQoreworCXNkcmFtX2luaXQoKTsKKwlnZC0+cmFtX3NpemUgPSBvbWFwX3NkcmFtX3NpemUoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFByaW50IGJvYXJkIGluZm9ybWF0aW9uCisgKi8KK2ludCBjaGVja2JvYXJkKHZvaWQpCit7CisJcHV0cyhzeXNpbmZvLmJvYXJkX3N0cmluZyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHN0YXJ0X2FybWJvb3QuIFlvdSBjYW4gcmVsaWFibHkgdXNlIHN0YXRpYworKiBkYXRhLiBBbnkgYm9vdC10aW1lIGZ1bmN0aW9uIHRoYXQgcmVxdWlyZSBzdGF0aWMgZGF0YSBzaG91bGQgYmUKKyogY2FsbGVkIGZyb20gaGVyZQorKi8KK2ludCBhcmNoX2NwdV9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgZ2V0X2RldmljZV90eXBlKCk6IHRlbGwgaWYgR1AvSFMvRU1VL1RTVAorICovCit1MzIgZ2V0X2RldmljZV90eXBlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQcmludCBDUFUgaW5mb3JtYXRpb24KKyAqLworaW50IHByaW50X2NwdWluZm8odm9pZCkKK3sKKwljaGFyIHJldl9zdHJpbmdfYnVmZmVyWzUwXTsKKworCW9tYXBfcmV2X3N0cmluZyhyZXZfc3RyaW5nX2J1ZmZlcik7CisJcHJpbnRmKCJDUFUgIDogJXNcbiIsIHJldl9zdHJpbmdfYnVmZmVyKTsKKworCXJldHVybiAwOworfQorI2lmbmRlZiBDT05GSUdfU1lTX0RDQUNIRV9PRkYKK3ZvaWQgZW5hYmxlX2NhY2hlcyh2b2lkKQoreworCS8qIEVuYWJsZSBELWNhY2hlLiBJLWNhY2hlIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFydC5TICovCisJZGNhY2hlX2VuYWJsZSgpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvbG93bGV2ZWxfaW5pdC5TIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL2xvd2xldmVsX2luaXQuUwpzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvbG93bGV2ZWxfaW5pdC5TCnJlbmFtZSB0byBhcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vbG93bGV2ZWxfaW5pdC5TCmluZGV4IDkxNTI1ZWMuLjM1ZjM4YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9sb3dsZXZlbF9pbml0LlMKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL2xvd2xldmVsX2luaXQuUwpAQCAtMjYsOCArMjYsOCBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8YXNtL2FyY2gvb21hcDQuaD4KLSNpZmRlZiBDT05GSUdfU1BMX0JVSUxECisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcC5oPgorCiAuZ2xvYmFsIHNhdmVfYm9vdF9wYXJhbXMKIHNhdmVfYm9vdF9wYXJhbXM6CiAJLyoKQEAgLTQzLDIxICs0Myw0MCBAQAogCWNtcAlyMiwgcjAKIAlibHQJMWYKIAotCS8qIFN0b3JlIHRoZSBib290IGRldmljZSBpbiBvbWFwNF9ib290X2RldmljZSAqLwotCWxkciAgICAgcjIsIFtyMCwgI0JPT1RfREVWSUNFX09GRlNFVF0JQCByMSA8LSB2YWx1ZSBvZiBib290IGRldmljZQorCS8qCisJICogc3RvcmUgdGhlIGJvb3QgcGFyYW1zIHBhc3NlZCBmcm9tIHJvbSBjb2RlIG9yIHNhdmVkCisJICogYW5kIHBhc3NlZCBieSBTUEwKKwkgKi8KKwljbXAJcjAsICMwCisJYmVxCTFmCisJbGRyCXIxLCA9Ym9vdF9wYXJhbXMKKwlzdHIJcjAsIFtyMV0KKyNpZmRlZiBDT05GSUdfU1BMX0JVSUxECisJLyogU3RvcmUgdGhlIGJvb3QgZGV2aWNlIGluIG9tYXBfYm9vdF9kZXZpY2UgKi8KKwlsZHJiCXIyLCBbcjAsICNCT09UX0RFVklDRV9PRkZTRVRdCUAgcjEgPC0gdmFsdWUgb2YgYm9vdCBkZXZpY2UKIAlhbmQJcjIsICNCT09UX0RFVklDRV9NQVNLCi0JbGRyCXIzLCA9b21hcDRfYm9vdF9kZXZpY2UKLQlzdHIgICAgIHIyLCBbcjNdCQkJQCBvbWFwNF9ib290X2RldmljZSA8LSByMQorCWxkcglyMywgPWJvb3RfcGFyYW1zCisJc3RyYglyMiwgW3IzLCAjQk9PVF9ERVZJQ0VfT0ZGU0VUXQlAIG9tYXBfYm9vdF9kZXZpY2UgPC0gcjEKIAotCS8qIFN0b3JlIHRoZSBib290IG1vZGUgKHJhdy9GQVQpIGluIG9tYXA0X2Jvb3RfbW9kZSAqLworCS8qIGJvb3QgbW9kZSBpcyBwYXNzZWQgb25seSBmb3IgZGV2aWNlcyB0aGF0IGNhbiByYXcvZmF0IG1vZGUgKi8KKwljbXAJcjIsICMyCisJYmx0CTJmCisJY21wCXIyLCAjNworCWJndAkyZgorCS8qIFN0b3JlIHRoZSBib290IG1vZGUgKHJhdy9GQVQpIGluIG9tYXBfYm9vdF9tb2RlICovCiAJbGRyCXIyLCBbcjAsICNERVZfREVTQ19QVFJfT0ZGU0VUXQlAIGdldCB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgcHRyCiAJbGRyCXIyLCBbcjIsICNERVZfREFUQV9QVFJfT0ZGU0VUXQlAIGdldCB0aGUgcERldmljZURhdGEgcHRyCiAJbGRyCXIyLCBbcjIsICNCT09UX01PREVfT0ZGU0VUXQlAIGdldCB0aGUgYm9vdCBtb2RlCi0JbGRyCXIzLCA9b21hcDRfYm9vdF9tb2RlCisJbGRyCXIzLCA9b21hcF9ib290bW9kZQogCXN0cglyMiwgW3IzXQorI2VuZGlmCisyOgorCWxkcmIJcjIsIFtyMCwgI0NIX0ZMQUdTX09GRlNFVF0KKwlsZHIJcjMsID1ib290X3BhcmFtcworCXN0cmIJcjIsIFtyMywgI0NIX0ZMQUdTX09GRlNFVF0KIDE6CiAJYngJbHIKLSNlbmRpZgorCiAKIC5nbG9ibCBsb3dsZXZlbF9pbml0CiBsb3dsZXZlbF9pbml0OgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L21lbS5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL21lbS1jb21tb24uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L21lbS5jCnJlbmFtZSB0byBhcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vbWVtLWNvbW1vbi5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vc3BsLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcC1jb21tb24vc3BsLmMKaW5kZXggMmM1OWQyYi4uZDZkN2Q2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL3NwbC5jCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwLWNvbW1vbi9zcGwuYwpAQCAtMzgsNiArMzgsNyBAQAogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAordTMyKiBib290X3BhcmFtc19wdHIgPSBOVUxMOwogc3RydWN0IHNwbF9pbWFnZV9pbmZvIHNwbF9pbWFnZTsKIAogLyogRGVmaW5lIGdsb2JhbCBkYXRhIHN0cnVjdHVyZSBwb2ludGVyIHRvIGl0Ki8KQEAgLTkyLDEyICs5MywxNiBAQAogCiBzdGF0aWMgdm9pZCBqdW1wX3RvX2ltYWdlX25vX2FyZ3Modm9pZCkKIHsKLQl0eXBlZGVmIHZvaWQgKCppbWFnZV9lbnRyeV9ub2FyZ3NfdCkodm9pZClfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKwl0eXBlZGVmIHZvaWQgKCppbWFnZV9lbnRyeV9ub2FyZ3NfdCkodTMyICopX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CiAJaW1hZ2VfZW50cnlfbm9hcmdzX3QgaW1hZ2VfZW50cnkgPQogCQkJKGltYWdlX2VudHJ5X25vYXJnc190KSBzcGxfaW1hZ2UuZW50cnlfcG9pbnQ7CiAKIAlkZWJ1ZygiaW1hZ2UgZW50cnkgcG9pbnQ6IDB4JVhcbiIsIHNwbF9pbWFnZS5lbnRyeV9wb2ludCk7Ci0JaW1hZ2VfZW50cnkoKTsKKwkvKiBQYXNzIHRoZSBzYXZlZCBib290X3BhcmFtcyBmcm9tIHJvbSBjb2RlICovCisjaWYgZGVmaW5lZChDT05GSUdfVklSVElPKSB8fCBkZWZpbmVkKENPTkZJR19aRUJVKQorCWltYWdlX2VudHJ5ID0gMHg4MDEwMDAwMDsKKyNlbmRpZgorCWltYWdlX2VudHJ5KCh1MzIgKikmYm9vdF9wYXJhbXNfcHRyKTsKIH0KIAogdm9pZCBqdW1wX3RvX2ltYWdlX25vX2FyZ3Modm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvTWFrZWZpbGUgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvTWFrZWZpbGUKaW5kZXggZTdlZTBiOC4uODMxNjBhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9NYWtlZmlsZQpAQCAtMjUsMTcgKzI1LDEwIEBACiAKIExJQgk9ICAkKG9iailsaWIkKFNPQykubwogCi1TT0JKUwkrPSBsb3dsZXZlbF9pbml0Lm8KLQotQ09CSlMJKz0gYm9hcmQubworQ09CSlMJKz0gc2RyYW1fZWxwaWRhLm8KK0NPQkpTCSs9IGh3aW5pdC5vCiBDT0JKUwkrPSBjbG9ja3MubwogQ09CSlMJKz0gZW1pZi5vCi1DT0JKUwkrPSBzZHJhbV9lbHBpZGEubwotCi1pZm5kZWYgQ09ORklHX1NQTF9CVUlMRAotQ09CSlMJKz0gbWVtLm8KLUNPQkpTCSs9IHN5c19pbmZvLm8KLWVuZGlmCiAKIFNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpICQoU09CSlMpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2JvYXJkLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvYm9hcmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5N2UzZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvYm9hcmQuYworKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBACi0vKgotICoKLSAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIE9NQVA0IGJhc2VkIGJvYXJkcwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAxMAotICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgotICoKLSAqIEF1dGhvciA6Ci0gKglBbmVlc2ggVgk8YW5lZXNoQHRpLmNvbT4KLSAqCVN0ZXZlIFNha29tYW4JPHN0ZXZlQHNha29tYW4uY29tPgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vYXJtdjcuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9lbWlmLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgotI2luY2x1ZGUgIm9tYXA0X211eF9kYXRhLmgiCi0KLURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCi11MzIgKmNvbnN0IG9tYXA0X3JldmlzaW9uID0gKHUzMiAqKU9NQVA0X1NSQU1fU0NSQVRDSF9PTUFQNF9SRVY7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua180NHh4WzZdID0gewotCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPMV9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyAodm9pZCAqKU9NQVA0NFhYX0dQSU8yX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKLQl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzNfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPNF9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyAodm9pZCAqKU9NQVA0NFhYX0dQSU81X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKLQl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzZfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAotfTsKLQotY29uc3Qgc3RydWN0IGdwaW9fYmFuayAqY29uc3Qgb21hcF9ncGlvX2JhbmsgPSBncGlvX2JhbmtfNDR4eDsKLQotI2lmZGVmIENPTkZJR19TUExfQlVJTEQKLS8qCi0gKiBXZSB1c2Ugc3RhdGljIHZhcmlhYmxlcyBiZWNhdXNlIGdsb2JhbCBkYXRhIGlzIG5vdCByZWFkeSB5ZXQuCi0gKiBJbml0aWFsaXplZCBkYXRhIGlzIGF2YWlsYWJsZSBpbiBTUEwgcmlnaHQgZnJvbSB0aGUgYmVnaW5uaW5nLgotICogV2Ugd291bGQgbm90IHR5cGljYWxseSBuZWVkIHRvIHNhdmUgdGhlc2UgcGFyYW1ldGVycyBpbiByZWd1bGFyCi0gKiBVLUJvb3QuIFRoaXMgaXMgbmVlZGVkIG9ubHkgaW4gU1BMIGF0IHRoZSBtb21lbnQuCi0gKi8KLXUzMiBvbWFwNF9ib290X2RldmljZSA9IEJPT1RfREVWSUNFX01NQzE7Ci11MzIgb21hcDRfYm9vdF9tb2RlID0gTU1DU0RfTU9ERV9GQVQ7Ci0KLXUzMiBvbWFwX2Jvb3RfZGV2aWNlKHZvaWQpCi17Ci0JcmV0dXJuIG9tYXA0X2Jvb3RfZGV2aWNlOwotfQotCi11MzIgb21hcF9ib290X21vZGUodm9pZCkKLXsKLQlyZXR1cm4gb21hcDRfYm9vdF9tb2RlOwotfQotCi0vKgotICogU29tZSB0dW5pbmcgb2YgSU9zIGZvciBvcHRpbWFsIHBvd2VyIGFuZCBwZXJmb3JtYW5jZQotICovCi1zdGF0aWMgdm9pZCBkb19pb19zZXR0aW5ncyh2b2lkKQotewotCXUzMiBscGRkcjJpbzsKLQlzdHJ1Y3QgY29udHJvbF9scGRkcjJpb19yZWdzICpscGRkcjJpb19yZWdzID0KLQkJKHN0cnVjdCBjb250cm9sX2xwZGRyMmlvX3JlZ3MgKilMUEREUjJfSU9fUkVHU19CQVNFOwotCXN0cnVjdCBvbWFwNF9zeXNfY3RybF9yZWdzICpjb25zdCBjdHJsID0KLQkJKHN0cnVjdCBvbWFwNF9zeXNfY3RybF9yZWdzICopU1lTQ1RSTF9HRU5FUkFMX0NPUkVfQkFTRTsKLQotCXUzMiBvbWFwNF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7Ci0KLQlpZiAob21hcDRfcmV2ID09IE9NQVA0NDMwX0VTMV8wKQotCQlscGRkcjJpbyA9IENPTlRST0xfTFBERFIySU9fU0xFV18xMjVQU19EUlY4X1BVTExfRE9XTjsKLQllbHNlIGlmIChvbWFwNF9yZXYgPT0gT01BUDQ0MzBfRVMyXzApCi0JCWxwZGRyMmlvID0gQ09OVFJPTF9MUEREUjJJT19TTEVXXzMyNVBTX0RSVjhfR0FURV9LRUVQRVI7Ci0JZWxzZQotCQlscGRkcjJpbyA9IENPTlRST0xfTFBERFIySU9fU0xFV18zMTVQU19EUlYxMl9QVUxMX0RPV047Ci0KLQkvKiBFTUlGMSAqLwotCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzApOwotCXdyaXRlbChscGRkcjJpbywgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzEpOwotCS8qIE5vIHB1bGwgZm9yIEdSMTAgYXMgcGVyIGh3IHRlYW0ncyByZWNvbW1lbmRhdGlvbiAqLwotCXdyaXRlbChscGRkcjJpbyAmIH5MUEREUjJJT19HUjEwX1dEX01BU0ssCi0JCSZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMV8yKTsKLQl3cml0ZWwoQ09OVFJPTF9MUEREUjJJT18zX1ZBTCwgJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8xXzMpOwotCi0JLyogRU1JRjIgKi8KLQl3cml0ZWwobHBkZHIyaW8sICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMl8wKTsKLQl3cml0ZWwobHBkZHIyaW8sICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMl8xKTsKLQkvKiBObyBwdWxsIGZvciBHUjEwIGFzIHBlciBodyB0ZWFtJ3MgcmVjb21tZW5kYXRpb24gKi8KLQl3cml0ZWwobHBkZHIyaW8gJiB+TFBERFIySU9fR1IxMF9XRF9NQVNLLAotCQkmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzJfMik7Ci0Jd3JpdGVsKENPTlRST0xfTFBERFIySU9fM19WQUwsICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMl8zKTsKLQotCS8qCi0JICogU29tZSBvZiB0aGVzZSBzZXR0aW5ncyAoVFJJTSB2YWx1ZXMpIGNvbWUgZnJvbSBlRnVzZSBhbmQgYXJlCi0JICogaW4gdHVybiBwcm9ncmFtbWVkIGluIHRoZSBlRnVzZSBhdCBtYW51ZmFjdHVyaW5nIHRpbWUgYWZ0ZXIKLQkgKiBjYWxpYnJhdGlvbiBvZiB0aGUgZGV2aWNlLiBEbyB0aGUgc29mdHdhcmUgb3Zlci1yaWRlIG9ubHkgaWYKLQkgKiB0aGUgZGV2aWNlIGlzIG5vdCBjb3JyZWN0bHkgdHJpbW1lZAotCSAqLwotCWlmICghKHJlYWRsKCZjdHJsLT5jb250cm9sX3N0ZF9mdXNlX29wcF9iZ2FwKSAmIDB4RkZGRikpIHsKLQotCQl3cml0ZWwoTERPU1JBTV9WT0xUX0NUUkxfT1ZFUlJJREUsCi0JCQkmY3RybC0+Y29udHJvbF9sZG9zcmFtX2l2YV92b2x0YWdlX2N0cmwpOwotCi0JCXdyaXRlbChMRE9TUkFNX1ZPTFRfQ1RSTF9PVkVSUklERSwKLQkJCSZjdHJsLT5jb250cm9sX2xkb3NyYW1fbXB1X3ZvbHRhZ2VfY3RybCk7Ci0KLQkJd3JpdGVsKExET1NSQU1fVk9MVF9DVFJMX09WRVJSSURFLAotCQkJJmN0cmwtPmNvbnRyb2xfbGRvc3JhbV9jb3JlX3ZvbHRhZ2VfY3RybCk7Ci0JfQotCi0JaWYgKCFyZWFkbCgmY3RybC0+Y29udHJvbF9lZnVzZV8xKSkKLQkJd3JpdGVsKENPTlRST0xfRUZVU0VfMV9PVkVSUklERSwgJmN0cmwtPmNvbnRyb2xfZWZ1c2VfMSk7Ci0KLQlpZiAoIXJlYWRsKCZjdHJsLT5jb250cm9sX2VmdXNlXzIpKQotCQl3cml0ZWwoQ09OVFJPTF9FRlVTRV8yX09WRVJSSURFLCAmY3RybC0+Y29udHJvbF9lZnVzZV8yKTsKLX0KLSNlbmRpZgotCi12b2lkIGRvX3NldF9tdXgodTMyIGJhc2UsIHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb25zdCAqYXJyYXksIGludCBzaXplKQotewotCWludCBpOwotCXN0cnVjdCBwYWRfY29uZl9lbnRyeSAqcGFkID0gKHN0cnVjdCBwYWRfY29uZl9lbnRyeSAqKSBhcnJheTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIHBhZCsrKQotCQl3cml0ZXcocGFkLT52YWwsIGJhc2UgKyBwYWQtPm9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKHZvaWQpCi17Ci0JZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCwKLQkJICAgc2l6ZW9mKGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwpIC8KLQkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOwotCi0JZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCwKLQkJICAgc2l6ZW9mKHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwpIC8KLQkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOwotCi0JaWYgKG9tYXBfcmV2aXNpb24oKSA+PSBPTUFQNDQ2MF9FUzFfMCkKLQkJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwKLQkJCQkgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwLAotCQkJCSBzaXplb2Yod2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwKSAvCi0JCQkJIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X211eF9jb25mX3JlZ3Modm9pZCkKLXsKLQlzd2l0Y2ggKG9tYXA0X2h3X2luaXRfY29udGV4dCgpKSB7Ci0JY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9TUEw6Ci0JCXNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKCk7Ci0JCWJyZWFrOwotCWNhc2UgT01BUF9JTklUX0NPTlRFWFRfVUJPT1RfQUZURVJfU1BMOgotCQlzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwoKTsKLQkJYnJlYWs7Ci0JY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9GUk9NX05PUjoKLQljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX0NIOgotCQlzZXRfbXV4Y29uZl9yZWdzX2Vzc2VudGlhbCgpOwotCQlzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwoKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdTMyIGNvcnRleF9hOV9yZXYodm9pZCkKLXsKLQotCXVuc2lnbmVkIGludCByZXY7Ci0KLQkvKiBSZWFkIE1haW4gSUQgUmVnaXN0ZXIgKE1JRFIpICovCi0JYXNtICgibXJjIHAxNSwgMCwgJTAsIGMwLCBjMCwgMCIgOiAiPXIiIChyZXYpKTsKLQotCXJldHVybiByZXY7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRfb21hcDRfcmV2aXNpb24odm9pZCkKLXsKLQkvKgotCSAqIEZvciBzb21lIG9mIHRoZSBFUzIvRVMxIGJvYXJkcyBJRF9DT0RFIGlzIG5vdCByZWxpYWJsZToKLQkgKiBBbHNvLCBFUzEgYW5kIEVTMiBoYXZlIGRpZmZlcmVudCBBUk0gcmV2aXNpb25zCi0JICogU28gdXNlIEFSTSByZXZpc2lvbiBmb3IgaWRlbnRpZmljYXRpb24KLQkgKi8KLQl1bnNpZ25lZCBpbnQgYXJtX3JldiA9IGNvcnRleF9hOV9yZXYoKTsKLQotCXN3aXRjaCAoYXJtX3JldikgewotCWNhc2UgTUlEUl9DT1JURVhfQTlfUjBQMToKLQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMxXzA7Ci0JCWJyZWFrOwotCWNhc2UgTUlEUl9DT1JURVhfQTlfUjFQMjoKLQkJc3dpdGNoIChyZWFkbChDT05UUk9MX0lEX0NPREUpKSB7Ci0JCWNhc2UgT01BUDQ0MzBfQ09OVFJPTF9JRF9DT0RFX0VTMl8wOgotCQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMyXzA7Ci0JCQlicmVhazsKLQkJY2FzZSBPTUFQNDQzMF9DT05UUk9MX0lEX0NPREVfRVMyXzE6Ci0JCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMTsKLQkJCWJyZWFrOwotCQljYXNlIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMjoKLQkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDMwX0VTMl8yOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTUlEUl9DT1JURVhfQTlfUjFQMzoKLQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMyXzM7Ci0JCWJyZWFrOwotCWNhc2UgTUlEUl9DT1JURVhfQTlfUjJQMTA6Ci0JCXN3aXRjaCAocmVhZGwoQ09OVFJPTF9JRF9DT0RFKSkgewotCQljYXNlIE9NQVA0NDYwX0NPTlRST0xfSURfQ09ERV9FUzFfMDoKLQkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDYwX0VTMV8wOwotCQkJYnJlYWs7Ci0JCWNhc2UgT01BUDQ0NjBfQ09OVFJPTF9JRF9DT0RFX0VTMV8xOgotCQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0NjBfRVMxXzE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDYwX0VTMV8wOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfU0lMSUNPTl9JRF9JTlZBTElEOwotCQlicmVhazsKLQl9Ci19Ci0KLXZvaWQgb21hcF9yZXZfc3RyaW5nKGNoYXIgKm9tYXA0X3Jldl9zdHJpbmcpCi17Ci0JdTMyIG9tYXA0X3JldiA9IG9tYXBfcmV2aXNpb24oKTsKLQl1MzIgb21hcDRfdmFyaWFudCA9IChvbWFwNF9yZXYgJiAweEZGRkYwMDAwKSA+PiAxNjsKLQl1MzIgbWFqb3JfcmV2ID0gKG9tYXA0X3JldiAmIDB4MDAwMDBGMDApID4+IDg7Ci0JdTMyIG1pbm9yX3JldiA9IChvbWFwNF9yZXYgJiAweDAwMDAwMEYwKSA+PiA0OwotCi0Jc3ByaW50ZihvbWFwNF9yZXZfc3RyaW5nLCAiT01BUCV4IEVTJXguJXgiLCBvbWFwNF92YXJpYW50LCBtYWpvcl9yZXYsCi0JCW1pbm9yX3Jldik7Ci19Ci0KLS8qCi0gKiBSb3V0aW5lOiBzX2luaXQKLSAqIERlc2NyaXB0aW9uOiBEb2VzIGVhcmx5IHN5c3RlbSBpbml0IG9mIHdhdGNoZG9nLCBtdXhpbmcsICBhbmRjbG9ja3MKLSAqIFdhdGNoZG9nIGRpc2FibGUgaXMgZG9uZSBhbHdheXMuIEZvciB0aGUgcmVzdCB3aGF0IGdldHMgZG9uZQotICogZGVwZW5kcyBvbiB0aGUgYm9vdCBtb2RlIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQKLSAqICAgMS4gc19pbml0IG9mIFNQTCBydW5uaW5nIGZyb20gU1JBTQotICogICAyLiBzX2luaXQgb2YgVS1Cb290IHJ1bm5pbmcgZnJvbSBGTEFTSAotICogICAzLiBzX2luaXQgb2YgVS1Cb290IGxvYWRlZCB0byBTRFJBTSBieSBTUEwKLSAqICAgNC4gc19pbml0IG9mIFUtQm9vdCBsb2FkZWQgdG8gU0RSQU0gYnkgUk9NIGNvZGUgdXNpbmcgdGhlCi0gKglDb25maWd1cmF0aW9uIEhlYWRlciBmZWF0dXJlCi0gKiBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIHRvIHNlZSB3aGF0IGdldHMKLSAqIGRvbmUgaW4gZWFjaCBvZiB0aGVzZSBjYXNlcwotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBTUkFNIHN0YWNrLgotICovCi12b2lkIHNfaW5pdCh2b2lkKQotewotCWluaXRfb21hcDRfcmV2aXNpb24oKTsKLQl3YXRjaGRvZ19pbml0KCk7Ci0Jc2V0X211eF9jb25mX3JlZ3MoKTsKLSNpZmRlZiBDT05GSUdfU1BMX0JVSUxECi0Jc2V0dXBfY2xvY2tzX2Zvcl9jb25zb2xlKCk7Ci0JcHJlbG9hZGVyX2NvbnNvbGVfaW5pdCgpOwotCWRvX2lvX3NldHRpbmdzKCk7Ci0jZW5kaWYKLQlwcmNtX2luaXQoKTsKLSNpZmRlZiBDT05GSUdfU1BMX0JVSUxECi0JLyogRm9yIHJlZ3VsYXIgdS1ib290IHNkcmFtX2luaXQoKSBpcyBjYWxsZWQgZnJvbSBkcmFtX2luaXQoKSAqLwotCXNkcmFtX2luaXQoKTsKLSNlbmRpZgotfQotCi0vKgotICogUm91dGluZTogd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZQotICogRGVzY3JpcHRpb246IFdhaXQgZm9yIHBvc3RpbmcgdG8gZmluaXNoIG9uIHdhdGNoZG9nCi0gKi8KLXZvaWQgd2FpdF9mb3JfY29tbWFuZF9jb21wbGV0ZShzdHJ1Y3Qgd2F0Y2hkb2cgKndkX2Jhc2UpCi17Ci0JaW50IHBlbmRpbmcgPSAxOwotCWRvIHsKLQkJcGVuZGluZyA9IHJlYWRsKCZ3ZF9iYXNlLT53d3BzKTsKLQl9IHdoaWxlIChwZW5kaW5nKTsKLX0KLQotLyoKLSAqIFJvdXRpbmU6IHdhdGNoZG9nX2luaXQKLSAqIERlc2NyaXB0aW9uOiBTaHV0IGRvd24gd2F0Y2ggZG9ncwotICovCi12b2lkIHdhdGNoZG9nX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3Qgd2F0Y2hkb2cgKndkMl9iYXNlID0gKHN0cnVjdCB3YXRjaGRvZyAqKVdEVDJfQkFTRTsKLQotCXdyaXRlbChXRF9VTkxPQ0sxLCAmd2QyX2Jhc2UtPndzcHIpOwotCXdhaXRfZm9yX2NvbW1hbmRfY29tcGxldGUod2QyX2Jhc2UpOwotCXdyaXRlbChXRF9VTkxPQ0syLCAmd2QyX2Jhc2UtPndzcHIpOwotfQotCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBTRFJBTSBzaXplIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtCi0gKiBiYXNlZCBvbiBETU0gc2VjdGlvbiBjb25maWd1cmF0aW9ucwotICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgc2l6ZSBvZiBtZW1vcnkgaW5zdGFsbGVkIG1heSBiZQotICogZGlmZmVyZW50IG9uIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgYm9hcmQKLSAqLwotdTMyIG9tYXA0X3NkcmFtX3NpemUodm9pZCkKLXsKLQl1MzIgc2VjdGlvbiwgaSwgdG90YWxfc2l6ZSA9IDAsIHNpemUsIGFkZHI7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlzZWN0aW9uCT0gX19yYXdfcmVhZGwoT01BUDQ0WFhfRE1NX0xJU0FfTUFQX0JBU0UgKyBpKjQpOwotCQlhZGRyID0gc2VjdGlvbiAmIE9NQVA0NFhYX1NZU19BRERSX01BU0s7Ci0JCS8qIFNlZSBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCAqLwotCQlpZiAoKGFkZHIgPj0gT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX1NUQVJUKSAmJgotCQkgICAgKGFkZHIgPCBPTUFQNDRYWF9EUkFNX0FERFJfU1BBQ0VfRU5EKSkgewotCQkJc2l6ZQk9ICgoc2VjdGlvbiAmIE9NQVA0NFhYX1NZU19TSVpFX01BU0spID4+Ci0JCQkJICAgT01BUDQ0WFhfU1lTX1NJWkVfU0hJRlQpOwotCQkJc2l6ZQk9IDEgPDwgc2l6ZTsKLQkJCXNpemUJKj0gU1pfMTZNOwotCQkJdG90YWxfc2l6ZSArPSBzaXplOwotCQl9Ci0JfQotCXJldHVybiB0b3RhbF9zaXplOwotfQotCi0KLS8qCi0gKiBSb3V0aW5lOiBkcmFtX2luaXQKLSAqIERlc2NyaXB0aW9uOiBzZXRzIHVib290cyBpZGVhIG9mIHNkcmFtIHNpemUKLSAqLwotaW50IGRyYW1faW5pdCh2b2lkKQotewotCXNkcmFtX2luaXQoKTsKLQlnZC0+cmFtX3NpemUgPSBvbWFwNF9zZHJhbV9zaXplKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFByaW50IGJvYXJkIGluZm9ybWF0aW9uCi0gKi8KLWludCBjaGVja2JvYXJkKHZvaWQpCi17Ci0JcHV0cyhzeXNpbmZvLmJvYXJkX3N0cmluZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHN0YXJ0X2FybWJvb3QuIFlvdSBjYW4gcmVsaWFibHkgdXNlIHN0YXRpYwotKiBkYXRhLiBBbnkgYm9vdC10aW1lIGZ1bmN0aW9uIHRoYXQgcmVxdWlyZSBzdGF0aWMgZGF0YSBzaG91bGQgYmUKLSogY2FsbGVkIGZyb20gaGVyZQotKi8KLWludCBhcmNoX2NwdV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZm5kZWYgQ09ORklHX1NZU19MMkNBQ0hFX09GRgotdm9pZCB2N19vdXRlcl9jYWNoZV9lbmFibGUodm9pZCkKLXsKLQlzZXRfcGwzMTBfY3RybF9yZWcoMSk7Ci19Ci0KLXZvaWQgdjdfb3V0ZXJfY2FjaGVfZGlzYWJsZSh2b2lkKQotewotCXNldF9wbDMxMF9jdHJsX3JlZygwKTsKLX0KLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19TWVNfRENBQ0hFX09GRgotdm9pZCBlbmFibGVfY2FjaGVzKHZvaWQpCi17Ci0JLyogRW5hYmxlIEQtY2FjaGUuIEktY2FjaGUgaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YXJ0LlMgKi8KLQlkY2FjaGVfZW5hYmxlKCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9jbG9ja3MuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9jbG9ja3MuYwppbmRleCAwOTViYTM5Li4wODg2ZjkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvY2xvY2tzLmMKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2Nsb2Nrcy5jCkBAIC01MCw3ICs1MCw3IEBACiAKIHN0cnVjdCBvbWFwNF9wcmNtX3JlZ3MgKmNvbnN0IHByY20gPSAoc3RydWN0IG9tYXA0X3ByY21fcmVncyAqKTB4NEEwMDQxMDA7CiAKLXN0YXRpYyBjb25zdCB1MzIgc3lzX2Nsa19hcnJheVs4XSA9IHsKK2NvbnN0IHUzMiBzeXNfY2xrX2FycmF5WzhdID0gewogCTEyMDAwMDAwLAkgICAgICAgLyogMTIgTUh6ICovCiAJMTMwMDAwMDAsCSAgICAgICAvKiAxMyBNSHogKi8KIAkxNjgwMDAwMCwJICAgICAgIC8qIDE2LjggTUh6ICovCkBAIC03OSwxNCArNzksMTQgQEAKIH07CiAKIC8qIGRwbGwgbG9ja2VkIGF0IDE1ODQgTUh6IC0gTVBVIGNsayBhdCA3OTIgTUh6KE9QUCBUdXJibyA0NDMwKSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBtcHVfZHBsbF9wYXJhbXNfMTU4NG1oeltOVU1fU1lTX0NMS1NdID0gewotCXs2NiwgMCwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJCS8qIDEyIE1IeiAgICovCi0Jezc5MiwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCi0JezMzMCwgNiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KLQl7MTY1LCAzLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxOS4yIE1IeiAqLwotCXszOTYsIDEyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNiBNSHogICAqLwotCXs4OCwgMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJCS8qIDI3IE1IeiAgICovCi0JezE2NSwgNywgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfQkJLyogMzguNCBNSHogKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgbXB1X2RwbGxfcGFyYW1zXzE2MDBtaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7MjAwLCAyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMiBNSHogICAqLworCXs4MDAsIDEyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXs2MTksIDEyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxNi44IE1IeiAqLworCXsxMjUsIDIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezQwMCwgMTIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI2IE1IeiAgICovCisJezgwMCwgMjYsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI3IE1IeiAgICovCisJezEyNSwgNSwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xfQkJLyogMzguNCBNSHogKi8KIH07CiAKIC8qIGRwbGwgbG9ja2VkIGF0IDEyMDAgTUh6IC0gTVBVIGNsayBhdCA2MDAgTUh6ICovCkBAIC0xNjgsNyArMTY4LDYgQEAKIAk3NTAsIDAsIDEsIDEsIC0xLCAtMSwgLTEsIC0xCiB9OwogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgdXNiX2RwbGxfcGFyYW1zXzE5MjBtaHpbTlVNX1NZU19DTEtTXSA9IHsKIAl7ODAsIDAsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCQkvKiAxMiBNSHogICAqLwogCXs5NjAsIDEyLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLwpAQCAtMTc5LDk4ICsxNzgsMTAgQEAKIAl7MjUsIDAsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0JCS8qIDM4LjQgTUh6ICovCiB9OwogCi1zdGF0aWMgaW5saW5lIHUzMiBfX2dldF9zeXNfY2xrX2luZGV4KHZvaWQpCi17Ci0JdTMyIGluZDsKLQkvKgotCSAqIEZvciBFUzEgdGhlIFJPTSBjb2RlIGNhbGlicmF0aW9uIG9mIHN5cyBjbG9jayBpcyBub3QgcmVsaWFibGUKLQkgKiBkdWUgdG8gaHcgaXNzdWUuIFNvLCB1c2UgaGFyZC1jb2RlZCB2YWx1ZS4gSWYgdGhpcyB2YWx1ZSBpcyBub3QKLQkgKiBjb3JyZWN0IGZvciBhbnkgYm9hcmQgb3Zlci1yaWRlIHRoaXMgZnVuY3Rpb24gaW4gYm9hcmQgZmlsZQotCSAqIEZyb20gRVMyLjAgb253YXJkcyB5b3Ugd2lsbCBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tCi0JICogQ01fU1lTX0NMS1NFTAotCSAqLwotCWlmIChvbWFwX3JldmlzaW9uKCkgPT0gT01BUDQ0MzBfRVMxXzApCi0JCWluZCA9IE9NQVBfU1lTX0NMS19JTkRfMzhfNF9NSFo7Ci0JZWxzZSB7Ci0JCS8qIFNZU19DTEtTRUwgLSAxIHRvIG1hdGNoIHRoZSBkcGxsIHBhcmFtIGFycmF5IGluZGljZXMgKi8KLQkJaW5kID0gKHJlYWRsKCZwcmNtLT5jbV9zeXNfY2xrc2VsKSAmCi0JCQlDTV9TWVNfQ0xLU0VMX1NZU19DTEtTRUxfTUFTSykgLSAxOwotCX0KLQlyZXR1cm4gaW5kOwotfQotCi11MzIgZ2V0X3N5c19jbGtfaW5kZXgodm9pZCkKLQlfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoIl9fZ2V0X3N5c19jbGtfaW5kZXgiKSkpOwotCi11MzIgZ2V0X3N5c19jbGtfZnJlcSh2b2lkKQotewotCXU4IGluZGV4ID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKLQlyZXR1cm4gc3lzX2Nsa19hcnJheVtpbmRleF07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19ieXBhc3NfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCi17Ci0Jc3RydWN0IGRwbGxfcmVncyAqZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOwotCi0JY2xyc2V0Yml0c19sZTMyKCZkcGxsX3JlZ3MtPmNtX2Nsa21vZGVfZHBsbCwKLQkJCUNNX0NMS01PREVfRFBMTF9EUExMX0VOX01BU0ssCi0JCQlEUExMX0VOX0ZBU1RfUkVMT0NLX0JZUEFTUyA8PAotCQkJQ01fQ0xLTU9ERV9EUExMX0VOX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2J5cGFzcyh1MzIgKmNvbnN0IGJhc2UpCit2b2lkIHNldHVwX3Bvc3RfZGl2aWRlcnModTMyICpjb25zdCBiYXNlLCBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgZHBsbF9yZWdzICpjb25zdCBkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7CiAKLQlpZiAoIXdhaXRfb25fdmFsdWUoU1RfRFBMTF9DTEtfTUFTSywgMCwgJmRwbGxfcmVncy0+Y21faWRsZXN0X2RwbGwsCi0JCQkJTERFTEFZKSkgewotCQlwcmludGYoIkJ5cGFzc2luZyBEUExMIGZhaWxlZCAlcFxuIiwgYmFzZSk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9fbG9ja19kcGxsKHUzMiAqY29uc3QgYmFzZSkKLXsKLQlzdHJ1Y3QgZHBsbF9yZWdzICpjb25zdCBkcGxsX3JlZ3MgPSAoc3RydWN0IGRwbGxfcmVncyAqKWJhc2U7Ci0KLQljbHJzZXRiaXRzX2xlMzIoJmRwbGxfcmVncy0+Y21fY2xrbW9kZV9kcGxsLAotCQkgICAgICBDTV9DTEtNT0RFX0RQTExfRFBMTF9FTl9NQVNLLAotCQkgICAgICBEUExMX0VOX0xPQ0sgPDwgQ01fQ0xLTU9ERV9EUExMX0VOX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2xvY2sodTMyICpjb25zdCBiYXNlKQotewotCXN0cnVjdCBkcGxsX3JlZ3MgKmNvbnN0IGRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKLQotCWlmICghd2FpdF9vbl92YWx1ZShTVF9EUExMX0NMS19NQVNLLCBTVF9EUExMX0NMS19NQVNLLAotCQkmZHBsbF9yZWdzLT5jbV9pZGxlc3RfZHBsbCwgTERFTEFZKSkgewotCQlwcmludGYoIkRQTEwgbG9ja2luZyBmYWlsZWQgZm9yICVwXG4iLCBiYXNlKTsKLQkJaGFuZygpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZG9fc2V0dXBfZHBsbCh1MzIgKmNvbnN0IGJhc2UsIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zLAotCQkJCXU4IGxvY2spCi17Ci0JdTMyIHRlbXA7Ci0Jc3RydWN0IGRwbGxfcmVncyAqY29uc3QgZHBsbF9yZWdzID0gKHN0cnVjdCBkcGxsX3JlZ3MgKiliYXNlOwotCi0JYnlwYXNzX2RwbGwoYmFzZSk7Ci0KLQkvKiBTZXQgTSAmIE4gKi8KLQl0ZW1wID0gcmVhZGwoJmRwbGxfcmVncy0+Y21fY2xrc2VsX2RwbGwpOwotCi0JdGVtcCAmPSB+Q01fQ0xLU0VMX0RQTExfTV9NQVNLOwotCXRlbXAgfD0gKHBhcmFtcy0+bSA8PCBDTV9DTEtTRUxfRFBMTF9NX1NISUZUKSAmIENNX0NMS1NFTF9EUExMX01fTUFTSzsKLQotCXRlbXAgJj0gfkNNX0NMS1NFTF9EUExMX05fTUFTSzsKLQl0ZW1wIHw9IChwYXJhbXMtPm4gPDwgQ01fQ0xLU0VMX0RQTExfTl9TSElGVCkgJiBDTV9DTEtTRUxfRFBMTF9OX01BU0s7Ci0KLQl3cml0ZWwodGVtcCwgJmRwbGxfcmVncy0+Y21fY2xrc2VsX2RwbGwpOwotCi0JLyogTG9jayAqLwotCWlmIChsb2NrKQotCQlkb19sb2NrX2RwbGwoYmFzZSk7Ci0KIAkvKiBTZXR1cCBwb3N0LWRpdmlkZXJzICovCiAJaWYgKHBhcmFtcy0+bTIgPj0gMCkKIAkJd3JpdGVsKHBhcmFtcy0+bTIsICZkcGxsX3JlZ3MtPmNtX2Rpdl9tMl9kcGxsKTsKQEAgLTI4NCwxMCArMTk1LDI5IEBACiAJCXdyaXRlbChwYXJhbXMtPm02LCAmZHBsbF9yZWdzLT5jbV9kaXZfbTZfZHBsbCk7CiAJaWYgKHBhcmFtcy0+bTcgPj0gMCkKIAkJd3JpdGVsKHBhcmFtcy0+bTcsICZkcGxsX3JlZ3MtPmNtX2Rpdl9tN19kcGxsKTsKK30KIAotCS8qIFdhaXQgdGlsbCB0aGUgRFBMTCBsb2NrcyAqLwotCWlmIChsb2NrKQotCQl3YWl0X2Zvcl9sb2NrKGJhc2UpOworLyoKKyAqIExvY2sgTVBVIGRwbGwKKyAqCisgKiBSZXN1bHRpbmcgTVBVIGZyZXF1ZW5jaWVzOgorICogNDQzMCBFUzEuMAk6IDYwMCBNSHoKKyAqIDQ0MzAgRVMyLngJOiA3OTIgTUh6IChPUFAgVHVyYm8pCisgKiA0NDYwCQk6IDkyMCBNSHogKE9QUCBUdXJibykgLSBEQ0MgZGlzYWJsZWQKKyAqLworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfbXB1X2RwbGxfcGFyYW1zKHZvaWQpCit7CisJdTMyIG9tYXBfcmV2LCBzeXNjbGtfaW5kOworCisJb21hcF9yZXYgPSBvbWFwX3JldmlzaW9uKCk7CisJc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisKKwlpZiAob21hcF9yZXYgPT0gT01BUDQ0MzBfRVMxXzApCisJCXJldHVybiAmbXB1X2RwbGxfcGFyYW1zXzEyMDBtaHpbc3lzY2xrX2luZF07CisJZWxzZSBpZiAob21hcF9yZXYgPCBPTUFQNDQ2MF9FUzFfMCkKKwkJcmV0dXJuICZtcHVfZHBsbF9wYXJhbXNfMTYwMG1oeltzeXNjbGtfaW5kXTsKKwllbHNlCisJCXJldHVybiAmbXB1X2RwbGxfcGFyYW1zXzE4NDBtaHpbc3lzY2xrX2luZF07CiB9CiAKIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X2NvcmVfZHBsbF9wYXJhbXModm9pZCkKQEAgLTMwNiwyMjggKzIzNiwzMyBAQAogCX0KIH0KIAotdTMyIG9tYXA0X2Rkcl9jbGsodm9pZCkKKworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfcGVyX2RwbGxfcGFyYW1zKHZvaWQpCiB7Ci0JdTMyIGRkcl9jbGssIHN5c19jbGtfa2h6OwotCWNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqY29yZV9kcGxsX3BhcmFtczsKLQotCXN5c19jbGtfa2h6ID0gZ2V0X3N5c19jbGtfZnJlcSgpIC8gMTAwMDsKLQotCWNvcmVfZHBsbF9wYXJhbXMgPSBnZXRfY29yZV9kcGxsX3BhcmFtcygpOwotCi0JZGVidWcoInN5c19jbGsgJWRcbiAiLCBzeXNfY2xrX2toeiAqIDEwMDApOwotCi0JLyogRmluZCBDb3JlIERQTEwgbG9ja2VkIGZyZXF1ZW5jeSBmaXJzdCAqLwotCWRkcl9jbGsgPSBzeXNfY2xrX2toeiAqIDIgKiBjb3JlX2RwbGxfcGFyYW1zLT5tIC8KLQkJCShjb3JlX2RwbGxfcGFyYW1zLT5uICsgMSk7Ci0JLyoKLQkgKiBERFIgZnJlcXVlbmN5IGlzIFBIWV9ST09UX0NMSy8yCi0JICogUEhZX1JPT1RfQ0xLID0gRmRwbGwvMi9NMgotCSAqLwotCWRkcl9jbGsgPSBkZHJfY2xrIC8gNCAvIGNvcmVfZHBsbF9wYXJhbXMtPm0yOwotCi0JZGRyX2NsayAqPSAxMDAwOwkvKiBjb252ZXJ0IHRvIEh6ICovCi0JZGVidWcoImRkcl9jbGsgJWRcbiAiLCBkZHJfY2xrKTsKLQotCXJldHVybiBkZHJfY2xrOworCXUzMiBzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlyZXR1cm4gJnBlcl9kcGxsX3BhcmFtc18xNTM2bWh6W3N5c2Nsa19pbmRdOwogfQogCi0vKgotICogTG9jayBNUFUgZHBsbAotICoKLSAqIFJlc3VsdGluZyBNUFUgZnJlcXVlbmNpZXM6Ci0gKiA0NDMwIEVTMS4wCTogNjAwIE1IegotICogNDQzMCBFUzIueAk6IDc5MiBNSHogKE9QUCBUdXJibykKLSAqIDQ0NjAJCTogOTIwIE1IeiAoT1BQIFR1cmJvKSAtIERDQyBkaXNhYmxlZAotICovCi12b2lkIGNvbmZpZ3VyZV9tcHVfZHBsbCh2b2lkKQorY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfaXZhX2RwbGxfcGFyYW1zKHZvaWQpCiB7Ci0JY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXM7Ci0Jc3RydWN0IGRwbGxfcmVncyAqbXB1X2RwbGxfcmVnczsKLQl1MzIgb21hcDRfcmV2LCBzeXNjbGtfaW5kOwotCi0Jb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOwotCXN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOwotCi0JaWYgKG9tYXA0X3JldiA9PSBPTUFQNDQzMF9FUzFfMCkKLQkJcGFyYW1zID0gJm1wdV9kcGxsX3BhcmFtc18xMjAwbWh6W3N5c2Nsa19pbmRdOwotCWVsc2UgaWYgKG9tYXA0X3JldiA8IE9NQVA0NDYwX0VTMV8wKQotCQlwYXJhbXMgPSAmbXB1X2RwbGxfcGFyYW1zXzE1ODRtaHpbc3lzY2xrX2luZF07Ci0JZWxzZQotCQlwYXJhbXMgPSAmbXB1X2RwbGxfcGFyYW1zXzE4NDBtaHpbc3lzY2xrX2luZF07Ci0KLQkvKiBEQ0MgYW5kIGNsb2NrIGRpdmlkZXIgc2V0dGluZ3MgZm9yIDQ0NjAgKi8KLQlpZiAob21hcDRfcmV2ID49IE9NQVA0NDYwX0VTMV8wKSB7Ci0JCW1wdV9kcGxsX3JlZ3MgPQotCQkJKHN0cnVjdCBkcGxsX3JlZ3MgKikmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX21wdTsKLQkJYnlwYXNzX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9tcHUpOwotCQljbHJiaXRzX2xlMzIoJnByY20tPmNtX21wdV9tcHVfY2xrY3RybCwKLQkJCU1QVV9DTEtDVFJMX0NMS1NFTF9FTUlGX0RJVl9NT0RFX01BU0spOwotCQlzZXRiaXRzX2xlMzIoJnByY20tPmNtX21wdV9tcHVfY2xrY3RybCwKLQkJCU1QVV9DTEtDVFJMX0NMS1NFTF9BQkVfRElWX01PREVfTUFTSyk7Ci0JCWNscmJpdHNfbGUzMigmbXB1X2RwbGxfcmVncy0+Y21fY2xrc2VsX2RwbGwsCi0JCQlDTV9DTEtTRUxfRENDX0VOX01BU0spOwotCX0KLQotCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9tcHUsIHBhcmFtcywgRFBMTF9MT0NLKTsKLQlkZWJ1ZygiTVBVIERQTEwgbG9ja2VkXG4iKTsKKwl1MzIgc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7CisJcmV0dXJuICZpdmFfZHBsbF9wYXJhbXNfMTg2Mm1oeltzeXNjbGtfaW5kXTsKIH0KIAotc3RhdGljIHZvaWQgc2V0dXBfZHBsbHModm9pZCkKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X3VzYl9kcGxsX3BhcmFtcyh2b2lkKQogewotCXUzMiBzeXNjbGtfaW5kLCB0ZW1wOwotCWNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zOwotCWRlYnVnKCJzZXR1cF9kcGxsc1xuIik7Ci0KLQlzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKLQotCS8qIENPUkUgZHBsbCAqLwotCXBhcmFtcyA9IGdldF9jb3JlX2RwbGxfcGFyYW1zKCk7CS8qIGRlZmF1bHQgLSBzYWZlc3QgKi8KLQkvKgotCSAqIERvIG5vdCBsb2NrIHRoZSBjb3JlIERQTEwgbm93LiBKdXN0IHNldCBpdCB1cC4KLQkgKiBDb3JlIERQTEwgd2lsbCBiZSBsb2NrZWQgYWZ0ZXIgc2V0dGluZyB1cCBFTUlGCi0JICogdXNpbmcgdGhlIEZSRVFfVVBEQVRFIG1ldGhvZChmcmVxX3VwZGF0ZV9jb3JlKCkpCi0JICovCi0JZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2NvcmUsIHBhcmFtcywgRFBMTF9OT19MT0NLKTsKLQkvKiBTZXQgdGhlIHJhdGlvcyBmb3IgQ09SRV9DTEssIEwzX0NMSywgTDRfQ0xLICovCi0JdGVtcCA9IChDTEtTRUxfQ09SRV9YMl9ESVZfMSA8PCBDTEtTRUxfQ09SRV9TSElGVCkgfAotCSAgICAoQ0xLU0VMX0wzX0NPUkVfRElWXzIgPDwgQ0xLU0VMX0wzX1NISUZUKSB8Ci0JICAgIChDTEtTRUxfTDRfTDNfRElWXzIgPDwgQ0xLU0VMX0w0X1NISUZUKTsKLQl3cml0ZWwodGVtcCwgJnByY20tPmNtX2Nsa3NlbF9jb3JlKTsKLQlkZWJ1ZygiQ29yZSBEUExMIGNvbmZpZ3VyZWRcbiIpOwotCi0JLyogbG9jayBQRVIgZHBsbCAqLwotCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9wZXIsCi0JCQkmcGVyX2RwbGxfcGFyYW1zXzE1MzZtaHpbc3lzY2xrX2luZF0sIERQTExfTE9DSyk7Ci0JZGVidWcoIlBFUiBEUExMIGxvY2tlZFxuIik7Ci0KLQkvKiBNUFUgZHBsbCAqLwotCWNvbmZpZ3VyZV9tcHVfZHBsbCgpOworCXUzMiBzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlyZXR1cm4gJnVzYl9kcGxsX3BhcmFtc18xOTIwbWh6W3N5c2Nsa19pbmRdOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9ub25fZXNzZW50aWFsX2RwbGxzKHZvaWQpCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9hYmVfZHBsbF9wYXJhbXModm9pZCkKIHsKLQl1MzIgc3lzX2Nsa19raHosIGFiZV9yZWZfY2xrOwotCXUzMiBzeXNjbGtfaW5kLCBzZF9kaXYsIG51bSwgZGVuOwotCWNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zOwotCi0Jc3lzY2xrX2luZCA9IGdldF9zeXNfY2xrX2luZGV4KCk7Ci0Jc3lzX2Nsa19raHogPSBnZXRfc3lzX2Nsa19mcmVxKCkgLyAxMDAwOwotCi0JLyogSVZBICovCi0JY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9ieXBjbGtfZHBsbF9pdmEsCi0JCUNNX0JZUENMS19EUExMX0lWQV9DTEtTRUxfTUFTSywgRFBMTF9JVkFfQ0xLU0VMX0NPUkVfWDJfRElWXzIpOwotCi0JZG9fc2V0dXBfZHBsbCgmcHJjbS0+Y21fY2xrbW9kZV9kcGxsX2l2YSwKLQkJCSZpdmFfZHBsbF9wYXJhbXNfMTg2Mm1oeltzeXNjbGtfaW5kXSwgRFBMTF9MT0NLKTsKLQotCS8qCi0JICogVVNCOgotCSAqIFVTQiBkcGxsIGlzIEotdHlwZS4gTmVlZCB0byBzZXQgRFBMTF9TRF9ESVYgZm9yIGppdHRlciBjb3JyZWN0aW9uCi0JICogRFBMTF9TRF9ESVYgPSBDRUlMSU5HIChbRFBMTF9NVUxULyhEUExMX0RJVisxKV0qIENMS0lOUCAvIDI1MCkKLQkgKiAgICAgIC0gd2hlcmUgQ0xLSU5QIGlzIHN5c19jbGsgaW4gTUh6Ci0JICogVXNlIENMS0lOUCBpbiBLSHogYW5kIGFkanVzdCB0aGUgZGVub21pbmF0b3IgYWNjb3JkaW5nbHkgc28KLQkgKiB0aGF0IHdlIGhhdmUgZW5vdWdoIGFjY3VyYWN5IGFuZCBhdCB0aGUgc2FtZSB0aW1lIG5vIG92ZXJmbG93Ci0JICovCi0JcGFyYW1zID0gJnVzYl9kcGxsX3BhcmFtc18xOTIwbWh6W3N5c2Nsa19pbmRdOwotCW51bSA9IHBhcmFtcy0+bSAqIHN5c19jbGtfa2h6OwotCWRlbiA9IChwYXJhbXMtPm4gKyAxKSAqIDI1MCAqIDEwMDA7Ci0JbnVtICs9IGRlbiAtIDE7Ci0Jc2RfZGl2ID0gbnVtIC8gZGVuOwotCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2xrc2VsX2RwbGxfdXNiLAotCQkJQ01fQ0xLU0VMX0RQTExfRFBMTF9TRF9ESVZfTUFTSywKLQkJCXNkX2RpdiA8PCBDTV9DTEtTRUxfRFBMTF9EUExMX1NEX0RJVl9TSElGVCk7Ci0KLQkvKiBOb3cgc2V0dXAgdGhlIGRwbGwgd2l0aCB0aGUgcmVndWxhciBmdW5jdGlvbiAqLwotCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF91c2IsIHBhcmFtcywgRFBMTF9MT0NLKTsKLQotI2lmZGVmIENPTkZJR19TWVNfT01BUDRfQUJFX1NZU0NLCi0JcGFyYW1zID0gJmFiZV9kcGxsX3BhcmFtc19zeXNjbGtfMTk2NjA4a2h6W3N5c2Nsa19pbmRdOwotCWFiZV9yZWZfY2xrID0gQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9TWVNDTEs7CisjaWZkZWYgQ09ORklHX1NZU19PTUFQX0FCRV9TWVNDSworCXUzMiBzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlyZXR1cm4gJmFiZV9kcGxsX3BhcmFtc19zeXNjbGtfMTk2NjA4a2h6W3N5c2Nsa19pbmRdOwogI2Vsc2UKLQlwYXJhbXMgPSAmYWJlX2RwbGxfcGFyYW1zXzMya18xOTY2MDhraHo7Ci0JYWJlX3JlZl9jbGsgPSBDTV9BQkVfUExMX1JFRl9DTEtTRUxfQ0xLU0VMXzMyS0NMSzsKLQkvKgotCSAqIFdlIG5lZWQgdG8gZW5hYmxlIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zIHRvIGFjaGlldmUKLQkgKiAxOTYuNjA4TUh6IGZyb20gMzI3NjggSHoKLQkgKi8KLQlzZXRiaXRzX2xlMzIoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9hYmUsCi0JCQlDTV9DTEtNT0RFX0RQTExfRFJJRlRHVUFSRF9FTl9NQVNLfAotCQkJQ01fQ0xLTU9ERV9EUExMX1JFTE9DS19SQU1QX0VOX01BU0t8Ci0JCQlDTV9DTEtNT0RFX0RQTExfTFBNT0RFX0VOX01BU0t8Ci0JCQlDTV9DTEtNT0RFX0RQTExfUkVHTTRYRU5fTUFTSyk7Ci0JLyogU3BlbmQgNCBSRUZDTEsgY3ljbGVzIGF0IGVhY2ggc3RhZ2UgKi8KLQljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9hYmUsCi0JCQlDTV9DTEtNT0RFX0RQTExfUkFNUF9SQVRFX01BU0ssCi0JCQkxIDw8IENNX0NMS01PREVfRFBMTF9SQU1QX1JBVEVfU0hJRlQpOworCXJldHVybiAmYWJlX2RwbGxfcGFyYW1zXzMya18xOTY2MDhraHo7CiAjZW5kaWYKLQotCS8qIFNlbGVjdCB0aGUgcmlnaHQgcmVmZXJlbmNlIGNsayAqLwotCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fYWJlX3BsbF9yZWZfY2xrc2VsLAotCQkJQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9NQVNLLAotCQkJYWJlX3JlZl9jbGsgPDwgQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9TSElGVCk7Ci0JLyogTG9jayB0aGUgZHBsbCAqLwotCWRvX3NldHVwX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9hYmUsIHBhcmFtcywgRFBMTF9MT0NLKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fc2NhbGVfdHBzNjIzNjEodTMyIHJlZywgdTMyIHZvbHRfbXYpCi17Ci0JdTMyIHRlbXAsIHN0ZXA7Ci0KLQlzdGVwID0gdm9sdF9tdiAtIFRQUzYyMzYxX0JBU0VfVk9MVF9NVjsKLQlzdGVwIC89IDEwOwotCi0JLyoKLQkgKiBTZWxlY3QgU0VUMSBpbiBUUFM2MjM2MToKLQkgKiBWU0VMMSBpcyBncm91bmRlZCBvbiBib2FyZC4gU28gdGhlIGZvbGxvd2luZyBzZWxlY3RzCi0JICogVlNFTDEgPSAwIGFuZCBWU0VMMCA9IDEKLQkgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoVFBTNjIzNjFfVlNFTDBfR1BJTywgMCk7Ci0JZ3Bpb19zZXRfdmFsdWUoVFBTNjIzNjFfVlNFTDBfR1BJTywgMSk7Ci0KLQl0ZW1wID0gVFBTNjIzNjFfSTJDX1NMQVZFX0FERFIgfAotCSAgICAocmVnIDw8IFBSTV9WQ19WQUxfQllQQVNTX1JFR0FERFJfU0hJRlQpIHwKLQkgICAgKHN0ZXAgPDwgUFJNX1ZDX1ZBTF9CWVBBU1NfREFUQV9TSElGVCkgfAotCSAgICBQUk1fVkNfVkFMX0JZUEFTU19WQUxJRF9CSVQ7Ci0JZGVidWcoImRvX3NjYWxlX3RwczYyMzYxOiB2b2x0IC0gJWQgc3RlcCAtIDB4JXhcbiIsIHZvbHRfbXYsIHN0ZXApOwotCi0Jd3JpdGVsKHRlbXAsICZwcmNtLT5wcm1fdmNfdmFsX2J5cGFzcyk7Ci0JaWYgKCF3YWl0X29uX3ZhbHVlKFBSTV9WQ19WQUxfQllQQVNTX1ZBTElEX0JJVCwgMCwKLQkJCQkmcHJjbS0+cHJtX3ZjX3ZhbF9ieXBhc3MsIExERUxBWSkpIHsKLQkJcHV0cygiU2NhbGluZyB2b2x0YWdlIGZhaWxlZCBmb3IgdmRkX21wdSBmcm9tIFRQU1xuIik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19zY2FsZV92Y29yZSh1MzIgdmNvcmVfcmVnLCB1MzIgdm9sdF9tdikKLXsKLQl1MzIgdGVtcCwgb2Zmc2V0X2NvZGU7Ci0JdTMyIHN0ZXAgPSAxMjY2MDsgLyogMTIuNjYgbVYgcmVwcmVzZW50ZWQgaW4gdVYgKi8KLQl1MzIgb2Zmc2V0ID0gdm9sdF9tdjsKLQotCS8qIGNvbnZlcnQgdG8gdVYgZm9yIGJldHRlciBhY2N1cmFjeSBpbiB0aGUgY2FsY3VsYXRpb25zICovCi0Jb2Zmc2V0ICo9IDEwMDA7Ci0KLQlpZiAob21hcF9yZXZpc2lvbigpID09IE9NQVA0NDMwX0VTMV8wKQotCQlvZmZzZXQgLT0gUEhPRU5JWF9TTVBTX0JBU0VfVk9MVF9TVERfTU9ERV9VVjsKLQllbHNlCi0JCW9mZnNldCAtPSBQSE9FTklYX1NNUFNfQkFTRV9WT0xUX1NURF9NT0RFX1dJVEhfT0ZGU0VUX1VWOwotCi0Jb2Zmc2V0X2NvZGUgPSAob2Zmc2V0ICsgc3RlcCAtIDEpIC8gc3RlcDsKLQkvKiBUaGUgY29kZSBzdGFydHMgYXQgMSBub3QgMCAqLwotCW9mZnNldF9jb2RlKys7Ci0KLQlkZWJ1ZygiZG9fc2NhbGVfdmNvcmU6IHZvbHQgLSAlZCBvZmZzZXRfY29kZSAtIDB4JXhcbiIsIHZvbHRfbXYsCi0JCW9mZnNldF9jb2RlKTsKLQotCXRlbXAgPSBTTVBTX0kyQ19TTEFWRV9BRERSIHwKLQkgICAgKHZjb3JlX3JlZyA8PCBQUk1fVkNfVkFMX0JZUEFTU19SRUdBRERSX1NISUZUKSB8Ci0JICAgIChvZmZzZXRfY29kZSA8PCBQUk1fVkNfVkFMX0JZUEFTU19EQVRBX1NISUZUKSB8Ci0JICAgIFBSTV9WQ19WQUxfQllQQVNTX1ZBTElEX0JJVDsKLQl3cml0ZWwodGVtcCwgJnByY20tPnBybV92Y192YWxfYnlwYXNzKTsKLQlpZiAoIXdhaXRfb25fdmFsdWUoUFJNX1ZDX1ZBTF9CWVBBU1NfVkFMSURfQklULCAwLAotCQkJCSZwcmNtLT5wcm1fdmNfdmFsX2J5cGFzcywgTERFTEFZKSkgewotCQlwcmludGYoIlNjYWxpbmcgdm9sdGFnZSBmYWlsZWQgZm9yIDB4JXhcbiIsIHZjb3JlX3JlZyk7Ci0JfQogfQogCiAvKgpAQCAtNTM2LDMyICsyNzEsMTYgQEAKICAqIGVuYWJsZWQgaW4gYm9vdGxvYWRlci4gVm9sdGFnZSBpbml0aWFsaXphdGlvbiBpbiB0aGUga2VybmVsIHdpbGwgc2V0CiAgKiB0aGVzZSB0byB0aGUgbm9taW5hbCB2YWx1ZXMgYWZ0ZXIgZW5hYmxpbmcgU21hcnQtUmVmbGV4CiAgKi8KLXN0YXRpYyB2b2lkIHNjYWxlX3Zjb3Jlcyh2b2lkKQordm9pZCBzY2FsZV92Y29yZXModm9pZCkKIHsKLQl1MzIgdm9sdCwgc3lzX2Nsa19raHosIGN5Y2xlc19oaSwgY3ljbGVzX2xvdywgdGVtcCwgb21hcDRfcmV2OworCXUzMiB2b2x0LCBvbWFwX3JldjsKIAotCXN5c19jbGtfa2h6ID0gZ2V0X3N5c19jbGtfZnJlcSgpIC8gMTAwMDsKKwlzZXR1cF9zcmkyYygpOwogCi0JLyoKLQkgKiBTZXR1cCB0aGUgZGVkaWNhdGVkIEkyQyBjb250cm9sbGVyIGZvciBWb2x0YWdlIENvbnRyb2wKLQkgKiBJMkMgY2xrIC0gaGlnaCBwZXJpb2QgNDAlIGxvdyBwZXJpb2QgNjAlCi0JICovCi0JY3ljbGVzX2hpID0gc3lzX2Nsa19raHogKiA0IC8gUFJNX1ZDX0kyQ19DSEFOTkVMX0ZSRVFfS0haIC8gMTA7Ci0JY3ljbGVzX2xvdyA9IHN5c19jbGtfa2h6ICogNiAvIFBSTV9WQ19JMkNfQ0hBTk5FTF9GUkVRX0tIWiAvIDEwOwotCS8qIHZhbHVlcyB0byBiZSBzZXQgaW4gcmVnaXN0ZXIgLSBsZXNzIGJ5IDUgJiA3IHJlc3BlY3RpdmVseSAqLwotCWN5Y2xlc19oaSAtPSA1OwotCWN5Y2xlc19sb3cgLT0gNzsKLQl0ZW1wID0gKGN5Y2xlc19oaSA8PCBQUk1fVkNfQ0ZHX0kyQ19DTEtfU0NMSF9TSElGVCkgfAotCSAgICAgICAoY3ljbGVzX2xvdyA8PCBQUk1fVkNfQ0ZHX0kyQ19DTEtfU0NMTF9TSElGVCk7Ci0Jd3JpdGVsKHRlbXAsICZwcmNtLT5wcm1fdmNfY2ZnX2kyY19jbGspOwotCi0JLyogRGlzYWJsZSBoaWdoIHNwZWVkIG1vZGUgYW5kIGFsbCBhZHZhbmNlZCBmZWF0dXJlcyAqLwotCXdyaXRlbCgweDAsICZwcmNtLT5wcm1fdmNfY2ZnX2kyY19tb2RlKTsKLQotCW9tYXA0X3JldiA9IG9tYXBfcmV2aXNpb24oKTsKKwlvbWFwX3JldiA9IG9tYXBfcmV2aXNpb24oKTsKIAkvKiBUUFMgLSBzdXBwbGllcyB2ZGRfbXB1IG9uIDQ0NjAgKi8KLQlpZiAob21hcDRfcmV2ID49IE9NQVA0NDYwX0VTMV8wKSB7Ci0JCXZvbHQgPSAxNDMwOworCWlmIChvbWFwX3JldiA+PSBPTUFQNDQ2MF9FUzFfMCkgeworCQl2b2x0ID0gMTMxMzsKIAkJZG9fc2NhbGVfdHBzNjIzNjEoVFBTNjIzNjFfUkVHX0FERFJfU0VUMSwgdm9sdCk7CiAJfQogCkBAIC01NzYsOCArMjk1LDggQEAKIAkgKgogCSAqIDQ0NjAgOiBzdXBwbGllcyB2ZGRfY29yZQogCSAqLwotCWlmIChvbWFwNF9yZXYgPCBPTUFQNDQ2MF9FUzFfMCkgewotCQl2b2x0ID0gMTQxNzsKKwlpZiAob21hcF9yZXYgPCBPTUFQNDQ2MF9FUzFfMCkgeworCQl2b2x0ID0gMTMyNTsKIAkJZG9fc2NhbGVfdmNvcmUoU01QU19SRUdfQUREUl9WQ09SRTEsIHZvbHQpOwogCX0gZWxzZSB7CiAJCXZvbHQgPSAxMjAwOwpAQCAtNTkzLDU1ICszMTIsMTggQEAKIAkgKiA0NDMwIDogc3VwcGxpZXMgdmRkX2NvcmUKIAkgKiA0NDYwIDogbm90IGNvbm5lY3RlZAogCSAqLwotCWlmIChvbWFwNF9yZXYgPCBPTUFQNDQ2MF9FUzFfMCkgeworCWlmIChvbWFwX3JldiA8IE9NQVA0NDYwX0VTMV8wKSB7CiAJCXZvbHQgPSAxMjAwOwogCQlkb19zY2FsZV92Y29yZShTTVBTX1JFR19BRERSX1ZDT1JFMywgdm9sdCk7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2Nsb2NrX2RvbWFpbih1MzIgKmNvbnN0IGNsa2N0cmxfcmVnLCB1MzIgZW5hYmxlX21vZGUpCi17Ci0JY2xyc2V0Yml0c19sZTMyKGNsa2N0cmxfcmVnLCBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9NQVNLLAotCQkJZW5hYmxlX21vZGUgPDwgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU0hJRlQpOwotCWRlYnVnKCJFbmFibGUgY2xvY2sgZG9tYWluIC0gJXBcbiIsIGNsa2N0cmxfcmVnKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX2Nsa19lbmFibGUodTMyICpjbGtjdHJsX2FkZHIpCi17Ci0JdTMyIGNsa2N0cmwsIGlkbGVzdCA9IE1PRFVMRV9DTEtDVFJMX0lETEVTVF9ESVNBQkxFRDsKLQl1MzIgYm91bmQgPSBMREVMQVk7Ci0KLQl3aGlsZSAoKGlkbGVzdCA9PSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfRElTQUJMRUQpIHx8Ci0JCShpZGxlc3QgPT0gTU9EVUxFX0NMS0NUUkxfSURMRVNUX1RSQU5TSVRJT05JTkcpKSB7Ci0KLQkJY2xrY3RybCA9IHJlYWRsKGNsa2N0cmxfYWRkcik7Ci0JCWlkbGVzdCA9IChjbGtjdHJsICYgTU9EVUxFX0NMS0NUUkxfSURMRVNUX01BU0spID4+Ci0JCQkgTU9EVUxFX0NMS0NUUkxfSURMRVNUX1NISUZUOwotCQlpZiAoLS1ib3VuZCA9PSAwKSB7Ci0JCQlwcmludGYoIkNsb2NrIGVuYWJsZSBmYWlsZWQgZm9yIDB4JXAgaWRsZXN0IDB4JXhcbiIsCi0JCQkJY2xrY3RybF9hZGRyLCBjbGtjdHJsKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9jbG9ja19tb2R1bGUodTMyICpjb25zdCBjbGtjdHJsX2FkZHIsIHUzMiBlbmFibGVfbW9kZSwKLQkJCQl1MzIgd2FpdF9mb3JfZW5hYmxlKQotewotCWNscnNldGJpdHNfbGUzMihjbGtjdHJsX2FkZHIsIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKLQkJCWVuYWJsZV9tb2RlIDw8IE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOwotCWRlYnVnKCJFbmFibGUgY2xvY2sgbW9kdWxlIC0gJXBcbiIsIGNsa2N0cmxfYWRkcik7Ci0JaWYgKHdhaXRfZm9yX2VuYWJsZSkKLQkJd2FpdF9mb3JfY2xrX2VuYWJsZShjbGtjdHJsX2FkZHIpOwotfQotCiAvKgogICogRW5hYmxlIGVzc2VudGlhbCBjbG9jayBkb21haW5zLCBtb2R1bGVzIGFuZAogICogZG8gc29tZSBhZGRpdGlvbmFsIHNwZWNpYWwgc2V0dGluZ3MgbmVlZGVkCiAgKi8KLXN0YXRpYyB2b2lkIGVuYWJsZV9iYXNpY19jbG9ja3Modm9pZCkKK3ZvaWQgZW5hYmxlX2Jhc2ljX2Nsb2Nrcyh2b2lkKQogewotCXUzMiBpLCBtYXggPSAxMDAsIHdhaXRfZm9yX2VuYWJsZSA9IDE7CiAJdTMyICpjb25zdCBjbGtfZG9tYWluc19lc3NlbnRpYWxbXSA9IHsKIAkJJnByY20tPmNtX2w0cGVyX2Nsa3N0Y3RybCwKIAkJJnByY20tPmNtX2wzaW5pdF9jbGtzdGN0cmwsCkBAIC02NTEsMzAgKzMzMywyMyBAQAogCX07CiAKIAl1MzIgKmNvbnN0IGNsa19tb2R1bGVzX2h3X2F1dG9fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV9tZW1pZl9lbWlmXzFfY2xrY3RybCwKKwkJJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRjZmdfbDRfY2ZnX2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV93a3VwX2dwaW8xX2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV9sNHBlcl9ncGlvMl9jbGtjdHJsLAogCQkmcHJjbS0+Y21fbDRwZXJfZ3BpbzNfY2xrY3RybCwKIAkJJnByY20tPmNtX2w0cGVyX2dwaW80X2Nsa2N0cmwsCiAJCSZwcmNtLT5jbV9sNHBlcl9ncGlvNV9jbGtjdHJsLAogCQkmcHJjbS0+Y21fbDRwZXJfZ3BpbzZfY2xrY3RybCwKLQkJJnByY20tPmNtX21lbWlmX2VtaWZfMV9jbGtjdHJsLAotCQkmcHJjbS0+Y21fbWVtaWZfZW1pZl8yX2Nsa2N0cmwsCi0JCSZwcmNtLT5jbV9sM2luaXRfaHN1c2JvdGdfY2xrY3RybCwKLQkJJnByY20tPmNtX2wzaW5pdF91c2JwaHlfY2xrY3RybCwKLQkJJnByY20tPmNtX2w0Y2ZnX2w0X2NmZ19jbGtjdHJsLAogCQkwCiAJfTsKIAogCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fZXNzZW50aWFsW10gPSB7Ci0JCSZwcmNtLT5jbV9sNHBlcl9ncHRpbWVyMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fd2t1cF9ncHRpbWVyMV9jbGtjdHJsLAogCQkmcHJjbS0+Y21fbDNpbml0X2hzbW1jMV9jbGtjdHJsLAogCQkmcHJjbS0+Y21fbDNpbml0X2hzbW1jMl9jbGtjdHJsLAotCQkmcHJjbS0+Y21fbDRwZXJfbWNzcGkxX2Nsa2N0cmwsCi0JCSZwcmNtLT5jbV93a3VwX2dwdGltZXIxX2Nsa2N0cmwsCi0JCSZwcmNtLT5jbV9sNHBlcl9pMmMxX2Nsa2N0cmwsCi0JCSZwcmNtLT5jbV9sNHBlcl9pMmMyX2Nsa2N0cmwsCi0JCSZwcmNtLT5jbV9sNHBlcl9pMmMzX2Nsa2N0cmwsCi0JCSZwcmNtLT5jbV9sNHBlcl9pMmM0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncHRpbWVyMl9jbGtjdHJsLAogCQkmcHJjbS0+Y21fd2t1cF93ZHRpbWVyMl9jbGtjdHJsLAogCQkmcHJjbS0+Y21fbDRwZXJfdWFydDNfY2xrY3RybCwKIAkJMApAQCAtNjk4LDQwICszNzMsNDUgQEAKIAlzZXRiaXRzX2xlMzIoJnByY20tPmNtX2wzaW5pdF91c2JwaHlfY2xrY3RybCwKIAkJCVVTQlBIWV9DTEtDVFJMX09QVEZDTEtFTl9QSFlfNDhNX01BU0spOwogCi0JLyogUHV0IHRoZSBjbG9jayBkb21haW5zIGluIFNXX1dLVVAgbW9kZSAqLwotCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfZG9tYWluc19lc3NlbnRpYWxbaV07IGkrKykgewotCQllbmFibGVfY2xvY2tfZG9tYWluKGNsa19kb21haW5zX2Vzc2VudGlhbFtpXSwKLQkJCQkgICAgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU1dfV0tVUCk7Ci0JfQorCWRvX2VuYWJsZV9jbG9ja3MoY2xrX2RvbWFpbnNfZXNzZW50aWFsLAorCQkJIGNsa19tb2R1bGVzX2h3X2F1dG9fZXNzZW50aWFsLAorCQkJIGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX2Vzc2VudGlhbCwKKwkJCSAxKTsKK30KIAotCS8qIENsb2NrIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIHB1dCBpbiBIV19BVVRPICovCi0JZm9yIChpID0gMDsgKGkgPCBtYXgpICYmIGNsa19tb2R1bGVzX2h3X2F1dG9fZXNzZW50aWFsW2ldOyBpKyspIHsKLQkJZW5hYmxlX2Nsb2NrX21vZHVsZShjbGtfbW9kdWxlc19od19hdXRvX2Vzc2VudGlhbFtpXSwKLQkJCQkgICAgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9IV19BVVRPLAotCQkJCSAgICB3YWl0X2Zvcl9lbmFibGUpOwordm9pZCBlbmFibGVfYmFzaWNfdWJvb3RfY2xvY2tzKHZvaWQpCit7CisJdTMyICpjb25zdCBjbGtfZG9tYWluc19lc3NlbnRpYWxbXSA9IHsKKwkJMAogCX07CiAKLQkvKiBDbG9jayBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBwdXQgaW4gU1dfRVhQTElDSVRfRU4gbW9kZSAqLwotCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9lc3NlbnRpYWxbaV07IGkrKykgewotCQllbmFibGVfY2xvY2tfbW9kdWxlKGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX2Vzc2VudGlhbFtpXSwKLQkJCQkgICAgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiwKLQkJCQkgICAgd2FpdF9mb3JfZW5hYmxlKTsKKwl1MzIgKmNvbnN0IGNsa19tb2R1bGVzX2h3X2F1dG9fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV9sM2luaXRfaHN1c2JvdGdfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzaW5pdF91c2JwaHlfY2xrY3RybCwKKwkJMAogCX07CiAKLQkvKiBQdXQgdGhlIGNsb2NrIGRvbWFpbnMgaW4gSFdfQVVUTyBtb2RlIG5vdyAqLwotCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfZG9tYWluc19lc3NlbnRpYWxbaV07IGkrKykgewotCQllbmFibGVfY2xvY2tfZG9tYWluKGNsa19kb21haW5zX2Vzc2VudGlhbFtpXSwKLQkJCQkgICAgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTyk7Ci0JfQorCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV9sNHBlcl9tY3NwaTFfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2kyYzFfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2kyYzJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2kyYzNfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2kyYzRfY2xrY3RybCwKKwkJMAorCX07CisKKwlkb19lbmFibGVfY2xvY2tzKGNsa19kb21haW5zX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19od19hdXRvX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9lc3NlbnRpYWwsCisJCQkgMSk7CiB9CiAKIC8qCiAgKiBFbmFibGUgbm9uLWVzc2VudGlhbCBjbG9jayBkb21haW5zLCBtb2R1bGVzIGFuZAogICogZG8gc29tZSBhZGRpdGlvbmFsIHNwZWNpYWwgc2V0dGluZ3MgbmVlZGVkCiAgKi8KLXN0YXRpYyB2b2lkIGVuYWJsZV9ub25fZXNzZW50aWFsX2Nsb2Nrcyh2b2lkKQordm9pZCBlbmFibGVfbm9uX2Vzc2VudGlhbF9jbG9ja3Modm9pZCkKIHsKLQl1MzIgaSwgbWF4ID0gMTAwLCB3YWl0X2Zvcl9lbmFibGUgPSAwOwogCXUzMiAqY29uc3QgY2xrX2RvbWFpbnNfbm9uX2Vzc2VudGlhbFtdID0gewogCQkmcHJjbS0+Y21fbXB1X20zX2Nsa3N0Y3RybCwKIAkJJnByY20tPmNtX2l2YWhkX2Nsa3N0Y3RybCwKQEAgLTgwNywxMzUgKzQ4NywxMyBAQAogCS8qIEVuYWJsZSBhbGwgb3B0aW9uYWwgZnVuY3Rpb25hbCBjbG9ja3Mgb2YgRFNTICovCiAJc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9kc3NfZHNzX2Nsa2N0cmwsIERTU19DTEtDVFJMX09QVEZDTEtFTl9NQVNLKTsKIAotCi0JLyogUHV0IHRoZSBjbG9jayBkb21haW5zIGluIFNXX1dLVVAgbW9kZSAqLwotCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfZG9tYWluc19ub25fZXNzZW50aWFsW2ldOyBpKyspIHsKLQkJZW5hYmxlX2Nsb2NrX2RvbWFpbihjbGtfZG9tYWluc19ub25fZXNzZW50aWFsW2ldLAotCQkJCSAgICBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TV19XS1VQKTsKLQl9Ci0KLQkvKiBDbG9jayBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBwdXQgaW4gSFdfQVVUTyAqLwotCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfbW9kdWxlc19od19hdXRvX25vbl9lc3NlbnRpYWxbaV07IGkrKykgewotCQllbmFibGVfY2xvY2tfbW9kdWxlKGNsa19tb2R1bGVzX2h3X2F1dG9fbm9uX2Vzc2VudGlhbFtpXSwKLQkJCQkgICAgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9IV19BVVRPLAotCQkJCSAgICB3YWl0X2Zvcl9lbmFibGUpOwotCX07Ci0KLQkvKiBDbG9jayBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBwdXQgaW4gU1dfRVhQTElDSVRfRU4gbW9kZSAqLwotCWZvciAoaSA9IDA7IChpIDwgbWF4KSAmJiBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9ub25fZXNzZW50aWFsW2ldOwotCSAgICAgaSsrKSB7Ci0JCWVuYWJsZV9jbG9ja19tb2R1bGUoY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fbm9uX2Vzc2VudGlhbFtpXSwKLQkJCQkgICAgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiwKLQkJCQkgICAgd2FpdF9mb3JfZW5hYmxlKTsKLQl9OwotCi0JLyogUHV0IHRoZSBjbG9jayBkb21haW5zIGluIEhXX0FVVE8gbW9kZSBub3cgKi8KLQlmb3IgKGkgPSAwOyAoaSA8IG1heCkgJiYgY2xrX2RvbWFpbnNfbm9uX2Vzc2VudGlhbFtpXTsgaSsrKSB7Ci0JCWVuYWJsZV9jbG9ja19kb21haW4oY2xrX2RvbWFpbnNfbm9uX2Vzc2VudGlhbFtpXSwKLQkJCQkgICAgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTyk7Ci0JfQorCWRvX2VuYWJsZV9jbG9ja3MoY2xrX2RvbWFpbnNfbm9uX2Vzc2VudGlhbCwKKwkJCSBjbGtfbW9kdWxlc19od19hdXRvX25vbl9lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fbm9uX2Vzc2VudGlhbCwKKwkJCSAwKTsKIAogCS8qIFB1dCBjYW1lcmEgbW9kdWxlIGluIG5vIHNsZWVwIG1vZGUgKi8KIAljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2NhbV9jbGtzdGN0cmwsIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKIAkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX05PX1NMRUVQIDw8CiAJCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKIH0KLQotCi12b2lkIGZyZXFfdXBkYXRlX2NvcmUodm9pZCkKLXsKLQl1MzIgZnJlcV9jb25maWcxID0gMDsKLQljb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmNvcmVfZHBsbF9wYXJhbXM7Ci0KLQljb3JlX2RwbGxfcGFyYW1zID0gZ2V0X2NvcmVfZHBsbF9wYXJhbXMoKTsKLQkvKiBQdXQgRU1JRiBjbG9jayBkb21haW4gaW4gc3cgd2FrZXVwIG1vZGUgKi8KLQllbmFibGVfY2xvY2tfZG9tYWluKCZwcmNtLT5jbV9tZW1pZl9jbGtzdGN0cmwsCi0JCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfU1dfV0tVUCk7Ci0Jd2FpdF9mb3JfY2xrX2VuYWJsZSgmcHJjbS0+Y21fbWVtaWZfZW1pZl8xX2Nsa2N0cmwpOwotCXdhaXRfZm9yX2Nsa19lbmFibGUoJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsKTsKLQotCWZyZXFfY29uZmlnMSA9IFNIQURPV19GUkVRX0NPTkZJRzFfRlJFUV9VUERBVEVfTUFTSyB8Ci0JICAgIFNIQURPV19GUkVRX0NPTkZJRzFfRExMX1JFU0VUX01BU0s7Ci0KLQlmcmVxX2NvbmZpZzEgfD0gKERQTExfRU5fTE9DSyA8PCBTSEFET1dfRlJFUV9DT05GSUcxX0RQTExfRU5fU0hJRlQpICYKLQkJCQlTSEFET1dfRlJFUV9DT05GSUcxX0RQTExfRU5fTUFTSzsKLQotCWZyZXFfY29uZmlnMSB8PSAoY29yZV9kcGxsX3BhcmFtcy0+bTIgPDwKLQkJCVNIQURPV19GUkVRX0NPTkZJRzFfTTJfRElWX1NISUZUKSAmCi0JCQlTSEFET1dfRlJFUV9DT05GSUcxX00yX0RJVl9NQVNLOwotCi0Jd3JpdGVsKGZyZXFfY29uZmlnMSwgJnByY20tPmNtX3NoYWRvd19mcmVxX2NvbmZpZzEpOwotCWlmICghd2FpdF9vbl92YWx1ZShTSEFET1dfRlJFUV9DT05GSUcxX0ZSRVFfVVBEQVRFX01BU0ssIDAsCi0JCQkJJnByY20tPmNtX3NoYWRvd19mcmVxX2NvbmZpZzEsIExERUxBWSkpIHsKLQkJcHV0cygiRlJFUSBVUERBVEUgcHJvY2VkdXJlIGZhaWxlZCEhIik7Ci0JCWhhbmcoKTsKLQl9Ci0KLQkvKiBQdXQgRU1JRiBjbG9jayBkb21haW4gYmFjayBpbiBodyBhdXRvIG1vZGUgKi8KLQllbmFibGVfY2xvY2tfZG9tYWluKCZwcmNtLT5jbV9tZW1pZl9jbGtzdGN0cmwsCi0JCQkJQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfSFdfQVVUTyk7Ci0Jd2FpdF9mb3JfY2xrX2VuYWJsZSgmcHJjbS0+Y21fbWVtaWZfZW1pZl8xX2Nsa2N0cmwpOwotCXdhaXRfZm9yX2Nsa19lbmFibGUoJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsKTsKLX0KLQotdm9pZCBieXBhc3NfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCi17Ci0JZG9fYnlwYXNzX2RwbGwoYmFzZSk7Ci0Jd2FpdF9mb3JfYnlwYXNzKGJhc2UpOwotfQotCi12b2lkIGxvY2tfZHBsbCh1MzIgKmNvbnN0IGJhc2UpCi17Ci0JZG9fbG9ja19kcGxsKGJhc2UpOwotCXdhaXRfZm9yX2xvY2soYmFzZSk7Ci19Ci0KLXZvaWQgc2V0dXBfY2xvY2tzX2Zvcl9jb25zb2xlKHZvaWQpCi17Ci0JLyogRG8gbm90IGFkZCBhbnkgc3BsX2RlYnVnIHByaW50cyBpbiB0aGlzIGZ1bmN0aW9uICovCi0JY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl9jbGtzdGN0cmwsIENEX0NMS0NUUkxfQ0xLVFJDVFJMX01BU0ssCi0JCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TV19XS1VQIDw8Ci0JCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TSElGVCk7Ci0KLQkvKiBFbmFibGUgYWxsIFVBUlRzIC0gY29uc29sZSB3aWxsIGJlIG9uIG9uZSBvZiB0aGVtICovCi0JY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl91YXJ0MV9jbGtjdHJsLAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiA8PAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7Ci0KLQljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX3VhcnQyX2Nsa2N0cmwsCi0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCi0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NXX0VYUExJQ0lUX0VOIDw8Ci0JCQlNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX1NISUZUKTsKLQotCWNscnNldGJpdHNfbGUzMigmcHJjbS0+Y21fbDRwZXJfdWFydDNfY2xrY3RybCwKLQkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfTUFTSywKLQkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRVhQTElDSVRfRU4gPDwKLQkJCU1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQpOwotCi0JY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sNHBlcl91YXJ0M19jbGtjdHJsLAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLLAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTiA8PAotCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7Ci0KLQljbHJzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX2Nsa3N0Y3RybCwgQ0RfQ0xLQ1RSTF9DTEtUUkNUUkxfTUFTSywKLQkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX0hXX0FVVE8gPDwKLQkJCUNEX0NMS0NUUkxfQ0xLVFJDVFJMX1NISUZUKTsKLX0KLQotdm9pZCBwcmNtX2luaXQodm9pZCkKLXsKLQlzd2l0Y2ggKG9tYXA0X2h3X2luaXRfY29udGV4dCgpKSB7Ci0JY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9TUEw6Ci0JY2FzZSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9GUk9NX05PUjoKLQljYXNlIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX0NIOgotCQllbmFibGVfYmFzaWNfY2xvY2tzKCk7Ci0JCXNjYWxlX3Zjb3JlcygpOwotCQlzZXR1cF9kcGxscygpOwotCQlzZXR1cF9ub25fZXNzZW50aWFsX2RwbGxzKCk7Ci0JCWVuYWJsZV9ub25fZXNzZW50aWFsX2Nsb2NrcygpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvZW1pZi5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L2VtaWYuYwppbmRleCA5ODhiMjA1Li5jYTQ4MjNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvZW1pZi5jCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9lbWlmLmMKQEAgLTI2LDY0NSArMjYsMTUgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZW1pZi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2Nrcy5oPgorI2luY2x1ZGUgPGFzbS9lbWlmLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL29tYXBfY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL3V0aWxzLmg+CiAKLXN0YXRpYyBpbmxpbmUgdTMyIGVtaWZfbnVtKHUzMiBiYXNlKQotewotCWlmIChiYXNlID09IE9NQVA0NFhYX0VNSUYxKQotCQlyZXR1cm4gMTsKLQllbHNlIGlmIChiYXNlID09IE9NQVA0NFhYX0VNSUYyKQotCQlyZXR1cm4gMjsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfbXIodTMyIGJhc2UsIHUzMiBjcywgdTMyIG1yX2FkZHIpCi17Ci0JdTMyIG1yOwotCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7Ci0KLQltcl9hZGRyIHw9IGNzIDw8IE9NQVA0NFhYX1JFR19DU19TSElGVDsKLQl3cml0ZWwobXJfYWRkciwgJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2NmZyk7Ci0JaWYgKG9tYXBfcmV2aXNpb24oKSA9PSBPTUFQNDQzMF9FUzJfMCkKLQkJbXIgPSByZWFkbCgmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YV9lczIpOwotCWVsc2UKLQkJbXIgPSByZWFkbCgmZW1pZi0+ZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YSk7Ci0JZGVidWcoImdldF9tcjogRU1JRiVkIGNzICVkIG1yICUwOHggdmFsIDB4JXhcbiIsIGVtaWZfbnVtKGJhc2UpLAotCSAgICAgIGNzLCBtcl9hZGRyLCBtcik7Ci0JcmV0dXJuIG1yOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X21yKHUzMiBiYXNlLCB1MzIgY3MsIHUzMiBtcl9hZGRyLCB1MzIgbXJfdmFsKQotewotCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7Ci0KLQltcl9hZGRyIHw9IGNzIDw8IE9NQVA0NFhYX1JFR19DU19TSElGVDsKLQl3cml0ZWwobXJfYWRkciwgJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2NmZyk7Ci0Jd3JpdGVsKG1yX3ZhbCwgJmVtaWYtPmVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGEpOwotfQotCi12b2lkIGVtaWZfcmVzZXRfcGh5KHUzMiBiYXNlKQotewotCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7Ci0JdTMyIGlvZGZ0OwotCi0JaW9kZnQgPSByZWFkbCgmZW1pZi0+ZW1pZl9pb2RmdF90bGdjKTsKLQlpb2RmdCB8PSBPTUFQNDRYWF9SRUdfUkVTRVRfUEhZX01BU0s7Ci0Jd3JpdGVsKGlvZGZ0LCAmZW1pZi0+ZW1pZl9pb2RmdF90bGdjKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fbHBkZHIyX2luaXQodTMyIGJhc2UsIHUzMiBjcykKLXsKLQl1MzIgbXJfYWRkcjsKLQotCS8qIFdhaXQgdGlsbCBkZXZpY2UgYXV0byBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSAqLwotCXdoaWxlIChnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjApICYgTFBERFIyX01SMF9EQUlfTUFTSykKLQkJOwotCXNldF9tcihiYXNlLCBjcywgTFBERFIyX01SMTAsIE1SMTBfWlFfWlFJTklUKTsKLQkvKgotCSAqIHRaUUlOSVQgPSAxIHVzCi0JICogRW5vdWdoIGxvb3BzIGFzc3VtaW5nIGEgbWF4aW11bSBvZiAyR0h6Ci0JICovCi0Jc2RlbGF5KDIwMDApOwotCXNldF9tcihiYXNlLCBjcywgTFBERFIyX01SMSwgTVIxX0JMXzhfQlRfU0VRX1dSQVBfRU5fTldSXzMpOwotCXNldF9tcihiYXNlLCBjcywgTFBERFIyX01SMTYsIE1SMTZfUkVGX0ZVTExfQVJSQVkpOwotCS8qCi0JICogRW5hYmxlIHJlZnJlc2ggYWxvbmcgd2l0aCB3cml0aW5nIE1SMgotCSAqIEVuY29kaW5nIG9mIFJMIGluIE1SMiBpcyAoUkwgLSAyKQotCSAqLwotCW1yX2FkZHIgPSBMUEREUjJfTVIyIHwgT01BUDQ0WFhfUkVHX1JFRlJFU0hfRU5fTUFTSzsKLQlzZXRfbXIoYmFzZSwgY3MsIG1yX2FkZHIsIFJMX0ZJTkFMIC0gMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGxwZGRyMl9pbml0KHUzMiBiYXNlLCBjb25zdCBzdHJ1Y3QgZW1pZl9yZWdzICpyZWdzKQotewotCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7Ci0KLQkvKiBOb3QgTlZNICovCi0JY2xyYml0c19sZTMyKCZlbWlmLT5lbWlmX2xwZGRyMl9udm1fY29uZmlnLCBPTUFQNDRYWF9SRUdfQ1MxTlZNRU5fTUFTSyk7Ci0KLQkvKgotCSAqIEtlZXAgUkVHX0lOSVRSRUZfRElTID0gMSB0byBwcmV2ZW50IHJlLWluaXRpYWxpemF0aW9uIG9mIFNEUkFNCi0JICogd2hlbiBFTUlGX1NEUkFNX0NPTkZJRyByZWdpc3RlciBpcyB3cml0dGVuCi0JICovCi0Jc2V0Yml0c19sZTMyKCZlbWlmLT5lbWlmX3NkcmFtX3JlZl9jdHJsLCBPTUFQNDRYWF9SRUdfSU5JVFJFRl9ESVNfTUFTSyk7Ci0KLQkvKgotCSAqIFNldCB0aGUgU0RSQU1fQ09ORklHIGFuZCBQSFlfQ1RSTCBmb3IgdGhlCi0JICogdW4tbG9ja2VkIGZyZXF1ZW5jeSAmIGRlZmF1bHQgUkwKLQkgKi8KLQl3cml0ZWwocmVncy0+c2RyYW1fY29uZmlnX2luaXQsICZlbWlmLT5lbWlmX3NkcmFtX2NvbmZpZyk7Ci0Jd3JpdGVsKHJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzFfaW5pdCwgJmVtaWYtPmVtaWZfZGRyX3BoeV9jdHJsXzEpOwotCi0JZG9fbHBkZHIyX2luaXQoYmFzZSwgQ1MwKTsKLQlpZiAocmVncy0+c2RyYW1fY29uZmlnICYgT01BUDQ0WFhfUkVHX0VCQU5LX01BU0spCi0JCWRvX2xwZGRyMl9pbml0KGJhc2UsIENTMSk7Ci0KLQl3cml0ZWwocmVncy0+c2RyYW1fY29uZmlnLCAmZW1pZi0+ZW1pZl9zZHJhbV9jb25maWcpOwotCXdyaXRlbChyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xLCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMSk7Ci0KLQkvKiBFbmFibGUgcmVmcmVzaCBub3cgKi8KLQljbHJiaXRzX2xlMzIoJmVtaWYtPmVtaWZfc2RyYW1fcmVmX2N0cmwsIE9NQVA0NFhYX1JFR19JTklUUkVGX0RJU19NQVNLKTsKLQotfQotCi1zdGF0aWMgdm9pZCBlbWlmX3VwZGF0ZV90aW1pbmdzKHUzMiBiYXNlLCBjb25zdCBzdHJ1Y3QgZW1pZl9yZWdzICpyZWdzKQotewotCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7Ci0KLQl3cml0ZWwocmVncy0+cmVmX2N0cmwsICZlbWlmLT5lbWlmX3NkcmFtX3JlZl9jdHJsX3NoZHcpOwotCXdyaXRlbChyZWdzLT5zZHJhbV90aW0xLCAmZW1pZi0+ZW1pZl9zZHJhbV90aW1fMV9zaGR3KTsKLQl3cml0ZWwocmVncy0+c2RyYW1fdGltMiwgJmVtaWYtPmVtaWZfc2RyYW1fdGltXzJfc2hkdyk7Ci0Jd3JpdGVsKHJlZ3MtPnNkcmFtX3RpbTMsICZlbWlmLT5lbWlmX3NkcmFtX3RpbV8zX3NoZHcpOwotCWlmIChvbWFwX3JldmlzaW9uKCkgPT0gT01BUDQ0MzBfRVMxXzApIHsKLQkJLyogRVMxIGJ1ZyBFTUlGIHNob3VsZCBiZSBpbiBmb3JjZSBpZGxlIGR1cmluZyBmcmVxX3VwZGF0ZSAqLwotCQl3cml0ZWwoMCwgJmVtaWYtPmVtaWZfcHdyX21nbXRfY3RybCk7Ci0JfSBlbHNlIHsKLQkJd3JpdGVsKEVNSUZfUFdSX01HTVRfQ1RSTCwgJmVtaWYtPmVtaWZfcHdyX21nbXRfY3RybCk7Ci0JCXdyaXRlbChFTUlGX1BXUl9NR01UX0NUUkxfU0hEVywgJmVtaWYtPmVtaWZfcHdyX21nbXRfY3RybF9zaGR3KTsKLQl9Ci0Jd3JpdGVsKHJlZ3MtPnJlYWRfaWRsZV9jdHJsLCAmZW1pZi0+ZW1pZl9yZWFkX2lkbGVjdHJsX3NoZHcpOwotCXdyaXRlbChyZWdzLT56cV9jb25maWcsICZlbWlmLT5lbWlmX3pxX2NvbmZpZyk7Ci0Jd3JpdGVsKHJlZ3MtPnRlbXBfYWxlcnRfY29uZmlnLCAmZW1pZi0+ZW1pZl90ZW1wX2FsZXJ0X2NvbmZpZyk7Ci0Jd3JpdGVsKHJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzEsICZlbWlmLT5lbWlmX2Rkcl9waHlfY3RybF8xX3NoZHcpOwotCi0JaWYgKG9tYXBfcmV2aXNpb24oKSA+PSBPTUFQNDQ2MF9FUzFfMCkgewotCQl3cml0ZWwoRU1JRl9MM19DT05GSUdfVkFMX1NZU18xMF9NUFVfM19MTF8wLAotCQkJJmVtaWYtPmVtaWZfbDNfY29uZmlnKTsKLQl9IGVsc2UgewotCQl3cml0ZWwoRU1JRl9MM19DT05GSUdfVkFMX1NZU18xMF9MTF8wLAotCQkJJmVtaWYtPmVtaWZfbDNfY29uZmlnKTsKLQl9Ci19Ci0KICNpZm5kZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKLSNkZWZpbmUgcHJpbnRfdGltaW5nX3JlZyhyZWcpIGRlYnVnKCNyZWciIC0gMHglMDh4XG4iLCAocmVnKSkKLQotc3RhdGljIHUzMiAqY29uc3QgVF9udW0gPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX0VNSUZfVF9OVU07Ci1zdGF0aWMgdTMyICpjb25zdCBUX2RlbiA9ICh1MzIgKilPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9UX0RFTjsKLXN0YXRpYyB1MzIgKmNvbnN0IGVtaWZfc2l6ZXMgPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX0VNSUZfU0laRTsKLQotLyoKLSAqIE9yZ2FuaXphdGlvbiBhbmQgcmVmcmVzaCByZXF1aXJlbWVudHMgZm9yIExQRERSMiBkZXZpY2VzIG9mIGRpZmZlcmVudAotICogdHlwZXMgYW5kIGRlbnNpdGllcy4gRGVyaXZlZCBmcm9tIEpFU0QyMDktMiBzZWN0aW9uIDIuNAotICovCi1jb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgYWRkcmVzc2luZ190YWJsZVtdID0gewotCS8qIEJhbmtzIHRSRUZJeDEwICAgICByb3d4MzIscm93eDE2ICAgICAgY29seDMyLGNvbHgxNglkZW5zaXR5ICovCi0Je0JBTktTNCwgVF9SRUZJXzE1XzYsIHtST1dfMTIsIFJPV18xMn0sIHtDT0xfNywgQ09MXzh9IH0sLyo2NE0gKi8KLQl7QkFOS1M0LCBUX1JFRklfMTVfNiwge1JPV18xMiwgUk9XXzEyfSwge0NPTF84LCBDT0xfOX0gfSwvKjEyOE0gKi8KLQl7QkFOS1M0LCBUX1JFRklfN184LCB7Uk9XXzEzLCBST1dfMTN9LCB7Q09MXzgsIENPTF85fSB9LC8qMjU2TSAqLwotCXtCQU5LUzQsIFRfUkVGSV83XzgsIHtST1dfMTMsIFJPV18xM30sIHtDT0xfOSwgQ09MXzEwfSB9LC8qNTEyTSAqLwotCXtCQU5LUzgsIFRfUkVGSV83XzgsIHtST1dfMTMsIFJPV18xM30sIHtDT0xfOSwgQ09MXzEwfSB9LC8qMUdTNCAqLwotCXtCQU5LUzgsIFRfUkVGSV8zXzksIHtST1dfMTQsIFJPV18xNH0sIHtDT0xfOSwgQ09MXzEwfSB9LC8qMkdTNCAqLwotCXtCQU5LUzgsIFRfUkVGSV8zXzksIHtST1dfMTQsIFJPV18xNH0sIHtDT0xfMTAsIENPTF8xMX0gfSwvKjRHICovCi0Je0JBTktTOCwgVF9SRUZJXzNfOSwge1JPV18xNSwgUk9XXzE1fSwge0NPTF8xMCwgQ09MXzExfSB9LC8qOEcgKi8KLQl7QkFOS1M0LCBUX1JFRklfN184LCB7Uk9XXzE0LCBST1dfMTR9LCB7Q09MXzksIENPTF8xMH0gfSwvKjFHUzIgKi8KLQl7QkFOS1M0LCBUX1JFRklfM185LCB7Uk9XXzE1LCBST1dfMTV9LCB7Q09MXzksIENPTF8xMH0gfSwvKjJHUzIgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgbHBkZHIyX2RlbnNpdHlfMl9zaXplX2luX21ieXRlc1tdID0gewotCTgsCQkJLyogNjRNYiAqLwotCTE2LAkJCS8qIDEyOE1iICovCi0JMzIsCQkJLyogMjU2TWIgKi8KLQk2NCwJCQkvKiA1MTJNYiAqLwotCTEyOCwJCQkvKiAxR2IgICAqLwotCTI1NiwJCQkvKiAyR2IgICAqLwotCTUxMiwJCQkvKiA0R2IgICAqLwotCTEwMjQsCQkJLyogOEdiICAgKi8KLQkyMDQ4LAkJCS8qIDE2R2IgICovCi0JNDA5NgkJCS8qIDMyR2IgICovCi19OwotCi0vKgotICogQ2FsY3VsYXRlIHRoZSBwZXJpb2Qgb2YgRERSIGNsb2NrIGZyb20gZnJlcXVlbmN5IHZhbHVlIGFuZCBzZXQgdGhlCi0gKiBkZW5vbWluYXRvciBhbmQgbnVtZXJhdG9yIGluIGdsb2JhbCB2YXJpYWJsZXMgZm9yIGVhc3kgYWNjZXNzIGxhdGVyCi0gKi8KLXN0YXRpYyB2b2lkIHNldF9kZHJfY2xrX3BlcmlvZCh1MzIgZnJlcSkKLXsKLQkvKgotCSAqIHBlcmlvZCA9IDEvZnJlcQotCSAqIHBlcmlvZF9pbl9ucyA9IDEwXjkvZnJlcQotCSAqLwotCSpUX251bSA9IDEwMDAwMDAwMDA7Ci0JKlRfZGVuID0gZnJlcTsKLQljYW5jZWxfb3V0KFRfbnVtLCBUX2RlbiwgMjAwKTsKLQotfQotCi0vKgotICogQ29udmVydCB0aW1lIGluIG5hbm8gc2Vjb25kcyB0byBudW1iZXIgb2YgY3ljbGVzIG9mIEREUiBjbG9jawotICovCi1zdGF0aWMgaW5saW5lIHUzMiBuc18yX2N5Y2xlcyh1MzIgbnMpCi17Ci0JcmV0dXJuICgobnMgKiAoKlRfZGVuKSkgKyAoKlRfbnVtKSAtIDEpIC8gKCpUX251bSk7Ci19Ci0KLS8qCi0gKiBuc18yX2N5Y2xlcyB3aXRoIHRoZSBkaWZmZXJlbmNlIHRoYXQgdGhlIHRpbWUgcGFzc2VkIGlzIDIgdGltZXMgdGhlIGFjdHVhbAotICogdmFsdWUodG8gYXZvaWQgZnJhY3Rpb25zKS4gVGhlIGN5Y2xlcyByZXR1cm5lZCBpcyBmb3IgdGhlIG9yaWdpbmFsIHZhbHVlIG9mCi0gKiB0aGUgdGltaW5nIHBhcmFtZXRlcgotICovCi1zdGF0aWMgaW5saW5lIHUzMiBuc194Ml8yX2N5Y2xlcyh1MzIgbnMpCi17Ci0JcmV0dXJuICgobnMgKiAoKlRfZGVuKSkgKyAoKlRfbnVtKSAqIDIgLSAxKSAvICgoKlRfbnVtKSAqIDIpOwotfQotCi0vKgotICogRmluZCBhZGRyZXNzaW5nIHRhYmxlIGluZGV4IGJhc2VkIG9uIHRoZSBkZXZpY2UncyB0eXBlKFMyIG9yIFM0KSBhbmQKLSAqIGRlbnNpdHkKLSAqLwotczggYWRkcmVzc2luZ190YWJsZV9pbmRleCh1OCB0eXBlLCB1OCBkZW5zaXR5LCB1OCB3aWR0aCkKLXsKLQl1OCBpbmRleDsKLQlpZiAoKGRlbnNpdHkgPiBMUEREUjJfREVOU0lUWV84R2IpIHx8ICh3aWR0aCA9PSBMUEREUjJfSU9fV0lEVEhfOCkpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogTG9vayBhdCB0aGUgd2F5IEFERFJfVEFCTEVfSU5ERVgqIHZhbHVlcyBoYXZlIGJlZW4gZGVmaW5lZAotCSAqIGluIGVtaWYuaCBjb21wYXJlZCB0byBMUEREUjJfREVOU0lUWV8qIHZhbHVlcwotCSAqIFRoZSB0YWJsZSBpcyBsYXllZCBvdXQgaW4gdGhlIGluY3JlYXNpbmcgb3JkZXIgb2YgZGVuc2l0eQotCSAqIChpZ25vcmluZyB0eXBlKS4gVGhlIGV4Y2VwdGlvbnMgMUdTMiBhbmQgMkdTMiBoYXZlIGJlZW4gcGxhY2VkCi0JICogYXQgdGhlIGVuZAotCSAqLwotCWlmICgodHlwZSA9PSBMUEREUjJfVFlQRV9TMikgJiYgKGRlbnNpdHkgPT0gTFBERFIyX0RFTlNJVFlfMUdiKSkKLQkJaW5kZXggPSBBRERSX1RBQkxFX0lOREVYMUdTMjsKLQllbHNlIGlmICgodHlwZSA9PSBMUEREUjJfVFlQRV9TMikgJiYgKGRlbnNpdHkgPT0gTFBERFIyX0RFTlNJVFlfMkdiKSkKLQkJaW5kZXggPSBBRERSX1RBQkxFX0lOREVYMkdTMjsKLQllbHNlCi0JCWluZGV4ID0gZGVuc2l0eTsKLQotCWRlYnVnKCJlbWlmOiBhZGRyZXNzaW5nIHRhYmxlIGluZGV4ICVkXG4iLCBpbmRleCk7Ci0KLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLS8qCi0gKiBGaW5kIHRoZSB0aGUgcmlnaHQgdGltaW5nIHRhYmxlIGZyb20gdGhlIGFycmF5IG9mIHRpbWluZwotICogdGFibGVzIG9mIHRoZSBkZXZpY2UgdXNpbmcgRERSIGNsb2NrIGZyZXF1ZW5jeQotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICpnZXRfdGltaW5nc190YWJsZShjb25zdCBzdHJ1Y3QKLQkJCWxwZGRyMl9hY190aW1pbmdzIGNvbnN0ICpjb25zdCAqZGV2aWNlX3RpbWluZ3MsCi0JCQl1MzIgZnJlcSkKLXsKLQl1MzIgaSwgdGVtcCwgZnJlcV9uZWFyZXN0OwotCWNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqdGltaW5ncyA9IDA7Ci0KLQllbWlmX2Fzc2VydChmcmVxIDw9IE1BWF9MUEREUjJfRlJFUSk7Ci0JZW1pZl9hc3NlcnQoZGV2aWNlX3RpbWluZ3MpOwotCi0JLyoKLQkgKiBTdGFydCB3aXRoIHRoZSBtYXhpbXVtIGFsbG93ZWQgZnJlcXVlbmN5IC0gdGhhdCBpcyBhbHdheXMgc2FmZQotCSAqLwotCWZyZXFfbmVhcmVzdCA9IE1BWF9MUEREUjJfRlJFUTsKLQkvKgotCSAqIEZpbmQgdGhlIHRpbWluZ3MgdGFibGUgdGhhdCBoYXMgdGhlIG1heCBmcmVxdWVuY3kgdmFsdWU6Ci0JICogICBpLiAgQWJvdmUgb3IgZXF1YWwgdG8gdGhlIEREUiBmcmVxdWVuY3kgLSBzYWZlCi0JICogICBpaS4gVGhlIGxvd2VzdCB0aGF0IHNhdGlzZmllcyBjb25kaXRpb24gKGkpIC0gb3B0aW1hbAotCSAqLwotCWZvciAoaSA9IDA7IChpIDwgTUFYX05VTV9TUEVFREJJTlMpICYmIGRldmljZV90aW1pbmdzW2ldOyBpKyspIHsKLQkJdGVtcCA9IGRldmljZV90aW1pbmdzW2ldLT5tYXhfZnJlcTsKLQkJaWYgKCh0ZW1wID49IGZyZXEpICYmICh0ZW1wIDw9IGZyZXFfbmVhcmVzdCkpIHsKLQkJCWZyZXFfbmVhcmVzdCA9IHRlbXA7Ci0JCQl0aW1pbmdzID0gZGV2aWNlX3RpbWluZ3NbaV07Ci0JCX0KLQl9Ci0JZGVidWcoImVtaWY6IHRpbWluZ3MgdGFibGU6ICVkXG4iLCBmcmVxX25lYXJlc3QpOwotCXJldHVybiB0aW1pbmdzOwotfQotCi0vKgotICogRmluZHMgdGhlIHZhbHVlIG9mIGVtaWZfc2RyYW1fY29uZmlnX3JlZwotICogQWxsIHBhcmFtZXRlcnMgYXJlIHByb2dyYW1tZWQgYmFzZWQgb24gdGhlIGRldmljZSBvbiBDUzAuCi0gKiBJZiB0aGVyZSBpcyBhIGRldmljZSBvbiBDUzEsIGl0IHdpbGwgYmUgc2FtZSBhcyB0aGF0IG9uIENTMCBvcgotICogaXQgd2lsbCBiZSBOVk0uIFdlIGRvbid0IHN1cHBvcnQgTlZNIHlldC4KLSAqIElmIGNzMV9kZXZpY2UgcG9pbnRlciBpcyBOVUxMIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGVyZSBpcyBubyBkZXZpY2UKLSAqIG9uIENTMQotICovCi1zdGF0aWMgdTMyIGdldF9zZHJhbV9jb25maWdfcmVnKGNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMF9kZXZpY2UsCi0JCQkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZSwKLQkJCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3NpbmcsCi0JCQkJdTggUkwpCi17Ci0JdTMyIGNvbmZpZ19yZWcgPSAwOwotCi0JY29uZmlnX3JlZyB8PSAgKGNzMF9kZXZpY2UtPnR5cGUgKyA0KSA8PCBPTUFQNDRYWF9SRUdfU0RSQU1fVFlQRV9TSElGVDsKLQljb25maWdfcmVnIHw9ICBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1lfTUFYX0lOVEVSTEVBVklORyA8PAotCQkJT01BUDQ0WFhfUkVHX0lCQU5LX1BPU19TSElGVDsKLQotCWNvbmZpZ19yZWcgfD0gY3MwX2RldmljZS0+aW9fd2lkdGggPDwgT01BUDQ0WFhfUkVHX05BUlJPV19NT0RFX1NISUZUOwotCi0JY29uZmlnX3JlZyB8PSBSTCA8PCBPTUFQNDRYWF9SRUdfQ0xfU0hJRlQ7Ci0KLQljb25maWdfcmVnIHw9IGFkZHJlc3NpbmctPnJvd19zeltjczBfZGV2aWNlLT5pb193aWR0aF0gPDwKLQkJCU9NQVA0NFhYX1JFR19ST1dTSVpFX1NISUZUOwotCi0JY29uZmlnX3JlZyB8PSBhZGRyZXNzaW5nLT5udW1fYmFua3MgPDwgT01BUDQ0WFhfUkVHX0lCQU5LX1NISUZUOwotCi0JY29uZmlnX3JlZyB8PSAoY3MxX2RldmljZSA/IEVCQU5LX0NTMV9FTiA6IEVCQU5LX0NTMV9ESVMpIDw8Ci0JCQlPTUFQNDRYWF9SRUdfRUJBTktfU0hJRlQ7Ci0KLQljb25maWdfcmVnIHw9IGFkZHJlc3NpbmctPmNvbF9zeltjczBfZGV2aWNlLT5pb193aWR0aF0gPDwKLQkJCU9NQVA0NFhYX1JFR19QQUdFU0laRV9TSElGVDsKLQotCXJldHVybiBjb25maWdfcmVnOwotfQotCi1zdGF0aWMgdTMyIGdldF9zZHJhbV9yZWZfY3RybCh1MzIgZnJlcSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfYWRkcmVzc2luZyAqYWRkcmVzc2luZykKLXsKLQl1MzIgcmVmX2N0cmwgPSAwLCB2YWwgPSAwLCBmcmVxX2toejsKLQlmcmVxX2toeiA9IGZyZXEgLyAxMDAwOwotCS8qCi0JICogcmVmcmVzaCByYXRlIHRvIGJlIHNldCBpcyAndFJFRkkgKiBmcmVxIGluIE1IegotCSAqIGRpdmlzaW9uIGJ5IDEwMDAwIHRvIGFjY291bnQgZm9yIGtoeiBhbmQgeDEwIGluIHRfUkVGSV91c194MTAKLQkgKi8KLQl2YWwgPSBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwICogZnJlcV9raHogLyAxMDAwMDsKLQlyZWZfY3RybCB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1JFRlJFU0hfUkFURV9TSElGVDsKLQotCXJldHVybiByZWZfY3RybDsKLX0KLQotc3RhdGljIHUzMiBnZXRfc2RyYW1fdGltXzFfcmVnKGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqdGltaW5ncywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2ssCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nKQotewotCXUzMiB0aW0xID0gMCwgdmFsID0gMDsKLQl2YWwgPSBtYXgobWluX3Rjay0+dFdUUiwgbnNfeDJfMl9jeWNsZXModGltaW5ncy0+dFdUUngyKSkgLSAxOwotCXRpbTEgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1dUUl9TSElGVDsKLQotCWlmIChhZGRyZXNzaW5nLT5udW1fYmFua3MgPT0gQkFOS1M4KQotCQl2YWwgPSAodGltaW5ncy0+dEZBVyAqICgqVF9kZW4pICsgNCAqICgqVF9udW0pIC0gMSkgLwotCQkJCQkJCSg0ICogKCpUX251bSkpIC0gMTsKLQllbHNlCi0JCXZhbCA9IG1heChtaW5fdGNrLT50UlJELCBuc18yX2N5Y2xlcyh0aW1pbmdzLT50UlJEKSkgLSAxOwotCi0JdGltMSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfUlJEX1NISUZUOwotCi0JdmFsID0gbnNfMl9jeWNsZXModGltaW5ncy0+dFJBU21pbiArIHRpbWluZ3MtPnRSUGFiKSAtIDE7Ci0JdGltMSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfUkNfU0hJRlQ7Ci0KLQl2YWwgPSBtYXgobWluX3Rjay0+dFJBU19NSU4sIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSQVNtaW4pKSAtIDE7Ci0JdGltMSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfUkFTX1NISUZUOwotCi0JdmFsID0gbWF4KG1pbl90Y2stPnRXUiwgbnNfMl9jeWNsZXModGltaW5ncy0+dFdSKSkgLSAxOwotCXRpbTEgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1dSX1NISUZUOwotCi0JdmFsID0gbWF4KG1pbl90Y2stPnRSQ0QsIG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRSQ0QpKSAtIDE7Ci0JdGltMSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfUkNEX1NISUZUOwotCi0JdmFsID0gbWF4KG1pbl90Y2stPnRSUF9BQiwgbnNfMl9jeWNsZXModGltaW5ncy0+dFJQYWIpKSAtIDE7Ci0JdGltMSB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfUlBfU0hJRlQ7Ci0KLQlyZXR1cm4gdGltMTsKLX0KLQotc3RhdGljIHUzMiBnZXRfc2RyYW1fdGltXzJfcmVnKGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqdGltaW5ncywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2spCi17Ci0JdTMyIHRpbTIgPSAwLCB2YWwgPSAwOwotCXZhbCA9IG1heChtaW5fdGNrLT50Q0tFLCB0aW1pbmdzLT50Q0tFKSAtIDE7Ci0JdGltMiB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfQ0tFX1NISUZUOwotCi0JdmFsID0gbWF4KG1pbl90Y2stPnRSVFAsIG5zX3gyXzJfY3ljbGVzKHRpbWluZ3MtPnRSVFB4MikpIC0gMTsKLQl0aW0yIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9SVFBfU0hJRlQ7Ci0KLQkvKgotCSAqIHRYU1JEID0gdFJGQ2FiICsgMTAgbnMuIFhTUkQgYW5kIFhTTlIgc2hvdWxkIGhhdmUgdGhlCi0JICogc2FtZSB2YWx1ZQotCSAqLwotCXZhbCA9IG5zXzJfY3ljbGVzKHRpbWluZ3MtPnRYU1IpIC0gMTsKLQl0aW0yIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9YU1JEX1NISUZUOwotCXRpbTIgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX1hTTlJfU0hJRlQ7Ci0KLQl2YWwgPSBtYXgobWluX3Rjay0+dFhQLCBuc194Ml8yX2N5Y2xlcyh0aW1pbmdzLT50WFB4MikpIC0gMTsKLQl0aW0yIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9YUF9TSElGVDsKLQotCXJldHVybiB0aW0yOwotfQotCi1zdGF0aWMgdTMyIGdldF9zZHJhbV90aW1fM19yZWcoY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzICp0aW1pbmdzLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBscGRkcjJfbWluX3RjayAqbWluX3RjaywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3NpbmcpCi17Ci0JdTMyIHRpbTMgPSAwLCB2YWwgPSAwOwotCXZhbCA9IG1pbih0aW1pbmdzLT50UkFTbWF4ICogMTAgLyBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwIC0gMSwgMHhGKTsKLQl0aW0zIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9SQVNfTUFYX1NISUZUOwotCi0JdmFsID0gbnNfMl9jeWNsZXModGltaW5ncy0+dFJGQ2FiKSAtIDE7Ci0JdGltMyB8PSB2YWwgPDwgT01BUDQ0WFhfUkVHX1RfUkZDX1NISUZUOwotCi0JdmFsID0gbnNfeDJfMl9jeWNsZXModGltaW5ncy0+dERRU0NLTUFYeDIpIC0gMTsKLQl0aW0zIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfVF9URFFTQ0tNQVhfU0hJRlQ7Ci0KLQl2YWwgPSBuc18yX2N5Y2xlcyh0aW1pbmdzLT50WlFDUykgLSAxOwotCXRpbTMgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19aUV9aUUNTX1NISUZUOwotCi0JdmFsID0gbWF4KG1pbl90Y2stPnRDS0VTUiwgbnNfMl9jeWNsZXModGltaW5ncy0+dENLRVNSKSkgLSAxOwotCXRpbTMgfD0gdmFsIDw8IE9NQVA0NFhYX1JFR19UX0NLRVNSX1NISUZUOwotCi0JcmV0dXJuIHRpbTM7Ci19Ci0KLXN0YXRpYyB1MzIgZ2V0X3pxX2NvbmZpZ19yZWcoY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZSwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nLAotCQkJICAgICB1OCB2b2x0X3JhbXApCi17Ci0JdTMyIHpxID0gMCwgdmFsID0gMDsKLQlpZiAodm9sdF9yYW1wKQotCQl2YWwgPQotCQkgICAgRU1JRl9aUUNTX0lOVEVSVkFMX0RWRlNfSU5fVVMgKiAxMCAvCi0JCSAgICBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwOwotCWVsc2UKLQkJdmFsID0KLQkJICAgIEVNSUZfWlFDU19JTlRFUlZBTF9OT1JNQUxfSU5fVVMgKiAxMCAvCi0JCSAgICBhZGRyZXNzaW5nLT50X1JFRklfdXNfeDEwOwotCXpxIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfWlFfUkVGSU5URVJWQUxfU0hJRlQ7Ci0KLQl6cSB8PSAoUkVHX1pRX1pRQ0xfTVVMVCAtIDEpIDw8IE9NQVA0NFhYX1JFR19aUV9aUUNMX01VTFRfU0hJRlQ7Ci0KLQl6cSB8PSAoUkVHX1pRX1pRSU5JVF9NVUxUIC0gMSkgPDwgT01BUDQ0WFhfUkVHX1pRX1pRSU5JVF9NVUxUX1NISUZUOwotCi0JenEgfD0gUkVHX1pRX1NGRVhJVEVOX0VOQUJMRSA8PCBPTUFQNDRYWF9SRUdfWlFfU0ZFWElURU5fU0hJRlQ7Ci0KLQkvKgotCSAqIEFzc3VtaW5nIHRoYXQgdHdvIGNoaXBzZWxlY3RzIGhhdmUgYSBzaW5nbGUgY2FsaWJyYXRpb24gcmVzaXN0b3IKLQkgKiBJZiB0aGVyZSBhcmUgaW5kZWVkIHR3byBjYWxpYnJhdGlvbiByZXNpc3RvcnMsIHRoZW4gdGhpcyBmbGFnIHNob3VsZAotCSAqIGJlIGVuYWJsZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgZHVhbCBjYWxpYnJhdGlvbiBmZWF0dXJlLgotCSAqIFRoaXMgZGF0YSBzaG91bGQgaWRlYWxseSBjb21lIGZyb20gYm9hcmQgZmlsZXMuIEJ1dCBjb25zaWRlcmluZwotCSAqIHRoYXQgbm9uZSBvZiB0aGUgYm9hcmRzIHRvZGF5IGhhdmUgY2FsaWJyYXRpb24gcmVzaXN0b3JzIHBlciBDUywKLQkgKiBpdCB3b3VsZCBiZSBhbiB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KLQkgKi8KLQl6cSB8PSBSRUdfWlFfRFVBTENBTEVOX0RJU0FCTEUgPDwgT01BUDQ0WFhfUkVHX1pRX0RVQUxDQUxFTl9TSElGVDsKLQotCXpxIHw9IFJFR19aUV9DUzBFTl9FTkFCTEUgPDwgT01BUDQ0WFhfUkVHX1pRX0NTMEVOX1NISUZUOwotCi0JenEgfD0gKGNzMV9kZXZpY2UgPyAxIDogMCkgPDwgT01BUDQ0WFhfUkVHX1pRX0NTMUVOX1NISUZUOwotCi0JcmV0dXJuIHpxOwotfQotCi1zdGF0aWMgdTMyIGdldF90ZW1wX2FsZXJ0X2NvbmZpZyhjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlLAotCQkJCSBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FkZHJlc3NpbmcgKmFkZHJlc3NpbmcsCi0JCQkJIHU4IGlzX2RlcmF0ZWQpCi17Ci0JdTMyIGFsZXJ0ID0gMCwgaW50ZXJ2YWw7Ci0JaW50ZXJ2YWwgPQotCSAgICBURU1QX0FMRVJUX1BPTExfSU5URVJWQUxfTVMgKiAxMDAwMCAvIGFkZHJlc3NpbmctPnRfUkVGSV91c194MTA7Ci0JaWYgKGlzX2RlcmF0ZWQpCi0JCWludGVydmFsICo9IDQ7Ci0JYWxlcnQgfD0gaW50ZXJ2YWwgPDwgT01BUDQ0WFhfUkVHX1RBX1JFRklOVEVSVkFMX1NISUZUOwotCi0JYWxlcnQgfD0gVEVNUF9BTEVSVF9DT05GSUdfREVWQ1RfMSA8PCBPTUFQNDRYWF9SRUdfVEFfREVWQ05UX1NISUZUOwotCi0JYWxlcnQgfD0gVEVNUF9BTEVSVF9DT05GSUdfREVWV0RUXzMyIDw8IE9NQVA0NFhYX1JFR19UQV9ERVZXRFRfU0hJRlQ7Ci0KLQlhbGVydCB8PSAxIDw8IE9NQVA0NFhYX1JFR19UQV9TRkVYSVRFTl9TSElGVDsKLQotCWFsZXJ0IHw9IDEgPDwgT01BUDQ0WFhfUkVHX1RBX0NTMEVOX1NISUZUOwotCi0JYWxlcnQgfD0gKGNzMV9kZXZpY2UgPyAxIDogMCkgPDwgT01BUDQ0WFhfUkVHX1RBX0NTMUVOX1NISUZUOwotCi0JcmV0dXJuIGFsZXJ0OwotfQotCi1zdGF0aWMgdTMyIGdldF9yZWFkX2lkbGVfY3RybF9yZWcodTggdm9sdF9yYW1wKQotewotCXUzMiBpZGxlID0gMCwgdmFsID0gMDsKLQlpZiAodm9sdF9yYW1wKQotCQl2YWwgPSBuc18yX2N5Y2xlcyhSRUFEX0lETEVfSU5URVJWQUxfRFZGUykgLyA2NCAtIDE7Ci0JZWxzZQotCQkvKk1heGltdW0gdmFsdWUgaW4gbm9ybWFsIGNvbmRpdGlvbnMgLSBzdWdnZXN0ZWQgYnkgaHcgdGVhbSAqLwotCQl2YWwgPSAweDFGRjsKLQlpZGxlIHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0lOVEVSVkFMX1NISUZUOwotCi0JaWRsZSB8PSBFTUlGX1JFR19SRUFEX0lETEVfTEVOX1ZBTCA8PCBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0xFTl9TSElGVDsKLQotCXJldHVybiBpZGxlOwotfQotCi1zdGF0aWMgdTMyIGdldF9kZHJfcGh5X2N0cmxfMSh1MzIgZnJlcSwgdTggUkwpCi17Ci0JdTMyIHBoeSA9IDAsIHZhbCA9IDA7Ci0KLQlwaHkgfD0gKFJMICsgMikgPDwgT01BUDQ0WFhfUkVHX1JFQURfTEFURU5DWV9TSElGVDsKLQotCWlmIChmcmVxIDw9IDEwMDAwMDAwMCkKLQkJdmFsID0gRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfMTAwX01IWl9BTkRfTEVTUzsKLQllbHNlIGlmIChmcmVxIDw9IDIwMDAwMDAwMCkKLQkJdmFsID0gRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfMjAwX01IWjsKLQllbHNlCi0JCXZhbCA9IEVNSUZfRExMX1NMQVZFX0RMWV9DVFJMXzQwMF9NSFo7Ci0JcGh5IHw9IHZhbCA8PCBPTUFQNDRYWF9SRUdfRExMX1NMQVZFX0RMWV9DVFJMX1NISUZUOwotCi0JLyogT3RoZXIgZmllbGRzIGFyZSBjb25zdGFudCBtYWdpYyB2YWx1ZXMuIEhhcmRjb2RlIHRoZW0gdG9nZXRoZXIgKi8KLQlwaHkgfD0gRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTCA8PAotCQlPTUFQNDRYWF9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NISUZUOwotCi0JcmV0dXJuIHBoeTsKLX0KLQotc3RhdGljIHUzMiBnZXRfZW1pZl9tZW1fc2l6ZShzdHJ1Y3QgZW1pZl9kZXZpY2VfZGV0YWlscyAqZGV2aWNlcykKLXsKLQl1MzIgc2l6ZV9tYnl0ZXMgPSAwLCB0ZW1wOwotCi0JaWYgKCFkZXZpY2VzKQotCQlyZXR1cm4gMDsKLQotCWlmIChkZXZpY2VzLT5jczBfZGV2aWNlX2RldGFpbHMpIHsKLQkJdGVtcCA9IGRldmljZXMtPmNzMF9kZXZpY2VfZGV0YWlscy0+ZGVuc2l0eTsKLQkJc2l6ZV9tYnl0ZXMgKz0gbHBkZHIyX2RlbnNpdHlfMl9zaXplX2luX21ieXRlc1t0ZW1wXTsKLQl9Ci0KLQlpZiAoZGV2aWNlcy0+Y3MxX2RldmljZV9kZXRhaWxzKSB7Ci0JCXRlbXAgPSBkZXZpY2VzLT5jczFfZGV2aWNlX2RldGFpbHMtPmRlbnNpdHk7Ci0JCXNpemVfbWJ5dGVzICs9IGxwZGRyMl9kZW5zaXR5XzJfc2l6ZV9pbl9tYnl0ZXNbdGVtcF07Ci0JfQotCS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KLQlyZXR1cm4gc2l6ZV9tYnl0ZXMgPDwgMjA7Ci19Ci0KLS8qIEdldHMgdGhlIGVuY29kaW5nIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBETU0gc2VjdGlvbiBzaXplICovCi11MzIgZ2V0X2RtbV9zZWN0aW9uX3NpemVfbWFwKHUzMiBzZWN0aW9uX3NpemUpCi17Ci0JLyoKLQkgKiBTZWN0aW9uIHNpemUgbWFwcGluZzoKLQkgKiAweDA6IDE2LU1pQiBzZWN0aW9uCi0JICogMHgxOiAzMi1NaUIgc2VjdGlvbgotCSAqIDB4MjogNjQtTWlCIHNlY3Rpb24KLQkgKiAweDM6IDEyOC1NaUIgc2VjdGlvbgotCSAqIDB4NDogMjU2LU1pQiBzZWN0aW9uCi0JICogMHg1OiA1MTItTWlCIHNlY3Rpb24KLQkgKiAweDY6IDEtR2lCIHNlY3Rpb24KLQkgKiAweDc6IDItR2lCIHNlY3Rpb24KLQkgKi8KLQlzZWN0aW9uX3NpemUgPj49IDI0OyAvKiBkaXZpZGUgYnkgMTYgTUIgKi8KLQlyZXR1cm4gbG9nXzJfbl9yb3VuZF9kb3duKHNlY3Rpb25fc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVtaWZfY2FsY3VsYXRlX3JlZ3MoCi0JCWNvbnN0IHN0cnVjdCBlbWlmX2RldmljZV9kZXRhaWxzICplbWlmX2Rldl9kZXRhaWxzLAotCQl1MzIgZnJlcSwgc3RydWN0IGVtaWZfcmVncyAqcmVncykKLXsKLQl1MzIgdGVtcCwgc3lzX2ZyZXE7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nICphZGRyZXNzaW5nOwotCWNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqdGltaW5nczsKLQljb25zdCBzdHJ1Y3QgbHBkZHIyX21pbl90Y2sgKm1pbl90Y2s7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2Rldl9kZXRhaWxzID0KLQkJCQkJZW1pZl9kZXZfZGV0YWlscy0+Y3MwX2RldmljZV9kZXRhaWxzOwotCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZfZGV0YWlscyA9Ci0JCQkJCWVtaWZfZGV2X2RldGFpbHMtPmNzMV9kZXZpY2VfZGV0YWlsczsKLQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICpjczBfZGV2X3RpbWluZ3MgPQotCQkJCQllbWlmX2Rldl9kZXRhaWxzLT5jczBfZGV2aWNlX3RpbWluZ3M7Ci0KLQllbWlmX2Fzc2VydChlbWlmX2Rldl9kZXRhaWxzKTsKLQllbWlmX2Fzc2VydChyZWdzKTsKLQkvKgotCSAqIFlvdSBjYW4gbm90IGhhdmUgYSBkZXZpY2Ugb24gQ1MxIHdpdGhvdXQgb25lIG9uIENTMAotCSAqIFNvIGNvbmZpZ3VyaW5nIEVNSUYgd2l0aG91dCBhIGRldmljZSBvbiBDUzAgZG9lc24ndAotCSAqIG1ha2Ugc2Vuc2UKLQkgKi8KLQllbWlmX2Fzc2VydChjczBfZGV2X2RldGFpbHMpOwotCWVtaWZfYXNzZXJ0KGNzMF9kZXZfZGV0YWlscy0+dHlwZSAhPSBMUEREUjJfVFlQRV9OVk0pOwotCS8qCi0JICogSWYgdGhlcmUgaXMgYSBkZXZpY2Ugb24gQ1MxIGl0IHNob3VsZCBiZSBzYW1lIHR5cGUgYXMgQ1MwCi0JICogKG9yIE5WTS4gQnV0IE5WTSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZHJpdmVyIHlldCkKLQkgKi8KLQllbWlmX2Fzc2VydCgoY3MxX2Rldl9kZXRhaWxzID09IE5VTEwpIHx8Ci0JCSAgICAoY3MxX2Rldl9kZXRhaWxzLT50eXBlID09IExQRERSMl9UWVBFX05WTSkgfHwKLQkJICAgIChjczBfZGV2X2RldGFpbHMtPnR5cGUgPT0gY3MxX2Rldl9kZXRhaWxzLT50eXBlKSk7Ci0JZW1pZl9hc3NlcnQoZnJlcSA8PSBNQVhfTFBERFIyX0ZSRVEpOwotCi0Jc2V0X2Rkcl9jbGtfcGVyaW9kKGZyZXEpOwotCi0JLyoKLQkgKiBUaGUgZGV2aWNlIG9uIENTMCBpcyB1c2VkIGZvciBhbGwgdGltaW5nIGNhbGN1bGF0aW9ucwotCSAqIFRoZXJlIGlzIG9ubHkgb25lIHNldCBvZiByZWdpc3RlcnMgZm9yIHRpbWluZ3MgcGVyIEVNSUYuIFNvLCBpZiB0aGUKLQkgKiBzZWNvbmQgQ1MoQ1MxKSBoYXMgYSBkZXZpY2UsIGl0IHNob3VsZCBoYXZlIHRoZSBzYW1lIHRpbWluZ3MgYXMgdGhlCi0JICogZGV2aWNlIG9uIENTMAotCSAqLwotCXRpbWluZ3MgPSBnZXRfdGltaW5nc190YWJsZShjczBfZGV2X3RpbWluZ3MtPmFjX3RpbWluZ3MsIGZyZXEpOwotCWVtaWZfYXNzZXJ0KHRpbWluZ3MpOwotCW1pbl90Y2sgPSBjczBfZGV2X3RpbWluZ3MtPm1pbl90Y2s7Ci0KLQl0ZW1wID0gYWRkcmVzc2luZ190YWJsZV9pbmRleChjczBfZGV2X2RldGFpbHMtPnR5cGUsCi0JCQkJICAgICAgY3MwX2Rldl9kZXRhaWxzLT5kZW5zaXR5LAotCQkJCSAgICAgIGNzMF9kZXZfZGV0YWlscy0+aW9fd2lkdGgpOwotCi0JZW1pZl9hc3NlcnQoKHRlbXAgPj0gMCkpOwotCWFkZHJlc3NpbmcgPSAmKGFkZHJlc3NpbmdfdGFibGVbdGVtcF0pOwotCWVtaWZfYXNzZXJ0KGFkZHJlc3NpbmcpOwotCi0Jc3lzX2ZyZXEgPSBnZXRfc3lzX2Nsa19mcmVxKCk7Ci0KLQlyZWdzLT5zZHJhbV9jb25maWdfaW5pdCA9IGdldF9zZHJhbV9jb25maWdfcmVnKGNzMF9kZXZfZGV0YWlscywKLQkJCQkJCQljczFfZGV2X2RldGFpbHMsCi0JCQkJCQkJYWRkcmVzc2luZywgUkxfQk9PVCk7Ci0KLQlyZWdzLT5zZHJhbV9jb25maWcgPSBnZXRfc2RyYW1fY29uZmlnX3JlZyhjczBfZGV2X2RldGFpbHMsCi0JCQkJCQljczFfZGV2X2RldGFpbHMsCi0JCQkJCQlhZGRyZXNzaW5nLCBSTF9GSU5BTCk7Ci0KLQlyZWdzLT5yZWZfY3RybCA9IGdldF9zZHJhbV9yZWZfY3RybChmcmVxLCBhZGRyZXNzaW5nKTsKLQotCXJlZ3MtPnNkcmFtX3RpbTEgPSBnZXRfc2RyYW1fdGltXzFfcmVnKHRpbWluZ3MsIG1pbl90Y2ssIGFkZHJlc3NpbmcpOwotCi0JcmVncy0+c2RyYW1fdGltMiA9IGdldF9zZHJhbV90aW1fMl9yZWcodGltaW5ncywgbWluX3Rjayk7Ci0KLQlyZWdzLT5zZHJhbV90aW0zID0gZ2V0X3NkcmFtX3RpbV8zX3JlZyh0aW1pbmdzLCBtaW5fdGNrLCBhZGRyZXNzaW5nKTsKLQotCXJlZ3MtPnJlYWRfaWRsZV9jdHJsID0gZ2V0X3JlYWRfaWRsZV9jdHJsX3JlZyhMUEREUjJfVk9MVEFHRV9TVEFCTEUpOwotCi0JcmVncy0+dGVtcF9hbGVydF9jb25maWcgPQotCSAgICBnZXRfdGVtcF9hbGVydF9jb25maWcoY3MxX2Rldl9kZXRhaWxzLCBhZGRyZXNzaW5nLCAwKTsKLQotCXJlZ3MtPnpxX2NvbmZpZyA9IGdldF96cV9jb25maWdfcmVnKGNzMV9kZXZfZGV0YWlscywgYWRkcmVzc2luZywKLQkJCQkJICAgIExQRERSMl9WT0xUQUdFX1NUQUJMRSk7Ci0KLQlyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQgPQotCQkJZ2V0X2Rkcl9waHlfY3RybF8xKHN5c19mcmVxIC8gMiwgUkxfQk9PVCk7Ci0KLQlyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xID0KLQkJCWdldF9kZHJfcGh5X2N0cmxfMShmcmVxLCBSTF9GSU5BTCk7Ci0KLQlyZWdzLT5mcmVxID0gZnJlcTsKLQotCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fY29uZmlnX2luaXQpOwotCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fY29uZmlnKTsKLQlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnJlZl9jdHJsKTsKLQlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnNkcmFtX3RpbTEpOwotCXByaW50X3RpbWluZ19yZWcocmVncy0+c2RyYW1fdGltMik7Ci0JcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5zZHJhbV90aW0zKTsKLQlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnJlYWRfaWRsZV9jdHJsKTsKLQlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnRlbXBfYWxlcnRfY29uZmlnKTsKLQlwcmludF90aW1pbmdfcmVnKHJlZ3MtPnpxX2NvbmZpZyk7Ci0JcHJpbnRfdGltaW5nX3JlZyhyZWdzLT5lbWlmX2Rkcl9waHlfY3Rscl8xKTsKLQlwcmludF90aW1pbmdfcmVnKHJlZ3MtPmVtaWZfZGRyX3BoeV9jdGxyXzFfaW5pdCk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MgKi8KK3UzMiAqY29uc3QgVF9udW0gPSAodTMyICopT01BUDRfU1JBTV9TQ1JBVENIX0VNSUZfVF9OVU07Cit1MzIgKmNvbnN0IFRfZGVuID0gKHUzMiAqKU9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1RfREVOOwordTMyICpjb25zdCBlbWlmX3NpemVzID0gKHUzMiAqKU9NQVA0X1NSQU1fU0NSQVRDSF9FTUlGX1NJWkU7CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNfREVGQVVMVF9MUEREUjJfVElNSU5HUwogLyogQmFzZSBBQyBUaW1pbmcgdmFsdWVzIHNwZWNpZmllZCBieSBKRVNEMjA5LTIgZm9yIDQwME1IeiBvcGVyYXRpb24gKi8KQEAgLTY5MSwzMCArNjEsNiBAQAogCS50RkFXID0gNTAKIH07CiAKLS8qIEJhc2UgQUMgVGltaW5nIHZhbHVlcyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yIGZvciAzMzMgTUh6IG9wZXJhdGlvbiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyB0aW1pbmdzX2plZGVjXzMzM19taHogPSB7Ci0JLm1heF9mcmVxID0gMzMzMDAwMDAwLAotCS5STCA9IDUsCi0JLnRSUGFiID0gMjEsCi0JLnRSQ0QgPSAxOCwKLQkudFdSID0gMTUsCi0JLnRSQVNtaW4gPSA0MiwKLQkudFJSRCA9IDEwLAotCS50V1RSeDIgPSAxNSwKLQkudFhTUiA9IDE0MCwKLQkudFhQeDIgPSAxNSwKLQkudFJGQ2FiID0gMTMwLAotCS50UlRQeDIgPSAxNSwKLQkudENLRSA9IDMsCi0JLnRDS0VTUiA9IDE1LAotCS50WlFDUyA9IDkwLAotCS50WlFDTCA9IDM2MCwKLQkudFpRSU5JVCA9IDEwMDAsCi0JLnREUVNDS01BWHgyID0gMTEsCi0JLnRSQVNtYXggPSA3MCwKLQkudEZBVyA9IDUwCi19OwotCiAvKiBCYXNlIEFDIFRpbWluZyB2YWx1ZXMgc3BlY2lmaWVkIGJ5IEpFU0QyMDktMiBmb3IgMjAwIE1IeiBvcGVyYXRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgdGltaW5nc19qZWRlY18yMDBfbWh6ID0gewogCS5tYXhfZnJlcSA9IDIwMDAwMDAwMCwKQEAgLTc2NCw3ICsxMTAsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyBjb25zdCoKIAkJCWplZGVjX2FjX3RpbWluZ3NbTUFYX05VTV9TUEVFREJJTlNdID0gewogCSZ0aW1pbmdzX2plZGVjXzIwMF9taHosCi0JJnRpbWluZ3NfamVkZWNfMzMzX21oeiwKIAkmdGltaW5nc19qZWRlY180MDBfbWh6CiB9OwogCkBAIC03ODIsNDczICsxMjcsMyBAQAogCSpjczFfZGV2aWNlX3RpbWluZ3MgPSAmamVkZWNfZGVmYXVsdF90aW1pbmdzOwogfQogI2VuZGlmIC8qIENPTkZJR19TWVNfREVGQVVMVF9MUEREUjJfVElNSU5HUyAqLwotCi0jaWZkZWYgQ09ORklHX1NZU19BVVRPTUFUSUNfU0RSQU1fREVURUNUSU9OCi1jb25zdCBjaGFyICpnZXRfbHBkZHIyX3R5cGUodTggdHlwZV9pZCkKLXsKLQlzd2l0Y2ggKHR5cGVfaWQpIHsKLQljYXNlIExQRERSMl9UWVBFX1M0OgotCQlyZXR1cm4gIkxQRERSMi1TNCI7Ci0JY2FzZSBMUEREUjJfVFlQRV9TMjoKLQkJcmV0dXJuICJMUEREUjItUzIiOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwotCX0KLX0KLQotY29uc3QgY2hhciAqZ2V0X2xwZGRyMl9pb193aWR0aCh1OCB3aWR0aF9pZCkKLXsKLQlzd2l0Y2ggKHdpZHRoX2lkKSB7Ci0JY2FzZSBMUEREUjJfSU9fV0lEVEhfODoKLQkJcmV0dXJuICJ4OCI7Ci0JY2FzZSBMUEREUjJfSU9fV0lEVEhfMTY6Ci0JCXJldHVybiAieDE2IjsKLQljYXNlIExQRERSMl9JT19XSURUSF8zMjoKLQkJcmV0dXJuICJ4MzIiOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwotCX0KLX0KLQotY29uc3QgY2hhciAqZ2V0X2xwZGRyMl9tYW51ZmFjdHVyZXIodTMyIG1hbnVmYWN0dXJlcikKLXsKLQlzd2l0Y2ggKG1hbnVmYWN0dXJlcikgewotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9TQU1TVU5HOgotCQlyZXR1cm4gIlNhbXN1bmciOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9RSU1PTkRBOgotCQlyZXR1cm4gIlFpbW9uZGEiOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9FTFBJREE6Ci0JCXJldHVybiAiRWxwaWRhIjsKLQljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfRVRST046Ci0JCXJldHVybiAiRXRyb24iOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9OQU5ZQToKLQkJcmV0dXJuICJOYW55YSI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0hZTklYOgotCQlyZXR1cm4gIkh5bml4IjsKLQljYXNlIExQRERSMl9NQU5VRkFDVFVSRVJfTU9TRUw6Ci0JCXJldHVybiAiTW9zZWwiOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9XSU5CT05EOgotCQlyZXR1cm4gIldpbmJvbmQiOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9FU01UOgotCQlyZXR1cm4gIkVTTVQiOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9TUEFOU0lPTjoKLQkJcmV0dXJuICJTcGFuc2lvbiI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NTVDoKLQkJcmV0dXJuICJTU1QiOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9aTU9TOgotCQlyZXR1cm4gIlpNT1MiOwotCWNhc2UgTFBERFIyX01BTlVGQUNUVVJFUl9JTlRFTDoKLQkJcmV0dXJuICJJbnRlbCI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX05VTU9OWVg6Ci0JCXJldHVybiAiTnVtb255eCI7Ci0JY2FzZSBMUEREUjJfTUFOVUZBQ1RVUkVSX01JQ1JPTjoKLQkJcmV0dXJuICJNaWNyb24iOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZGlzcGxheV9zZHJhbV9kZXRhaWxzKHUzMiBlbWlmX25yLCB1MzIgY3MsCi0JCQkJICBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpkZXZpY2UpCi17Ci0JY29uc3QgY2hhciAqbWZnX3N0cjsKLQljb25zdCBjaGFyICp0eXBlX3N0cjsKLQljaGFyIGRlbnNpdHlfc3RyWzEwXTsKLQl1MzIgZGVuc2l0eTsKLQotCWRlYnVnKCJFTUlGJWQgQ1MlZFx0IiwgZW1pZl9uciwgY3MpOwotCi0JaWYgKCFkZXZpY2UpIHsKLQkJZGVidWcoIk5vbmVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbWZnX3N0ciA9IGdldF9scGRkcjJfbWFudWZhY3R1cmVyKGRldmljZS0+bWFudWZhY3R1cmVyKTsKLQl0eXBlX3N0ciA9IGdldF9scGRkcjJfdHlwZShkZXZpY2UtPnR5cGUpOwotCi0JZGVuc2l0eSA9IGxwZGRyMl9kZW5zaXR5XzJfc2l6ZV9pbl9tYnl0ZXNbZGV2aWNlLT5kZW5zaXR5XTsKLQlpZiAoKGRlbnNpdHkgLyAxMDI0ICogMTAyNCkgPT0gZGVuc2l0eSkgewotCQlkZW5zaXR5IC89IDEwMjQ7Ci0JCXNwcmludGYoZGVuc2l0eV9zdHIsICIlZCBHQiIsIGRlbnNpdHkpOwotCX0gZWxzZQotCQlzcHJpbnRmKGRlbnNpdHlfc3RyLCAiJWQgTUIiLCBkZW5zaXR5KTsKLQlpZiAobWZnX3N0ciAmJiB0eXBlX3N0cikKLQkJZGVidWcoIiVzXHRcdCVzXHQlc1xuIiwgbWZnX3N0ciwgdHlwZV9zdHIsIGRlbnNpdHlfc3RyKTsKLX0KLQotc3RhdGljIHU4IGlzX2xwZGRyMl9zZHJhbV9wcmVzZW50KHUzMiBiYXNlLCB1MzIgY3MsCi0JCQkJICBzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpscGRkcjJfZGV2aWNlKQotewotCXUzMiBtciA9IDAsIHRlbXA7Ci0KLQltciA9IGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SMCk7Ci0JaWYgKG1yID4gMHhGRikgewotCQkvKiBNb2RlIHJlZ2lzdGVyIHZhbHVlIGJpZ2dlciB0aGFuIDggYml0ICovCi0JCXJldHVybiAwOwotCX0KLQotCXRlbXAgPSAobXIgJiBMUEREUjJfTVIwX0RJX01BU0spID4+IExQRERSMl9NUjBfRElfU0hJRlQ7Ci0JaWYgKHRlbXApIHsKLQkJLyogTm90IFNEUkFNICovCi0JCXJldHVybiAwOwotCX0KLQl0ZW1wID0gKG1yICYgTFBERFIyX01SMF9ETlZJX01BU0spID4+IExQRERSMl9NUjBfRE5WSV9TSElGVDsKLQotCWlmICh0ZW1wKSB7Ci0JCS8qIEROViBzdXBwb3J0ZWQgLSBCdXQgRE5WIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBOVk0gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjQpOwotCWlmIChtciA+IDB4RkYpIHsKLQkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltciA9IGdldF9tcihiYXNlLCBjcywgTFBERFIyX01SNSk7Ci0JaWYgKG1yID49IDB4RkYpIHsKLQkJLyogTW9kZSByZWdpc3RlciB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIWdldF9scGRkcjJfbWFudWZhY3R1cmVyKG1yKSkgewotCQkvKiBNYW51ZmFjdHVyZXIgbm90IGlkZW50aWZpZWQgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCWxwZGRyMl9kZXZpY2UtPm1hbnVmYWN0dXJlciA9IG1yOwotCi0JbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjYpOwotCWlmIChtciA+PSAweEZGKSB7Ci0JCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjcpOwotCWlmIChtciA+PSAweEZGKSB7Ci0JCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXIgPSBnZXRfbXIoYmFzZSwgY3MsIExQRERSMl9NUjgpOwotCWlmIChtciA+PSAweEZGKSB7Ci0JCS8qIE1vZGUgcmVnaXN0ZXIgdmFsdWUgYmlnZ2VyIHRoYW4gOCBiaXQgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JdGVtcCA9IChtciAmIE1SOF9UWVBFX01BU0spID4+IE1SOF9UWVBFX1NISUZUOwotCWlmICghZ2V0X2xwZGRyMl90eXBlKHRlbXApKSB7Ci0JCS8qIE5vdCBTRFJBTSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0JbHBkZHIyX2RldmljZS0+dHlwZSA9IHRlbXA7Ci0KLQl0ZW1wID0gKG1yICYgTVI4X0RFTlNJVFlfTUFTSykgPj4gTVI4X0RFTlNJVFlfU0hJRlQ7Ci0JaWYgKHRlbXAgPiBMUEREUjJfREVOU0lUWV8zMkdiKSB7Ci0JCS8qIERlbnNpdHkgbm90IHN1cHBvcnRlZCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0JbHBkZHIyX2RldmljZS0+ZGVuc2l0eSA9IHRlbXA7Ci0KLQl0ZW1wID0gKG1yICYgTVI4X0lPX1dJRFRIX01BU0spID4+IE1SOF9JT19XSURUSF9TSElGVDsKLQlpZiAoIWdldF9scGRkcjJfaW9fd2lkdGgodGVtcCkpIHsKLQkJLyogSU8gd2lkdGggdW5zdXBwb3J0ZWQgdmFsdWUgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCWxwZGRyMl9kZXZpY2UtPmlvX3dpZHRoID0gdGVtcDsKLQotCS8qCi0JICogSWYgYWxsIHRoZSBhYm92ZSB0ZXN0cyBwYXNzIHdlIHNob3VsZAotCSAqIGhhdmUgYSBkZXZpY2Ugb24gdGhpcyBjaGlwLXNlbGVjdAotCSAqLwotCXJldHVybiAxOwotfQotCi1zdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICplbWlmX2dldF9kZXZpY2VfZGV0YWlscyh1MzIgZW1pZl9uciwgdTggY3MsCi0JCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpscGRkcjJfZGV2X2RldGFpbHMpCi17Ci0JdTMyIHBoeTsKLQl1MzIgYmFzZSA9IChlbWlmX25yID09IDEpID8gT01BUDQ0WFhfRU1JRjEgOiBPTUFQNDRYWF9FTUlGMjsKLQlzdHJ1Y3QgZW1pZl9yZWdfc3RydWN0ICplbWlmID0gKHN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKiliYXNlOwotCi0JaWYgKCFscGRkcjJfZGV2X2RldGFpbHMpCi0JCXJldHVybiBOVUxMOwotCi0JLyogRG8gdGhlIG1pbmltdW0gaW5pdCBmb3IgbW9kZSByZWdpc3RlciBhY2Nlc3NlcyAqLwotCWlmICghcnVubmluZ19mcm9tX3NkcmFtKCkpIHsKLQkJcGh5ID0gZ2V0X2Rkcl9waHlfY3RybF8xKGdldF9zeXNfY2xrX2ZyZXEoKSAvIDIsIFJMX0JPT1QpOwotCQl3cml0ZWwocGh5LCAmZW1pZi0+ZW1pZl9kZHJfcGh5X2N0cmxfMSk7Ci0JfQotCi0JaWYgKCEoaXNfbHBkZHIyX3NkcmFtX3ByZXNlbnQoYmFzZSwgY3MsIGxwZGRyMl9kZXZfZGV0YWlscykpKQotCQlyZXR1cm4gTlVMTDsKLQotCWRpc3BsYXlfc2RyYW1fZGV0YWlscyhlbWlmX251bShiYXNlKSwgY3MsIGxwZGRyMl9kZXZfZGV0YWlscyk7Ci0KLQlyZXR1cm4gbHBkZHIyX2Rldl9kZXRhaWxzOwotfQotI2VuZGlmIC8qIENPTkZJR19TWVNfQVVUT01BVElDX1NEUkFNX0RFVEVDVElPTiAqLwotCi1zdGF0aWMgdm9pZCBkb19zZHJhbV9pbml0KHUzMiBiYXNlKQotewotCWNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKnJlZ3M7Ci0JdTMyIGluX3NkcmFtLCBlbWlmX25yOwotCi0JZGVidWcoIj4+ZG9fc2RyYW1faW5pdCgpICV4XG4iLCBiYXNlKTsKLQotCWluX3NkcmFtID0gcnVubmluZ19mcm9tX3NkcmFtKCk7Ci0JZW1pZl9uciA9IChiYXNlID09IE9NQVA0NFhYX0VNSUYxKSA/IDEgOiAyOwotCi0jaWZkZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKLQllbWlmX2dldF9yZWdfZHVtcChlbWlmX25yLCAmcmVncyk7Ci0JaWYgKCFyZWdzKSB7Ci0JCWRlYnVnKCJFTUlGOiByZWcgZHVtcCBub3QgcHJvdmlkZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotI2Vsc2UKLQkvKgotCSAqIFRoZSB1c2VyIGhhcyBub3QgcHJvdmlkZWQgdGhlIHJlZ2lzdGVyIHZhbHVlcy4gV2UgbmVlZCB0bwotCSAqIGNhbGN1bGF0ZSBpdCBiYXNlZCBvbiB0aGUgdGltaW5ncyBhbmQgdGhlIEREUiBmcmVxdWVuY3kKLQkgKi8KLQlzdHJ1Y3QgZW1pZl9kZXZpY2VfZGV0YWlscyBkZXZfZGV0YWlsczsKLQlzdHJ1Y3QgZW1pZl9yZWdzIGNhbGN1bGF0ZWRfcmVnczsKLQotCS8qCi0JICogR2V0IGRldmljZSBkZXRhaWxzOgotCSAqIC0gRGlzY292ZXJlZCBpZiBDT05GSUdfU1lTX0FVVE9NQVRJQ19TRFJBTV9ERVRFQ1RJT04gaXMgc2V0Ci0JICogLSBPYnRhaW5lZCBmcm9tIHVzZXIgb3RoZXJ3aXNlCi0JICovCi0Jc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyBjczBfZGV2X2RldGFpbHMsIGNzMV9kZXZfZGV0YWlsczsKLQllbWlmX3Jlc2V0X3BoeShiYXNlKTsKLQlkZXZfZGV0YWlscy5jczBfZGV2aWNlX2RldGFpbHMgPSBlbWlmX2dldF9kZXZpY2VfZGV0YWlscyhiYXNlLCBDUzAsCi0JCQkJCQkmY3MwX2Rldl9kZXRhaWxzKTsKLQlkZXZfZGV0YWlscy5jczFfZGV2aWNlX2RldGFpbHMgPSBlbWlmX2dldF9kZXZpY2VfZGV0YWlscyhiYXNlLCBDUzEsCi0JCQkJCQkmY3MxX2Rldl9kZXRhaWxzKTsKLQllbWlmX3Jlc2V0X3BoeShiYXNlKTsKLQotCS8qIFJldHVybiBpZiBubyBkZXZpY2VzIG9uIHRoaXMgRU1JRiAqLwotCWlmICghZGV2X2RldGFpbHMuY3MwX2RldmljZV9kZXRhaWxzICYmCi0JICAgICFkZXZfZGV0YWlscy5jczFfZGV2aWNlX2RldGFpbHMpIHsKLQkJZW1pZl9zaXplc1tlbWlmX25yIC0gMV0gPSAwOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFpbl9zZHJhbSkKLQkJZW1pZl9zaXplc1tlbWlmX25yIC0gMV0gPSBnZXRfZW1pZl9tZW1fc2l6ZSgmZGV2X2RldGFpbHMpOwotCi0JLyoKLQkgKiBHZXQgZGV2aWNlIHRpbWluZ3M6Ci0JICogLSBEZWZhdWx0IHRpbWluZ3Mgc3BlY2lmaWVkIGJ5IEpFU0QyMDktMiBpZgotCSAqICAgQ09ORklHX1NZU19ERUZBVUxUX0xQRERSMl9USU1JTkdTIGlzIHNldAotCSAqIC0gT2J0YWluZWQgZnJvbSB1c2VyIG90aGVyd2lzZQotCSAqLwotCWVtaWZfZ2V0X2RldmljZV90aW1pbmdzKGVtaWZfbnIsICZkZXZfZGV0YWlscy5jczBfZGV2aWNlX3RpbWluZ3MsCi0JCQkJJmRldl9kZXRhaWxzLmNzMV9kZXZpY2VfdGltaW5ncyk7Ci0KLQkvKiBDYWxjdWxhdGUgdGhlIHJlZ2lzdGVyIHZhbHVlcyAqLwotCWVtaWZfY2FsY3VsYXRlX3JlZ3MoJmRldl9kZXRhaWxzLCBvbWFwNF9kZHJfY2xrKCksICZjYWxjdWxhdGVkX3JlZ3MpOwotCXJlZ3MgPSAmY2FsY3VsYXRlZF9yZWdzOwotI2VuZGlmIC8qIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTICovCi0KLQkvKgotCSAqIEluaXRpYWxpemluZyB0aGUgTFBERFIyIGRldmljZSBjYW4gbm90IGhhcHBlbiBmcm9tIFNEUkFNLgotCSAqIENoYW5naW5nIHRoZSB0aW1pbmcgcmVnaXN0ZXJzIGluIEVNSUYgY2FuIGhhcHBlbihnb2luZyBmcm9tIG9uZQotCSAqIE9QUCB0byBhbm90aGVyKQotCSAqLwotCWlmICghaW5fc2RyYW0pCi0JCWxwZGRyMl9pbml0KGJhc2UsIHJlZ3MpOwotCi0JLyogV3JpdGUgdG8gdGhlIHNoYWRvdyByZWdpc3RlcnMgKi8KLQllbWlmX3VwZGF0ZV90aW1pbmdzKGJhc2UsIHJlZ3MpOwotCi0JZGVidWcoIjw8ZG9fc2RyYW1faW5pdCgpICV4XG4iLCBiYXNlKTsKLX0KLQotc3RhdGljIHZvaWQgZW1pZl9wb3N0X2luaXRfY29uZmlnKHUzMiBiYXNlKQotewotCXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgKmVtaWYgPSAoc3RydWN0IGVtaWZfcmVnX3N0cnVjdCAqKWJhc2U7Ci0JdTMyIG9tYXA0X3JldiA9IG9tYXBfcmV2aXNpb24oKTsKLQotCS8qIHJlc2V0IHBoeSBvbiBFUzIuMCAqLwotCWlmIChvbWFwNF9yZXYgPT0gT01BUDQ0MzBfRVMyXzApCi0JCWVtaWZfcmVzZXRfcGh5KGJhc2UpOwotCi0JLyogUHV0IEVNSUYgYmFjayBpbiBzbWFydCBpZGxlIG9uIEVTMS4wICovCi0JaWYgKG9tYXA0X3JldiA9PSBPTUFQNDQzMF9FUzFfMCkKLQkJd3JpdGVsKDB4ODAwMDAwMDAsICZlbWlmLT5lbWlmX3B3cl9tZ210X2N0cmwpOwotfQotCi1zdGF0aWMgdm9pZCBkbW1faW5pdCh1MzIgYmFzZSkKLXsKLQljb25zdCBzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKmxpc2FfbWFwX3JlZ3M7Ci0KLSNpZmRlZiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUwotCWVtaWZfZ2V0X2RtbV9yZWdzKCZsaXNhX21hcF9yZWdzKTsKLSNlbHNlCi0JdTMyIGVtaWYxX3NpemUsIGVtaWYyX3NpemUsIG1hcHBlZF9zaXplLCBzZWN0aW9uX21hcCA9IDA7Ci0JdTMyIHNlY3Rpb25fY250LCBzeXNfYWRkcjsKLQlzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQgPSB7MH07Ci0KLQltYXBwZWRfc2l6ZSA9IDA7Ci0Jc2VjdGlvbl9jbnQgPSAzOwotCXN5c19hZGRyID0gQ09ORklHX1NZU19TRFJBTV9CQVNFOwotCWVtaWYxX3NpemUgPSBlbWlmX3NpemVzWzBdOwotCWVtaWYyX3NpemUgPSBlbWlmX3NpemVzWzFdOwotCWRlYnVnKCJlbWlmMV9zaXplIDB4JXggZW1pZjJfc2l6ZSAweCV4XG4iLCBlbWlmMV9zaXplLCBlbWlmMl9zaXplKTsKLQotCWlmICghZW1pZjFfc2l6ZSAmJiAhZW1pZjJfc2l6ZSkKLQkJcmV0dXJuOwotCi0JLyogc3ltbWV0cmljIGludGVybGVhdmVkIHNlY3Rpb24gKi8KLQlpZiAoZW1pZjFfc2l6ZSAmJiBlbWlmMl9zaXplKSB7Ci0JCW1hcHBlZF9zaXplID0gbWluKGVtaWYxX3NpemUsIGVtaWYyX3NpemUpOwotCQlzZWN0aW9uX21hcCA9IERNTV9MSVNBX01BUF9JTlRFUkxFQVZFRF9CQVNFX1ZBTDsKLQkJc2VjdGlvbl9tYXAgfD0gMCA8PCBPTUFQNDRYWF9TRFJDX0FERFJfU0hJRlQ7Ci0JCS8qIG9ubHkgTVNCICovCi0JCXNlY3Rpb25fbWFwIHw9IChzeXNfYWRkciA+PiAyNCkgPDwKLQkJCQlPTUFQNDRYWF9TWVNfQUREUl9TSElGVDsKLQkJc2VjdGlvbl9tYXAgfD0gZ2V0X2RtbV9zZWN0aW9uX3NpemVfbWFwKG1hcHBlZF9zaXplICogMikKLQkJCQk8PCBPTUFQNDRYWF9TWVNfU0laRV9TSElGVDsKLQkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzMgPSBzZWN0aW9uX21hcDsKLQkJZW1pZjFfc2l6ZSAtPSBtYXBwZWRfc2l6ZTsKLQkJZW1pZjJfc2l6ZSAtPSBtYXBwZWRfc2l6ZTsKLQkJc3lzX2FkZHIgKz0gKG1hcHBlZF9zaXplICogMik7Ci0JCXNlY3Rpb25fY250LS07Ci0JfQotCi0JLyoKLQkgKiBTaW5nbGUgRU1JRiBzZWN0aW9uKHdlIGNhbiBoYXZlIGEgbWF4aW11bSBvZiAxIHNpbmdsZSBFTUlGCi0JICogc2VjdGlvbi0gZWl0aGVyIEVNSUYxIG9yIEVNSUYyIG9yIG5vbmUsIGJ1dCBub3QgYm90aCkKLQkgKi8KLQlpZiAoZW1pZjFfc2l6ZSkgewotCQlzZWN0aW9uX21hcCA9IERNTV9MSVNBX01BUF9FTUlGMV9PTkxZX0JBU0VfVkFMOwotCQlzZWN0aW9uX21hcCB8PSBnZXRfZG1tX3NlY3Rpb25fc2l6ZV9tYXAoZW1pZjFfc2l6ZSkKLQkJCQk8PCBPTUFQNDRYWF9TWVNfU0laRV9TSElGVDsKLQkJLyogb25seSBNU0IgKi8KLQkJc2VjdGlvbl9tYXAgfD0gKG1hcHBlZF9zaXplID4+IDI0KSA8PAotCQkJCU9NQVA0NFhYX1NEUkNfQUREUl9TSElGVDsKLQkJLyogb25seSBNU0IgKi8KLQkJc2VjdGlvbl9tYXAgfD0gKHN5c19hZGRyID4+IDI0KSA8PCBPTUFQNDRYWF9TWVNfQUREUl9TSElGVDsKLQkJc2VjdGlvbl9jbnQtLTsKLQl9Ci0JaWYgKGVtaWYyX3NpemUpIHsKLQkJc2VjdGlvbl9tYXAgPSBETU1fTElTQV9NQVBfRU1JRjJfT05MWV9CQVNFX1ZBTDsKLQkJc2VjdGlvbl9tYXAgfD0gZ2V0X2RtbV9zZWN0aW9uX3NpemVfbWFwKGVtaWYyX3NpemUpIDw8Ci0JCQkJT01BUDQ0WFhfU1lTX1NJWkVfU0hJRlQ7Ci0JCS8qIG9ubHkgTVNCICovCi0JCXNlY3Rpb25fbWFwIHw9IG1hcHBlZF9zaXplID4+IDI0IDw8IE9NQVA0NFhYX1NEUkNfQUREUl9TSElGVDsKLQkJLyogb25seSBNU0IgKi8KLQkJc2VjdGlvbl9tYXAgfD0gc3lzX2FkZHIgPj4gMjQgPDwgT01BUDQ0WFhfU1lTX0FERFJfU0hJRlQ7Ci0JCXNlY3Rpb25fY250LS07Ci0JfQotCi0JaWYgKHNlY3Rpb25fY250ID09IDIpIHsKLQkJLyogT25seSAxIHNlY3Rpb24gLSBlaXRoZXIgc3ltbWV0cmljIG9yIHNpbmdsZSBFTUlGICovCi0JCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8zID0gc2VjdGlvbl9tYXA7Ci0JCWxpc19tYXBfcmVnc19jYWxjdWxhdGVkLmRtbV9saXNhX21hcF8yID0gMDsKLQkJbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQuZG1tX2xpc2FfbWFwXzEgPSAwOwotCX0gZWxzZSB7Ci0JCS8qIDIgc2VjdGlvbnMgLSAxIHN5bW1ldHJpYywgMSBzaW5nbGUgRU1JRiAqLwotCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMiA9IHNlY3Rpb25fbWFwOwotCQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMSA9IDA7Ci0JfQotCi0JLyogVFJBUCBmb3IgaW52YWxpZCBUSUxFUiBtYXBwaW5ncyBpbiBzZWN0aW9uIDAgKi8KLQlsaXNfbWFwX3JlZ3NfY2FsY3VsYXRlZC5kbW1fbGlzYV9tYXBfMCA9IERNTV9MSVNBX01BUF8wX0lOVkFMX0FERFJfVFJBUDsKLQotCWxpc2FfbWFwX3JlZ3MgPSAmbGlzX21hcF9yZWdzX2NhbGN1bGF0ZWQ7Ci0jZW5kaWYKLQlzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKmh3X2xpc2FfbWFwX3JlZ3MgPQotCSAgICAoc3RydWN0IGRtbV9saXNhX21hcF9yZWdzICopYmFzZTsKLQotCXdyaXRlbCgwLCAmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzMpOwotCXdyaXRlbCgwLCAmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzIpOwotCXdyaXRlbCgwLCAmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzEpOwotCXdyaXRlbCgwLCAmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzApOwotCi0Jd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8zLAotCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzMpOwotCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMiwKLQkJJmh3X2xpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8yKTsKLQl3cml0ZWwobGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzEsCi0JCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSk7Ci0Jd3JpdGVsKGxpc2FfbWFwX3JlZ3MtPmRtbV9saXNhX21hcF8wLAotCQkmaHdfbGlzYV9tYXBfcmVncy0+ZG1tX2xpc2FfbWFwXzApOwotCi0JaWYgKG9tYXBfcmV2aXNpb24oKSA+PSBPTUFQNDQ2MF9FUzFfMCkgewotCQlod19saXNhX21hcF9yZWdzID0KLQkJICAgIChzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKilPTUFQNDRYWF9NQV9MSVNBX01BUF9CQVNFOwotCi0JCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMywKLQkJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMyk7Ci0JCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMiwKLQkJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMik7Ci0JCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSwKLQkJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMSk7Ci0JCXdyaXRlbChsaXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCwKLQkJCSZod19saXNhX21hcF9yZWdzLT5kbW1fbGlzYV9tYXBfMCk7Ci0JfQotfQotCi0vKgotICogU0RSQU0gaW5pdGlhbGl6YXRpb246Ci0gKiBTRFJBTSBpbml0aWFsaXphdGlvbiBoYXMgdHdvIHBhcnRzOgotICogMS4gQ29uZmlndXJpbmcgdGhlIFNEUkFNIGRldmljZQotICogMi4gVXBkYXRlIHRoZSBBQyB0aW1pbmdzIHJlbGF0ZWQgcGFyYW1ldGVycyBpbiB0aGUgRU1JRiBtb2R1bGUKLSAqICgxKSBzaG91bGQgYmUgZG9uZSBvbmx5IG9uY2UgYW5kIHNob3VsZCBub3QgYmUgZG9uZSB3aGlsZSB3ZSBhcmUKLSAqIHJ1bm5pbmcgZnJvbSBTRFJBTS4KLSAqICgyKSBjYW4gYW5kIHNob3VsZCBiZSBkb25lIG1vcmUgdGhhbiBvbmNlIGlmIE9QUCBjaGFuZ2VzLgotICogUGFydGljdWxhcmx5LCB0aGlzIG1heSBiZSBuZWVkZWQgd2hlbiB3ZSBib290IHdpdGhvdXQgU1BMIGFuZAotICogYW5kIHVzaW5nIENvbmZpZ3VyYXRpb24gSGVhZGVyKENIKS4gUk9NIGNvZGUgc3VwcG9ydHMgb25seSBhdCA1MCUgT1BQCi0gKiBhdCBib290IChsb3cgcG93ZXIgYm9vdCkuIFNvIHUtYm9vdCBoYXMgdG8gc3dpdGNoIHRvIE9QUDEwMCBhbmQgdXBkYXRlCi0gKiB0aGUgZnJlcXVlbmN5LiBTbywKLSAqIERvaW5nICgxKSBhbmQgKDIpIG1ha2VzIHNlbnNlIC0gZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbgotICogRG9pbmcgKDIpIGFuZCBub3QgKDEpIG1ha2VzIHNlbnNlIC0gT1BQIGNoYW5nZSAod2hlbiB1c2luZyBDSCkKLSAqIERvaW5nICgxKSBhbmQgbm90ICgyKSBkb2VuJ3QgbWFrZSBzZW5zZQotICogU2VlIGRvX3NkcmFtX2luaXQoKSBmb3IgdGhlIGRldGFpbHMKLSAqLwotdm9pZCBzZHJhbV9pbml0KHZvaWQpCi17Ci0JdTMyIGluX3NkcmFtLCBzaXplX3Byb2csIHNpemVfZGV0ZWN0OwotCi0JZGVidWcoIj4+c2RyYW1faW5pdCgpXG4iKTsKLQotCWlmIChvbWFwNF9od19pbml0X2NvbnRleHQoKSA9PSBPTUFQX0lOSVRfQ09OVEVYVF9VQk9PVF9BRlRFUl9TUEwpCi0JCXJldHVybjsKLQotCWluX3NkcmFtID0gcnVubmluZ19mcm9tX3NkcmFtKCk7Ci0JZGVidWcoImluX3NkcmFtID0gJWRcbiIsIGluX3NkcmFtKTsKLQotCWlmICghaW5fc2RyYW0pIHsKLQkJYnlwYXNzX2RwbGwoJnByY20tPmNtX2Nsa21vZGVfZHBsbF9jb3JlKTsKLQl9Ci0KLQlkb19zZHJhbV9pbml0KE9NQVA0NFhYX0VNSUYxKTsKLQlkb19zZHJhbV9pbml0KE9NQVA0NFhYX0VNSUYyKTsKLQotCWlmICghaW5fc2RyYW0pIHsKLQkJZG1tX2luaXQoT01BUDQ0WFhfRE1NX0xJU0FfTUFQX0JBU0UpOwotCQllbWlmX3Bvc3RfaW5pdF9jb25maWcoT01BUDQ0WFhfRU1JRjEpOwotCQllbWlmX3Bvc3RfaW5pdF9jb25maWcoT01BUDQ0WFhfRU1JRjIpOwotCi0JfQotCi0JLyogZm9yIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIHRvIHRha2UgZWZmZWN0ICovCi0JZnJlcV91cGRhdGVfY29yZSgpOwotCi0JLyogRG8gc29tZSB0ZXN0aW5nIGFmdGVyIHRoZSBpbml0ICovCi0JaWYgKCFpbl9zZHJhbSkgewotCQlzaXplX3Byb2cgPSBvbWFwNF9zZHJhbV9zaXplKCk7Ci0JCXNpemVfZGV0ZWN0ID0gZ2V0X3JhbV9zaXplKChsb25nICopQ09ORklHX1NZU19TRFJBTV9CQVNFLAotCQkJCQkJc2l6ZV9wcm9nKTsKLQkJLyogQ29tcGFyZSB3aXRoIHRoZSBzaXplIHByb2dyYW1tZWQgKi8KLQkJaWYgKHNpemVfZGV0ZWN0ICE9IHNpemVfcHJvZykgewotCQkJcHJpbnRmKCJTRFJBTTogaWRlbnRpZmllZCBzaXplIG5vdCBzYW1lIGFzIGV4cGVjdGVkIgotCQkJCSIgc2l6ZSBpZGVudGlmaWVkOiAleCBleHBlY3RlZDogJXhcbiIsCi0JCQkJc2l6ZV9kZXRlY3QsCi0JCQkJc2l6ZV9wcm9nKTsKLQkJfSBlbHNlCi0JCQlkZWJ1ZygiZ2V0X3JhbV9zaXplKCkgc3VjY2Vzc2Z1bCIpOwotCX0KLQotCWRlYnVnKCI8PHNkcmFtX2luaXQoKVxuIik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvaHdpbml0LmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvaHdpbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjOWIxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9od2luaXQuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqCisgKiBDb21tb24gZnVuY3Rpb25zIGZvciBPTUFQNCBiYXNlZCBib2FyZHMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqCisgKiBBdXRob3IgOgorICoJQW5lZXNoIFYJPGFuZWVzaEB0aS5jb20+CisgKglTdGV2ZSBTYWtvbWFuCTxzdGV2ZUBzYWtvbWFuLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FybXY3Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL2VtaWYuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCit1MzIgKmNvbnN0IG9tYXA0X3JldmlzaW9uID0gKHUzMiAqKU9NQVA0X1NSQU1fU0NSQVRDSF9PTUFQNF9SRVY7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua180NHh4WzZdID0geworCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPMV9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVA0NFhYX0dQSU8yX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzNfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQNDRYWF9HUElPNF9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVA0NFhYX0dQSU81X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDQ0WFhfR1BJTzZfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorfTsKKworY29uc3Qgc3RydWN0IGdwaW9fYmFuayAqY29uc3Qgb21hcF9ncGlvX2JhbmsgPSBncGlvX2JhbmtfNDR4eDsKKworI2lmZGVmIENPTkZJR19TUExfQlVJTEQKKy8qCisgKiBTb21lIHR1bmluZyBvZiBJT3MgZm9yIG9wdGltYWwgcG93ZXIgYW5kIHBlcmZvcm1hbmNlCisgKi8KK3ZvaWQgZG9faW9fc2V0dGluZ3Modm9pZCkKK3sKKwl1MzIgbHBkZHIyaW87CisJc3RydWN0IGNvbnRyb2xfbHBkZHIyaW9fcmVncyAqbHBkZHIyaW9fcmVncyA9CisJCShzdHJ1Y3QgY29udHJvbF9scGRkcjJpb19yZWdzICopTFBERFIyX0lPX1JFR1NfQkFTRTsKKwlzdHJ1Y3Qgb21hcDRfc3lzX2N0cmxfcmVncyAqY29uc3QgY3RybCA9CisJCShzdHJ1Y3Qgb21hcDRfc3lzX2N0cmxfcmVncyAqKVNZU0NUUkxfR0VORVJBTF9DT1JFX0JBU0U7CisKKwl1MzIgb21hcDRfcmV2ID0gb21hcF9yZXZpc2lvbigpOworCisJaWYgKG9tYXA0X3JldiA9PSBPTUFQNDQzMF9FUzFfMCkKKwkJbHBkZHIyaW8gPSBDT05UUk9MX0xQRERSMklPX1NMRVdfMTI1UFNfRFJWOF9QVUxMX0RPV047CisJZWxzZSBpZiAob21hcDRfcmV2ID09IE9NQVA0NDMwX0VTMl8wKQorCQlscGRkcjJpbyA9IENPTlRST0xfTFBERFIySU9fU0xFV18zMjVQU19EUlY4X0dBVEVfS0VFUEVSOworCWVsc2UKKwkJbHBkZHIyaW8gPSBDT05UUk9MX0xQRERSMklPX1NMRVdfMzE1UFNfRFJWMTJfUFVMTF9ET1dOOworCisJLyogRU1JRjEgKi8KKwl3cml0ZWwobHBkZHIyaW8sICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMV8wKTsKKwl3cml0ZWwobHBkZHIyaW8sICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMV8xKTsKKwkvKiBObyBwdWxsIGZvciBHUjEwIGFzIHBlciBodyB0ZWFtJ3MgcmVjb21tZW5kYXRpb24gKi8KKwl3cml0ZWwobHBkZHIyaW8gJiB+TFBERFIySU9fR1IxMF9XRF9NQVNLLAorCQkmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzFfMik7CisJd3JpdGVsKENPTlRST0xfTFBERFIySU9fM19WQUwsICZscGRkcjJpb19yZWdzLT5jb250cm9sX2xwZGRyMmlvMV8zKTsKKworCS8qIEVNSUYyICovCisJd3JpdGVsKGxwZGRyMmlvLCAmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzJfMCk7CisJd3JpdGVsKGxwZGRyMmlvLCAmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzJfMSk7CisJLyogTm8gcHVsbCBmb3IgR1IxMCBhcyBwZXIgaHcgdGVhbSdzIHJlY29tbWVuZGF0aW9uICovCisJd3JpdGVsKGxwZGRyMmlvICYgfkxQRERSMklPX0dSMTBfV0RfTUFTSywKKwkJJmxwZGRyMmlvX3JlZ3MtPmNvbnRyb2xfbHBkZHIyaW8yXzIpOworCXdyaXRlbChDT05UUk9MX0xQRERSMklPXzNfVkFMLCAmbHBkZHIyaW9fcmVncy0+Y29udHJvbF9scGRkcjJpbzJfMyk7CisKKwkvKgorCSAqIFNvbWUgb2YgdGhlc2Ugc2V0dGluZ3MgKFRSSU0gdmFsdWVzKSBjb21lIGZyb20gZUZ1c2UgYW5kIGFyZQorCSAqIGluIHR1cm4gcHJvZ3JhbW1lZCBpbiB0aGUgZUZ1c2UgYXQgbWFudWZhY3R1cmluZyB0aW1lIGFmdGVyCisJICogY2FsaWJyYXRpb24gb2YgdGhlIGRldmljZS4gRG8gdGhlIHNvZnR3YXJlIG92ZXItcmlkZSBvbmx5IGlmCisJICogdGhlIGRldmljZSBpcyBub3QgY29ycmVjdGx5IHRyaW1tZWQKKwkgKi8KKwlpZiAoIShyZWFkbCgmY3RybC0+Y29udHJvbF9zdGRfZnVzZV9vcHBfYmdhcCkgJiAweEZGRkYpKSB7CisKKwkJd3JpdGVsKExET1NSQU1fVk9MVF9DVFJMX09WRVJSSURFLAorCQkJJmN0cmwtPmNvbnRyb2xfbGRvc3JhbV9pdmFfdm9sdGFnZV9jdHJsKTsKKworCQl3cml0ZWwoTERPU1JBTV9WT0xUX0NUUkxfT1ZFUlJJREUsCisJCQkmY3RybC0+Y29udHJvbF9sZG9zcmFtX21wdV92b2x0YWdlX2N0cmwpOworCisJCXdyaXRlbChMRE9TUkFNX1ZPTFRfQ1RSTF9PVkVSUklERSwKKwkJCSZjdHJsLT5jb250cm9sX2xkb3NyYW1fY29yZV92b2x0YWdlX2N0cmwpOworCX0KKworCWlmICghcmVhZGwoJmN0cmwtPmNvbnRyb2xfZWZ1c2VfMSkpCisJCXdyaXRlbChDT05UUk9MX0VGVVNFXzFfT1ZFUlJJREUsICZjdHJsLT5jb250cm9sX2VmdXNlXzEpOworCisJaWYgKCFyZWFkbCgmY3RybC0+Y29udHJvbF9lZnVzZV8yKSkKKwkJd3JpdGVsKENPTlRST0xfRUZVU0VfMl9PVkVSUklERSwgJmN0cmwtPmNvbnRyb2xfZWZ1c2VfMik7Cit9CisjZW5kaWYKKwordm9pZCBpbml0X29tYXBfcmV2aXNpb24odm9pZCkKK3sKKwkvKgorCSAqIEZvciBzb21lIG9mIHRoZSBFUzIvRVMxIGJvYXJkcyBJRF9DT0RFIGlzIG5vdCByZWxpYWJsZToKKwkgKiBBbHNvLCBFUzEgYW5kIEVTMiBoYXZlIGRpZmZlcmVudCBBUk0gcmV2aXNpb25zCisJICogU28gdXNlIEFSTSByZXZpc2lvbiBmb3IgaWRlbnRpZmljYXRpb24KKwkgKi8KKwl1bnNpZ25lZCBpbnQgYXJtX3JldiA9IGNvcnRleF9yZXYoKTsKKworCXN3aXRjaCAoYXJtX3JldikgeworCWNhc2UgTUlEUl9DT1JURVhfQTlfUjBQMToKKwkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMxXzA7CisJCWJyZWFrOworCWNhc2UgTUlEUl9DT1JURVhfQTlfUjFQMjoKKwkJc3dpdGNoIChyZWFkbChDT05UUk9MX0lEX0NPREUpKSB7CisJCWNhc2UgT01BUDRfQ09OVFJPTF9JRF9DT0RFX0VTMl8wOgorCQkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMyXzA7CisJCQlicmVhazsKKwkJY2FzZSBPTUFQNF9DT05UUk9MX0lEX0NPREVfRVMyXzE6CisJCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMTsKKwkJCWJyZWFrOworCQljYXNlIE9NQVA0X0NPTlRST0xfSURfQ09ERV9FUzJfMjoKKwkJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDMwX0VTMl8yOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9FUzJfMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgTUlEUl9DT1JURVhfQTlfUjFQMzoKKwkJKm9tYXA0X3JldmlzaW9uID0gT01BUDQ0MzBfRVMyXzM7CisJCWJyZWFrOworCWNhc2UgTUlEUl9DT1JURVhfQTlfUjJQMTA6CisJCSpvbWFwNF9yZXZpc2lvbiA9IE9NQVA0NDYwX0VTMV8wOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqb21hcDRfcmV2aXNpb24gPSBPTUFQNDQzMF9TSUxJQ09OX0lEX0lOVkFMSUQ7CisJCWJyZWFrOworCX0KK30KKworI2lmbmRlZiBDT05GSUdfU1lTX0wyQ0FDSEVfT0ZGCit2b2lkIHY3X291dGVyX2NhY2hlX2VuYWJsZSh2b2lkKQoreworCXNldF9wbDMxMF9jdHJsX3JlZygxKTsKK30KKwordm9pZCB2N19vdXRlcl9jYWNoZV9kaXNhYmxlKHZvaWQpCit7CisJc2V0X3BsMzEwX2N0cmxfcmVnKDApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvb21hcDRfbXV4X2RhdGEuaCBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9vbWFwNF9tdXhfZGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTQwMzkxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9vbWFwNF9tdXhfZGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMTAKLSAqIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCwgPHd3dy50aS5jb20+Ci0gKgotICoJQmFsYWppIEtyaXNobmFtb29ydGh5CTxiYWxhaml0a0B0aS5jb20+Ci0gKglBbmVlc2ggVgkJPGFuZWVzaEB0aS5jb20+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotI2lmbmRlZiBfT01BUDRfTVVYX0RBVEFfSF8KLSNkZWZpbmUgX09NQVA0X01VWF9EQVRBX0hfCi0KLSNpbmNsdWRlIDxhc20vYXJjaC9tdXhfb21hcDQuaD4KLQotY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxbXSA9IHsKLQote0dQTUNfQUQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDAgKi8KLXtHUE1DX0FEMSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQxICovCi17R1BNQ19BRDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MiAqLwote0dQTUNfQUQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDMgKi8KLXtHUE1DX0FENCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ0ICovCi17R1BNQ19BRDUsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NSAqLwote0dQTUNfQUQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDYgKi8KLXtHUE1DX0FENywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ3ICovCi17R1BNQ19OT0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0xKX0sCSAvKiBzZG1tYzJfY2xrICovCi17R1BNQ19OV0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfY21kICovCi17U0RNTUMxX0NMSywgKFBUVSB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJIC8qIHNkbW1jMV9jbGsgKi8KLXtTRE1NQzFfQ01ELCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2NtZCAqLwote1NETU1DMV9EQVQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDAgKi8KLXtTRE1NQzFfREFUMSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQxICovCi17U0RNTUMxX0RBVDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MiAqLwote1NETU1DMV9EQVQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDMgKi8KLXtTRE1NQzFfREFUNCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ0ICovCi17U0RNTUMxX0RBVDUsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NSAqLwote1NETU1DMV9EQVQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDYgKi8KLXtTRE1NQzFfREFUNywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ3ICovCi17STJDMV9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMxX3NjbCAqLwote0kyQzFfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMV9zZGEgKi8KLXtJMkMyX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzJfc2NsICovCi17STJDMl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMyX3NkYSAqLwote0kyQzNfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjM19zY2wgKi8KLXtJMkMzX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzNfc2RhICovCi17STJDNF9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmM0X3NjbCAqLwote0kyQzRfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjNF9zZGEgKi8KLXtVQVJUM19DVFNfUkNUWCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJLyogdWFydDNfdHggKi8KLXtVQVJUM19SVFNfU0QsIChNMCl9LAkJCQkJLyogdWFydDNfcnRzX3NkICovCi17VUFSVDNfUlhfSVJSWCwgKElFTiB8IE0wKX0sCQkJCS8qIHVhcnQzX3J4ICovCi17VUFSVDNfVFhfSVJUWCwgKE0wKX0JCQkJCS8qIHVhcnQzX3R4ICovCi0KLX07Ci0KLWNvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsW10gPSB7Ci0KLXtQQUQxX1NSX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sIC8qIHNyX3NjbCAqLwote1BBRDBfU1JfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwgLyogc3Jfc2RhICovCi17UEFEMV9TWVNfMzJLLCAoSUVOIHwgTTApfQkgLyogc3lzXzMyayAqLwotCi19OwotCi1jb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwW10gPSB7Ci0KLXtQQUQxX0ZSRUZfQ0xLNF9SRVEsIChNMyl9LAkgLyogZ3Bpb193azcsIFRQUyAqLwotCi19OwotCi0KLSNlbmRpZiAgLyogX09NQVA0X01VWF9EQVRBX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvc2RyYW1fZWxwaWRhLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvc2RyYW1fZWxwaWRhLmMKaW5kZXggZWRjNTMyNi4uYTVlYzdkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA0L3NkcmFtX2VscGlkYS5jCisrKyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9zZHJhbV9lbHBpZGEuYwpAQCAtMjYsNyArMjYsNyBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8YXNtL2FyY2gvZW1pZi5oPgorI2luY2x1ZGUgPGFzbS9lbWlmLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDQvc3lzX2luZm8uYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9zeXNfaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWU1NzY1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNC9zeXNfaW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAxMAotICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgotICoKLSAqIEF1dGhvciA6Ci0gKglBbmVlc2ggVgk8YW5lZXNoQHRpLmNvbT4KLSAqCVN0ZXZlIFNha29tYW4JPHN0ZXZlQHNha29tYW4uY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgotCi0vKgotICogIGdldF9kZXZpY2VfdHlwZSgpOiB0ZWxsIGlmIEdQL0hTL0VNVS9UU1QKLSAqLwotdTMyIGdldF9kZXZpY2VfdHlwZSh2b2lkKQotewotCXJldHVybiAwOwotfQotCi0vKgotICogZ2V0X2JvYXJkX3JldigpIC0gZ2V0IGJvYXJkIHJldmlzaW9uCi0gKi8KLXUzMiBnZXRfYm9hcmRfcmV2KHZvaWQpCi17Ci0JcmV0dXJuIDB4MjA7Ci19Ci0KLS8qCi0gKiBQcmludCBDUFUgaW5mb3JtYXRpb24KLSAqLwotaW50IHByaW50X2NwdWluZm8odm9pZCkKLXsKLQotCXB1dHMoIkNQVSAgOiBPTUFQNDQzMFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjIyNi9NYWtlZmlsZSBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDgxJQpjb3B5IGZyb20gYm9hcmQvY3NiMjI2L01ha2VmaWxlCmNvcHkgdG8gYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L01ha2VmaWxlCmluZGV4IDZmZTliZWMuLmY4Y2E5YWMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NzYjIyNi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDEwCiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxNCArMjMsMTkgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9ICQob2JqKWxpYiQoQk9BUkQpLm8KK0xJQgk9ICAkKG9iailsaWIkKFNPQykubwogCi1DT0JKUwk6PSBjc2IyMjYubyBmbGFzaC5vCitDT0JKUwkrPSBod2luaXQubworQ09CSlMJKz0gY2xvY2tzLm8KK0NPQkpTCSs9IGVtaWYubworQ09CSlMJKz0gc2RyYW1fZWxwaWRhLm8KIAotU1JDUwk6PSAkKENPQkpTOi5vPS5jKQotT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSAkKFNPQkpTKSkKIAotJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKK2FsbDoJICQob2JqKS5kZXBlbmQgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQogCSQoY2FsbCBjbWRfbGlua19vX3RhcmdldCwgJChPQkpTKSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L2Nsb2Nrcy5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L2Nsb2Nrcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkODgyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvY2xvY2tzLmMKQEAgLTAsMCArMSw0MzIgQEAKKy8qCisgKgorICogQ2xvY2sgaW5pdGlhbGl6YXRpb24gZm9yIE9NQVA1CisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKiBTcmljaGFyYW4gUiA8ci5zcmljaGFyYW5AdGkuY29tPgorICoKKyAqIEJhc2VkIG9uIHByZXZpb3VzIHdvcmsgYnk6CisgKglTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgorICoJUmFqZW5kcmEgTmF5YWsgPHJuYXlha0B0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9vbWFwX2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2Nrcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS91dGlscy5oPgorI2luY2x1ZGUgPGFzbS9vbWFwX2dwaW8uaD4KKworI2lmbmRlZiBDT05GSUdfU1BMX0JVSUxECisvKgorICogcHJpbnRpbmcgdG8gY29uc29sZSBkb2Vzbid0IHdvcmsgdW5sZXNzCisgKiB0aGlzIGNvZGUgaXMgZXhlY3V0ZWQgZnJvbSBTUEwKKyAqLworI2RlZmluZSBwcmludGYoZm10LCBhcmdzLi4uKQorI2RlZmluZSBwdXRzKHMpCisjZW5kaWYKKworc3RydWN0IG9tYXA1X3ByY21fcmVncyAqY29uc3QgcHJjbSA9IChzdHJ1Y3Qgb21hcDVfcHJjbV9yZWdzICopMHg0QTAwNDEwMDsKKworY29uc3QgdTMyIHN5c19jbGtfYXJyYXlbOF0gPSB7CisJMTIwMDAwMDAsCSAgICAgICAvKiAxMiBNSHogKi8KKwkwLAkJICAgICAgIC8qIE5BICovCisJMTY4MDAwMDAsCSAgICAgICAvKiAxNi44IE1IeiAqLworCTE5MjAwMDAwLAkgICAgICAgLyogMTkuMiBNSHogKi8KKwkyNjAwMDAwMCwJICAgICAgIC8qIDI2IE1IeiAqLworCTAsCQkgICAgICAgLyogTkEgKi8KKwkzODQwMDAwMCwJICAgICAgIC8qIDM4LjQgTUh6ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIG1wdV9kcGxsX3BhcmFtc18xXzVnaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7MTI1LCAwLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEyIE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7NjI1LCA2LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE2LjggTUh6ICovCisJezYyNSwgNywgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxOS4yIE1IeiAqLworCXs3NTAsIDEyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI2IE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7NjI1LCAxNSwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9CS8qIDM4LjQgTUh6ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIG1wdV9kcGxsX3BhcmFtc18yZ2h6W05VTV9TWVNfQ0xLU10gPSB7CisJezUwMCwgMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMiBNSHogICAqLworCXstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezIwMjQsIDE2LCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE2LjggTUh6ICovCisJezYyNSwgNSwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxOS4yIE1IeiAqLworCXsxMDAwLCAxMiwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNiBNSHogICAqLworCXstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI3IE1IeiAgICovCisJezYyNSwgMTEsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfQkvKiAzOC40IE1IeiAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBtcHVfZHBsbF9wYXJhbXNfMTEwMG1oeltOVU1fU1lTX0NMS1NdID0geworCXsyNzUsIDIsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTIgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXsxMzc1LCAyMCwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxNi44IE1IeiAqLworCXsxMzc1LCAyMywgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxOS4yIE1IeiAqLworCXs1NTAsIDEyLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI2IE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7MTM3NSwgNDcsIDEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfQkvKiAzOC40IE1IeiAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBtcHVfZHBsbF9wYXJhbXNfNTUwbWh6W05VTV9TWVNfQ0xLU10gPSB7CisJezI3NSwgMiwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMiBNSHogICAqLworCXstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezEzNzUsIDIwLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE2LjggTUh6ICovCisJezEzNzUsIDIzLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezU1MCwgMTIsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXsxMzc1LCA0NywgMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9CS8qIDM4LjQgTUh6ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zCisJCQljb3JlX2RwbGxfcGFyYW1zXzIxMjhtaHpfZGRyNTMyW05VTV9TWVNfQ0xLU10gPSB7CisJezI2NiwgMiwgMSwgNSwgOCwgNCwgNjIsIDUsIDUsIDd9LAkJLyogMTIgTUh6ICAgKi8KKwl7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXs1NzAsIDgsIDEsIDUsIDgsIDQsIDYyLCA1LCA1LCA3fSwJCS8qIDE2LjggTUh6ICovCisJezY2NSwgMTEsIDEsIDUsIDgsIDQsIDYyLCA1LCA1LCA3fSwJCS8qIDE5LjIgTUh6ICovCisJezUzMiwgMTIsIDEsIDUsIDgsIDQsIDYyLCA1LCA1LCA3fSwJCS8qIDI2IE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7NjY1LCAyMywgMSwgNSwgOCwgNCwgNjIsIDUsIDUsIDd9CQkvKiAzOC40IE1IeiAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcworCQkJY29yZV9kcGxsX3BhcmFtc18yMTI4bWh6X2RkcjI2NltOVU1fU1lTX0NMS1NdID0geworCXsyNjYsIDIsIDIsIDUsIDgsIDQsIDYyLCA1LCA1LCA3fSwJCS8qIDEyIE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7NTcwLCA4LCAyLCA1LCA4LCA0LCA2MiwgNSwgNSwgN30sCQkvKiAxNi44IE1IeiAqLworCXs2NjUsIDExLCAyLCA1LCA4LCA0LCA2MiwgNSwgNSwgN30sCQkvKiAxOS4yIE1IeiAqLworCXs1MzIsIDEyLCAyLCA1LCA4LCA0LCA2MiwgNSwgNSwgN30sCQkvKiAyNiBNSHogICAqLworCXstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDI3IE1IeiAgICovCisJezY2NSwgMjMsIDIsIDUsIDgsIDQsIDYyLCA1LCA1LCA3fQkJLyogMzguNCBNSHogKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgcGVyX2RwbGxfcGFyYW1zXzc2OG1oeltOVU1fU1lTX0NMS1NdID0geworCXszMiwgMCwgNCwgMywgNiwgNCwgLTEsIDIsIC0xLCAtMX0sCQkvKiAxMiBNSHogICAqLworCXstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDEzIE1IeiAgICovCisJezE2MCwgNiwgNCwgMywgNiwgNCwgLTEsIDIsIC0xLCAtMX0sCQkvKiAxNi44IE1IeiAqLworCXsyMCwgMCwgNCwgMywgNiwgNCwgLTEsIDIsIC0xLCAtMX0sCQkvKiAxOS4yIE1IeiAqLworCXsxOTIsIDEyLCA0LCAzLCA2LCA0LCAtMSwgMiwgLTEsIC0xfSwJCS8qIDI2IE1IeiAgICovCisJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7MTAsIDAsIDQsIDMsIDYsIDQsIC0xLCAyLCAtMSwgLTF9CQkvKiAzOC40IE1IeiAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyBpdmFfZHBsbF9wYXJhbXNfMjMzMG1oeltOVU1fU1lTX0NMS1NdID0geworCXs5MzEsIDExLCAtMSwgLTEsIDQsIDcsIC0xLCAtMX0sCS8qIDEyIE1IeiAgICovCisJezkzMSwgMTIsIC0xLCAtMSwgNCwgNywgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7NjY1LCAxMSwgLTEsIC0xLCA0LCA3LCAtMSwgLTF9LAkvKiAxNi44IE1IeiAqLworCXs3MjcsIDE0LCAtMSwgLTEsIDQsIDcsIC0xLCAtMX0sCS8qIDE5LjIgTUh6ICovCisJezkzMSwgMjUsIC0xLCAtMSwgNCwgNywgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7OTMxLCAyNiwgLTEsIC0xLCA0LCA3LCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXs0MTIsIDE2LCAtMSwgLTEsIDQsIDcsIC0xLCAtMX0JCS8qIDM4LjQgTUh6ICovCit9OworCisvKiBBQkUgTSAmIE4gdmFsdWVzIHdpdGggc3lzX2NsayBhcyBzb3VyY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMKKwkJYWJlX2RwbGxfcGFyYW1zX3N5c2Nsa18xOTY2MDhraHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7NDksIDUsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTIgTUh6ICAgKi8KKwl7NjgsIDgsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTMgTUh6ICAgKi8KKwl7MzUsIDUsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTYuOCBNSHogKi8KKwl7NDYsIDgsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMTkuMiBNSHogKi8KKwl7MzQsIDgsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7MjksIDcsIDEsIDEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjcgTUh6ICAgKi8KKwl7NjQsIDI0LCAxLCAxLCAtMSwgLTEsIC0xLCAtMX0JLyogMzguNCBNSHogKi8KK307CisKKy8qIEFCRSBNICYgTiB2YWx1ZXMgd2l0aCAzMksgY2xvY2sgYXMgc291cmNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zIGFiZV9kcGxsX3BhcmFtc18zMmtfMTk2NjA4a2h6ID0geworCTc1MCwgMCwgMSwgMSwgLTEsIC0xLCAtMSwgLTEKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgdXNiX2RwbGxfcGFyYW1zXzE5MjBtaHpbTlVNX1NZU19DTEtTXSA9IHsKKwl7ODAsIDAsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCQkvKiAxMiBNSHogICAqLworCXs5NjAsIDEyLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAxMyBNSHogICAqLworCXs0MDAsIDYsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCS8qIDE2LjggTUh6ICovCisJezUwLCAwLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkJLyogMTkuMiBNSHogKi8KKwl7NDgwLCAxMiwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xfSwJLyogMjYgTUh6ICAgKi8KKwl7MzIwLCA4LCAyLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAkvKiAyNyBNSHogICAqLworCXsyNSwgMCwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xfQkJLyogMzguNCBNSHogKi8KK307CisKK3ZvaWQgc2V0dXBfcG9zdF9kaXZpZGVycyh1MzIgKmNvbnN0IGJhc2UsIGNvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBkcGxsX3JlZ3MgKmNvbnN0IGRwbGxfcmVncyA9IChzdHJ1Y3QgZHBsbF9yZWdzICopYmFzZTsKKworCS8qIFNldHVwIHBvc3QtZGl2aWRlcnMgKi8KKwlpZiAocGFyYW1zLT5tMiA+PSAwKQorCQl3cml0ZWwocGFyYW1zLT5tMiwgJmRwbGxfcmVncy0+Y21fZGl2X20yX2RwbGwpOworCWlmIChwYXJhbXMtPm0zID49IDApCisJCXdyaXRlbChwYXJhbXMtPm0zLCAmZHBsbF9yZWdzLT5jbV9kaXZfbTNfZHBsbCk7CisJaWYgKHBhcmFtcy0+aDExID49IDApCisJCXdyaXRlbChwYXJhbXMtPmgxMSwgJmRwbGxfcmVncy0+Y21fZGl2X2gxMV9kcGxsKTsKKwlpZiAocGFyYW1zLT5oMTIgPj0gMCkKKwkJd3JpdGVsKHBhcmFtcy0+aDEyLCAmZHBsbF9yZWdzLT5jbV9kaXZfaDEyX2RwbGwpOworCWlmIChwYXJhbXMtPmgxMyA+PSAwKQorCQl3cml0ZWwocGFyYW1zLT5oMTMsICZkcGxsX3JlZ3MtPmNtX2Rpdl9oMTNfZHBsbCk7CisJaWYgKHBhcmFtcy0+aDE0ID49IDApCisJCXdyaXRlbChwYXJhbXMtPmgxNCwgJmRwbGxfcmVncy0+Y21fZGl2X2gxNF9kcGxsKTsKKwlpZiAocGFyYW1zLT5oMjIgPj0gMCkKKwkJd3JpdGVsKHBhcmFtcy0+aDIyLCAmZHBsbF9yZWdzLT5jbV9kaXZfaDIyX2RwbGwpOworCWlmIChwYXJhbXMtPmgyMyA+PSAwKQorCQl3cml0ZWwocGFyYW1zLT5oMjMsICZkcGxsX3JlZ3MtPmNtX2Rpdl9oMjNfZHBsbCk7Cit9CisKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X21wdV9kcGxsX3BhcmFtcyh2b2lkKQoreworCXUzMiBzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlyZXR1cm4gJm1wdV9kcGxsX3BhcmFtc18xMTAwbWh6W3N5c2Nsa19pbmRdOworfQorCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9jb3JlX2RwbGxfcGFyYW1zKHZvaWQpCit7CisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCisJLyogQ29uZmlndXJpbmcgdGhlIEREUiB0byBiZSBhdCA1MzJtaHogKi8KKwlyZXR1cm4gJmNvcmVfZHBsbF9wYXJhbXNfMjEyOG1oel9kZHIyNjZbc3lzY2xrX2luZF07CisKK30KKworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfcGVyX2RwbGxfcGFyYW1zKHZvaWQpCit7CisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiAmcGVyX2RwbGxfcGFyYW1zXzc2OG1oeltzeXNjbGtfaW5kXTsKK30KKworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfaXZhX2RwbGxfcGFyYW1zKHZvaWQpCit7CisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiAmaXZhX2RwbGxfcGFyYW1zXzIzMzBtaHpbc3lzY2xrX2luZF07Cit9CisKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X3VzYl9kcGxsX3BhcmFtcyh2b2lkKQoreworCXUzMiBzeXNjbGtfaW5kID0gZ2V0X3N5c19jbGtfaW5kZXgoKTsKKwlyZXR1cm4gJnVzYl9kcGxsX3BhcmFtc18xOTIwbWh6W3N5c2Nsa19pbmRdOworfQorCitjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9hYmVfZHBsbF9wYXJhbXModm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU1lTX09NQVBfQUJFX1NZU0NLCisJdTMyIHN5c2Nsa19pbmQgPSBnZXRfc3lzX2Nsa19pbmRleCgpOworCXJldHVybiAmYWJlX2RwbGxfcGFyYW1zX3N5c2Nsa18xOTY2MDhraHpbc3lzY2xrX2luZF07CisjZWxzZQorCXJldHVybiAmYWJlX2RwbGxfcGFyYW1zXzMya18xOTY2MDhraHo7CisjZW5kaWYKK30KKworLyoKKyAqIFNldHVwIHRoZSB2b2x0YWdlcyBmb3IgdmRkX21wdSwgdmRkX2NvcmUsIGFuZCB2ZGRfaXZhCisgKiBXZSBzZXQgdGhlIG1heGltdW0gdm9sdGFnZXMgYWxsb3dlZCBoZXJlIGJlY2F1c2UgU21hcnQtUmVmbGV4IGlzIG5vdAorICogZW5hYmxlZCBpbiBib290bG9hZGVyLiBWb2x0YWdlIGluaXRpYWxpemF0aW9uIGluIHRoZSBrZXJuZWwgd2lsbCBzZXQKKyAqIHRoZXNlIHRvIHRoZSBub21pbmFsIHZhbHVlcyBhZnRlciBlbmFibGluZyBTbWFydC1SZWZsZXgKKyAqLwordm9pZCBzY2FsZV92Y29yZXModm9pZCkKK3sKKwl1MzIgdm9sdDsKKworCXNldHVwX3NyaTJjKCk7CisKKwkvKiBFbmFibGUgMS4yMlYgZnJvbSBUUFMgZm9yIHZkZF9tcHUgKi8KKwl2b2x0ID0gMTIyMDsKKwlkb19zY2FsZV90cHM2MjM2MShUUFM2MjM2MV9SRUdfQUREUl9TRVQxLCB2b2x0KTsKKworCS8qIFZDT1JFIDEgLSBmb3IgdmRkX2NvcmUgKi8KKwl2b2x0ID0gMTAwMDsKKwlkb19zY2FsZV92Y29yZShTTVBTX1JFR19BRERSX1ZDT1JFMSwgdm9sdCk7CisKKwkvKiBWQ09SRSAyIC0gZm9yIHZkZF9NTSAqLworCXZvbHQgPSAxMTI1OworCWRvX3NjYWxlX3Zjb3JlKFNNUFNfUkVHX0FERFJfVkNPUkUyLCB2b2x0KTsKK30KKworLyoKKyAqIEVuYWJsZSBlc3NlbnRpYWwgY2xvY2sgZG9tYWlucywgbW9kdWxlcyBhbmQKKyAqIGRvIHNvbWUgYWRkaXRpb25hbCBzcGVjaWFsIHNldHRpbmdzIG5lZWRlZAorICovCit2b2lkIGVuYWJsZV9iYXNpY19jbG9ja3Modm9pZCkKK3sKKwl1MzIgKmNvbnN0IGNsa19kb21haW5zX2Vzc2VudGlhbFtdID0geworCQkmcHJjbS0+Y21fbDRwZXJfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX21lbWlmX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX2w0Y2ZnX2Nsa3N0Y3RybCwKKwkJMAorCX07CisKKwl1MzIgKmNvbnN0IGNsa19tb2R1bGVzX2h3X2F1dG9fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbV9tZW1pZl9lbWlmXzFfY2xrY3RybCwKKwkJJnByY20tPmNtX21lbWlmX2VtaWZfMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRjZmdfbDRfY2ZnX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV93a3VwX2dwaW8xX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncGlvMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3BpbzNfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwaW80X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncGlvNV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3BpbzZfY2xrY3RybCwKKwkJMAorCX07CisKKwl1MzIgKmNvbnN0IGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX2Vzc2VudGlhbFtdID0geworCQkmcHJjbS0+Y21fd2t1cF9ncHRpbWVyMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2hzbW1jMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2hzbW1jMl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3B0aW1lcjJfY2xrY3RybCwKKwkJJnByY20tPmNtX3drdXBfd2R0aW1lcjJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX3VhcnQzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9pMmMxX2Nsa2N0cmwsCisJCTAKKwl9OworCisJLyogRW5hYmxlIG9wdGlvbmFsIGFkZGl0aW9uYWwgZnVuY3Rpb25hbCBjbG9jayBmb3IgR1BJTzQgKi8KKwlzZXRiaXRzX2xlMzIoJnByY20tPmNtX2w0cGVyX2dwaW80X2Nsa2N0cmwsCisJCQlHUElPNF9DTEtDVFJMX09QVEZDTEtFTl9NQVNLKTsKKworCS8qIEVuYWJsZSA5NiBNSHogY2xvY2sgZm9yIE1NQzEgJiBNTUMyICovCisJc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9sM2luaXRfaHNtbWMxX2Nsa2N0cmwsCisJCQlIU01NQ19DTEtDVFJMX0NMS1NFTF9NQVNLKTsKKwlzZXRiaXRzX2xlMzIoJnByY20tPmNtX2wzaW5pdF9oc21tYzJfY2xrY3RybCwKKwkJCUhTTU1DX0NMS0NUUkxfQ0xLU0VMX01BU0spOworCisJLyogU2VsZWN0IDMyS0h6IGNsb2NrIGFzIHRoZSBzb3VyY2Ugb2YgR1BUSU1FUjEgKi8KKwlzZXRiaXRzX2xlMzIoJnByY20tPmNtX3drdXBfZ3B0aW1lcjFfY2xrY3RybCwKKwkJCUdQVElNRVIxX0NMS0NUUkxfQ0xLU0VMX01BU0spOworCisJZG9fZW5hYmxlX2Nsb2NrcyhjbGtfZG9tYWluc19lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfaHdfYXV0b19lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fZXNzZW50aWFsLAorCQkJIDEpOworfQorCit2b2lkIGVuYWJsZV9iYXNpY191Ym9vdF9jbG9ja3Modm9pZCkKK3sKKwl1MzIgKmNvbnN0IGNsa19kb21haW5zX2Vzc2VudGlhbFtdID0geworCQkwCisJfTsKKworCXUzMiAqY29uc3QgY2xrX21vZHVsZXNfaHdfYXV0b19lc3NlbnRpYWxbXSA9IHsKKwkJMAorCX07CisKKwl1MzIgKmNvbnN0IGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX2Vzc2VudGlhbFtdID0geworCQkmcHJjbS0+Y21fbDRwZXJfbWNzcGkxX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9pMmMyX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9pMmMzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9pMmM0X2Nsa2N0cmwsCisJCTAKKwl9OworCisJZG9fZW5hYmxlX2Nsb2NrcyhjbGtfZG9tYWluc19lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfaHdfYXV0b19lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfZXhwbGljaXRfZW5fZXNzZW50aWFsLAorCQkJIDEpOworfQorCisvKgorICogRW5hYmxlIG5vbi1lc3NlbnRpYWwgY2xvY2sgZG9tYWlucywgbW9kdWxlcyBhbmQKKyAqIGRvIHNvbWUgYWRkaXRpb25hbCBzcGVjaWFsIHNldHRpbmdzIG5lZWRlZAorICovCit2b2lkIGVuYWJsZV9ub25fZXNzZW50aWFsX2Nsb2Nrcyh2b2lkKQoreworCXUzMiAqY29uc3QgY2xrX2RvbWFpbnNfbm9uX2Vzc2VudGlhbFtdID0geworCQkmcHJjbS0+Y21fbXB1X20zX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX2l2YWhkX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX2RzcF9jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9kc3NfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fc2d4X2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtMV9hYmVfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fYzJjX2Nsa3N0Y3RybCwKKwkJJnByY20tPmNtX2NhbV9jbGtzdGN0cmwsCisJCSZwcmNtLT5jbV9kc3NfY2xrc3RjdHJsLAorCQkmcHJjbS0+Y21fc2RtYV9jbGtzdGN0cmwsCisJCTAKKwl9OworCisJdTMyICpjb25zdCBjbGtfbW9kdWxlc19od19hdXRvX25vbl9lc3NlbnRpYWxbXSA9IHsKKwkJJnByY20tPmNtX21wdV9tM19tcHVfbTNfY2xrY3RybCwKKwkJJnByY20tPmNtX2l2YWhkX2l2YWhkX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9pdmFoZF9zbDJfY2xrY3RybCwKKwkJJnByY20tPmNtX2RzcF9kc3BfY2xrY3RybCwKKwkJJnByY20tPmNtX2wzXzJfZ3BtY19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbnN0cl9sM18zX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luc3RyX2wzX2luc3RyX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sM2luc3RyX2ludHJjb25uX3dwMV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2hzaV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2hzdXNidGxsX2Nsa2N0cmwsCisJCTAKKwl9OworCisJdTMyICpjb25zdCBjbGtfbW9kdWxlc19leHBsaWNpdF9lbl9ub25fZXNzZW50aWFsW10gPSB7CisJCSZwcmNtLT5jbTFfYWJlX2Flc3NfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfcGRtX2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX2RtaWNfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfbWNhc3BfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfbWNic3AxX2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX21jYnNwMl9jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV9tY2JzcDNfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfc2xpbWJ1c19jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV90aW1lcjVfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfdGltZXI2X2Nsa2N0cmwsCisJCSZwcmNtLT5jbTFfYWJlX3RpbWVyN19jbGtjdHJsLAorCQkmcHJjbS0+Y20xX2FiZV90aW1lcjhfY2xrY3RybCwKKwkJJnByY20tPmNtMV9hYmVfd2R0M19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3B0aW1lcjlfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2dwdGltZXIxMF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3B0aW1lcjExX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9ncHRpbWVyM19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfZ3B0aW1lcjRfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX2hkcTF3X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9tY3NwaTJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX21jc3BpM19jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfbWNzcGk0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl9tbWNzZDNfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX21tY3NkNF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfbW1jc2Q1X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9sNHBlcl91YXJ0MV9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDRwZXJfdWFydDJfY2xrY3RybCwKKwkJJnByY20tPmNtX2w0cGVyX3VhcnQ0X2Nsa2N0cmwsCisJCSZwcmNtLT5jbV93a3VwX2tleWJvYXJkX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV93a3VwX3dkdGltZXIyX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9jYW1faXNzX2Nsa2N0cmwsCisJCSZwcmNtLT5jbV9jYW1fZmRpZl9jbGtjdHJsLAorCQkmcHJjbS0+Y21fZHNzX2Rzc19jbGtjdHJsLAorCQkmcHJjbS0+Y21fc2d4X3NneF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2hzdXNiaG9zdF9jbGtjdHJsLAorCQkmcHJjbS0+Y21fbDNpbml0X2ZzdXNiX2Nsa2N0cmwsCisJCTAKKwl9OworCisJLyogRW5hYmxlIG9wdGlvbmFsIGZ1bmN0aW9uYWwgY2xvY2sgZm9yIElTUyAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fY2FtX2lzc19jbGtjdHJsLCBJU1NfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSyk7CisKKwkvKiBFbmFibGUgYWxsIG9wdGlvbmFsIGZ1bmN0aW9uYWwgY2xvY2tzIG9mIERTUyAqLworCXNldGJpdHNfbGUzMigmcHJjbS0+Y21fZHNzX2Rzc19jbGtjdHJsLCBEU1NfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSyk7CisKKwlkb19lbmFibGVfY2xvY2tzKGNsa19kb21haW5zX25vbl9lc3NlbnRpYWwsCisJCQkgY2xrX21vZHVsZXNfaHdfYXV0b19ub25fZXNzZW50aWFsLAorCQkJIGNsa19tb2R1bGVzX2V4cGxpY2l0X2VuX25vbl9lc3NlbnRpYWwsCisJCQkgMCk7CisKKwkvKiBQdXQgY2FtZXJhIG1vZHVsZSBpbiBubyBzbGVlcCBtb2RlICovCisJY2xyc2V0Yml0c19sZTMyKCZwcmNtLT5jbV9jYW1fY2xrc3RjdHJsLCBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX01BU0ssCisJCQlDRF9DTEtDVFJMX0NMS1RSQ1RSTF9OT19TTEVFUCA8PAorCQkJTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TSElGVCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvY29uZmlnLm1rIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzlmNjk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L2NvbmZpZy5tawpAQCAtMCwwICsxLDI4IEBACisjCisjIENvcHlyaWdodCAyMDExIExpbmFybyBMaW1pdGVkCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIEFuZWVzaCBWIDxhbm5lc2hAdGkuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpZmRlZiBDT05GSUdfU1BMX0JVSUxECitBTEwteQkrPSAkKE9CSlRSRUUpL01MTworZWxzZQorQUxMLXkJKz0gJChvYmopdS1ib290LmltZworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9lbWlmLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvZW1pZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTlmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvZW1pZi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogRU1JRiBwcm9ncmFtbWluZworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIEFuZWVzaCBWIDxhbmVlc2hAdGkuY29tPiBmb3IgT01BUDQKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vZW1pZi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS91dGlscy5oPgorCisjaWZuZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCisjZGVmaW5lIHByaW50X3RpbWluZ19yZWcocmVnKSBkZWJ1ZygjcmVnIiAtIDB4JTA4eFxuIiwgKHJlZykpCitzdGF0aWMgdTMyICpjb25zdCBUX251bSA9ICh1MzIgKilPTUFQNV9TUkFNX1NDUkFUQ0hfRU1JRl9UX05VTTsKK3N0YXRpYyB1MzIgKmNvbnN0IFRfZGVuID0gKHUzMiAqKU9NQVA1X1NSQU1fU0NSQVRDSF9FTUlGX1RfREVOOworc3RhdGljIHUzMiAqY29uc3QgZW1pZl9zaXplcyA9ICh1MzIgKilPTUFQNV9TUkFNX1NDUkFUQ0hfRU1JRl9TSVpFOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MKKy8qIEJhc2UgQUMgVGltaW5nIHZhbHVlcyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yIGZvciA1MzJNSHogb3BlcmF0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHRpbWluZ3NfamVkZWNfNTMyX21oeiA9IHsKKwkubWF4X2ZyZXEgPSA1MzIwMDAwMDAsCisJLlJMID0gOCwKKwkudFJQYWIgPSAyMSwKKwkudFJDRCA9IDE4LAorCS50V1IgPSAxNSwKKwkudFJBU21pbiA9IDQyLAorCS50UlJEID0gMTAsCisJLnRXVFJ4MiA9IDE1LAorCS50WFNSID0gMTQwLAorCS50WFB4MiA9IDE1LAorCS50UkZDYWIgPSAxMzAsCisJLnRSVFB4MiA9IDE1LAorCS50Q0tFID0gMywKKwkudENLRVNSID0gMTUsCisJLnRaUUNTID0gOTAsCisJLnRaUUNMID0gMzYwLAorCS50WlFJTklUID0gMTAwMCwKKwkudERRU0NLTUFYeDIgPSAxMSwKKwkudFJBU21heCA9IDcwLAorCS50RkFXID0gNTAKK307CisKKy8qCisgKiBNaW4gdENLIHZhbHVlcyBzcGVjaWZpZWQgYnkgSkVTRDIwOS0yCisgKiBNaW4gdENLIHNwZWNpZmllcyB0aGUgbWluaW11bSBkdXJhdGlvbiBvZiBzb21lIEFDIHRpbWluZyBwYXJhbWV0ZXJzIGluIHRlcm1zCisgKiBvZiB0aGUgbnVtYmVyIG9mIGN5Y2xlcy4gSWYgdGhlIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIGN5Y2xlcyBiYXNlZCBvbiB0aGUKKyAqIGFic29sdXRlIHRpbWUgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBtaW4gdENLIHZhbHVlLCBtaW4gdENLIHZhbHVlIHNob3VsZAorICogYmUgdXNlZCBpbnN0ZWFkLiBUaGlzIHR5cGljYWxseSBoYXBwZW5zIGF0IGxvdyBmcmVxdWVuY2llcy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfbWluX3RjayBtaW5fdGNrX2plZGVjID0geworCS50UkwgPSAzLAorCS50UlBfQUIgPSAzLAorCS50UkNEID0gMywKKwkudFdSID0gMywKKwkudFJBU19NSU4gPSAzLAorCS50UlJEID0gMiwKKwkudFdUUiA9IDIsCisJLnRYUCA9IDIsCisJLnRSVFAgPSAyLAorCS50Q0tFID0gMywKKwkudENLRVNSID0gMywKKwkudEZBVyA9IDgKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2FjX3RpbWluZ3MgY29uc3QqCisJCQlqZWRlY19hY190aW1pbmdzW01BWF9OVU1fU1BFRURCSU5TXSA9IHsKKwkmdGltaW5nc19qZWRlY181MzJfbWh6Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyBqZWRlY19kZWZhdWx0X3RpbWluZ3MgPSB7CisJLmFjX3RpbWluZ3MgPSBqZWRlY19hY190aW1pbmdzLAorCS5taW5fdGNrID0gJm1pbl90Y2tfamVkZWMKK307CisKK3ZvaWQgZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3ModTMyIGVtaWZfbnIsCisJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczBfZGV2aWNlX3RpbWluZ3MsCisJCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgKipjczFfZGV2aWNlX3RpbWluZ3MpCit7CisJLyogQXNzdW1lIElkZW50aWNhbCBkZXZpY2VzIG9uIEVNSUYxICYgRU1JRjIgKi8KKwkqY3MwX2RldmljZV90aW1pbmdzID0gJmplZGVjX2RlZmF1bHRfdGltaW5nczsKKwkqY3MxX2RldmljZV90aW1pbmdzID0gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1lTX0RFRkFVTFRfTFBERFIyX1RJTUlOR1MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9od2luaXQuYyBiL2FyY2gvYXJtL2NwdS9hcm12Ny9vbWFwNS9od2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYThlMzkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L2h3aW5pdC5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKgorICogRnVuY3Rpb25zIGZvciBvbWFwNSBiYXNlZCBib2FyZHMuCisgKgorICogKEMpIENvcHlyaWdodCAyMDExCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQXV0aG9yIDoKKyAqCUFuZWVzaCBWCTxhbmVlc2hAdGkuY29tPgorICoJU3RldmUgU2Frb21hbgk8c3RldmVAc2Frb21hbi5jb20+CisgKglTcmljaGFyYW4JPHIuc3JpY2hhcmFuQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FybXY3Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3V0aWxzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwordTMyICpjb25zdCBvbWFwNV9yZXZpc2lvbiA9ICh1MzIgKilPTUFQNV9TUkFNX1NDUkFUQ0hfT01BUDVfUkVWOworCitzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfNTR4eFs2XSA9IHsKKwl7ICh2b2lkICopT01BUDU0WFhfR1BJTzFfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQNTRYWF9HUElPMl9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVA1NFhYX0dQSU8zX0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKKwl7ICh2b2lkICopT01BUDU0WFhfR1BJTzRfQkFTRSwgTUVUSE9EX0dQSU9fMjRYWCB9LAorCXsgKHZvaWQgKilPTUFQNTRYWF9HUElPNV9CQVNFLCBNRVRIT0RfR1BJT18yNFhYIH0sCisJeyAodm9pZCAqKU9NQVA1NFhYX0dQSU82X0JBU0UsIE1FVEhPRF9HUElPXzI0WFggfSwKK307CisKK2NvbnN0IHN0cnVjdCBncGlvX2JhbmsgKmNvbnN0IG9tYXBfZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzU0eHg7CisKKyNpZmRlZiBDT05GSUdfU1BMX0JVSUxECisvKgorICogU29tZSB0dW5pbmcgb2YgSU9zIGZvciBvcHRpbWFsIHBvd2VyIGFuZCBwZXJmb3JtYW5jZQorICovCit2b2lkIGRvX2lvX3NldHRpbmdzKHZvaWQpCit7Cit9CisjZW5kaWYKKwordm9pZCBpbml0X29tYXBfcmV2aXNpb24odm9pZCkKK3sKKwkvKgorCSAqIEZvciBzb21lIG9mIHRoZSBFUzIvRVMxIGJvYXJkcyBJRF9DT0RFIGlzIG5vdCByZWxpYWJsZToKKwkgKiBBbHNvLCBFUzEgYW5kIEVTMiBoYXZlIGRpZmZlcmVudCBBUk0gcmV2aXNpb25zCisJICogU28gdXNlIEFSTSByZXZpc2lvbiBmb3IgaWRlbnRpZmljYXRpb24KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcmV2ID0gY29ydGV4X3JldigpOworCisJc3dpdGNoIChyZXYpIHsKKwljYXNlIE1JRFJfQ09SVEVYX0ExNV9SMFAwOgorCQkqb21hcDVfcmV2aXNpb24gPSBPTUFQNTQzMF9FUzFfMDsKKwlkZWZhdWx0OgorCQkqb21hcDVfcmV2aXNpb24gPSBPTUFQNTQzMF9TSUxJQ09OX0lEX0lOVkFMSUQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L3NkcmFtX2VscGlkYS5jIGIvYXJjaC9hcm0vY3B1L2FybXY3L29tYXA1L3NkcmFtX2VscGlkYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMTk4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvb21hcDUvc2RyYW1fZWxwaWRhLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBUaW1pbmcgYW5kIE9yZ2FuaXphdGlvbiBkZXRhaWxzIG9mIHRoZSBFbHBpZGEgcGFydHMgdXNlZCBpbiBPTUFQNQorICogRVZNCisgKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKiBTcmljaGFyYW4gUiA8ci5zcmljaGFyYW5AdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGFzbS9lbWlmLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgZGV0YWlscyBvZiB0aGUgTFBERFIyIFNEUkFNIHBhcnRzIHVzZWQgb24gT01BUDUKKyAqIEVWTS4gU2luY2UgdGhlIHBhcnRzIHVzZWQgYW5kIGdlb21ldHJ5IGFyZSBpZGVudGljYWwgZm9yCisgKiBldm0gZm9yIGEgZ2l2ZW4gT01BUDUgcmV2aXNpb24sIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdAorICogaGVyZSBpbnN0ZWFkIG9mIGJlaW5nIGluIGJvYXJkIGRpcmVjdG9yeS4gSG93ZXZlciB0aGUga2V5IGZ1bmN0aW9ucworICogZXhwb3J0ZWQgYXJlIHdlYWtseSBsaW5rZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBvdmVyLXJpZGRlbiBpbiB0aGUgYm9hcmQKKyAqIGRpcmVjdG9yeSBpZiB0aGVyZSBpcyBhIE9NQVA1IGJvYXJkIGluIHRoZSBmdXR1cmUgdGhhdCB1c2VzIGEgZGlmZmVyZW50CisgKiBtZW1vcnkgZGV2aWNlIG9yIGdlb21ldHJ5LgorICoKKyAqIEZvciBhbnkgbmV3IGJvYXJkIHdpdGggZGlmZmVyZW50IG1lbW9yeSBkZXZpY2VzIG92ZXItcmlkZSBvbmUgb3IgbW9yZQorICogb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXMgcGVyIHRoZSBDT05GSUcgZmxhZ3MgeW91IGludGVuZCB0byBlbmFibGU6CisgKiAtIGVtaWZfZ2V0X3JlZ19kdW1wKCkKKyAqIC0gZW1pZl9nZXRfZG1tX3JlZ3MoKQorICogLSBlbWlmX2dldF9kZXZpY2VfZGV0YWlscygpCisgKiAtIGVtaWZfZ2V0X2RldmljZV90aW1pbmdzKCkKKyAqLworCisjaWZkZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKKworY29uc3Qgc3RydWN0IGVtaWZfcmVncyBlbWlmX3JlZ3NfZWxwaWRhXzUzMl9taHpfMWNzID0geworCS5zZHJhbV9jb25maWdfaW5pdAkJPSAweDgwODAxYUIyLAorCS5zZHJhbV9jb25maWcJCQk9IDB4ODA4MDIyQjIsCisJLnJlZl9jdHJsCQkJPSAweDAwMDAwODFBLAorCS5zZHJhbV90aW0xCQkJPSAweDc3MkY2ODczLAorCS5zZHJhbV90aW0yCQkJPSAweDMwNEExMjlBLAorCS5zZHJhbV90aW0zCQkJPSAweDAyRjdFNDVGLAorCS5yZWFkX2lkbGVfY3RybAkJCT0gMHgwMDA1MDAwMCwKKwkuenFfY29uZmlnCQkJPSAweDAwMEIzMjE1LAorCS50ZW1wX2FsZXJ0X2NvbmZpZwkJPSAweDA4MDAwQTA1LAorCS5lbWlmX2Rkcl9waHlfY3Rscl8xX2luaXQJPSAweDBFMzgyMDBELAorCS5lbWlmX2Rkcl9waHlfY3Rscl8xCQk9IDB4MEUzODIwMEQKK307CisKK2NvbnN0IHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyBsaXNhX21hcF80R194XzFfeF8yID0geworCS5kbW1fbGlzYV9tYXBfMCA9IDB4RkYwMjAxMDAsCisJLmRtbV9saXNhX21hcF8xID0gMCwKKwkuZG1tX2xpc2FfbWFwXzIgPSAwLAorCS5kbW1fbGlzYV9tYXBfMyA9IDB4ODA2NDAzMDAKK307CisKK3N0YXRpYyB2b2lkIGVtaWZfZ2V0X3JlZ19kdW1wX3NkcCh1MzIgZW1pZl9uciwgY29uc3Qgc3RydWN0IGVtaWZfcmVncyAqKnJlZ3MpCit7CisJKnJlZ3MgPSAmZW1pZl9yZWdzX2VscGlkYV81MzJfbWh6XzFjczsKK30KK3ZvaWQgZW1pZl9nZXRfcmVnX2R1bXAodTMyIGVtaWZfbnIsIGNvbnN0IHN0cnVjdCBlbWlmX3JlZ3MgKipyZWdzKQorCV9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJlbWlmX2dldF9yZWdfZHVtcF9zZHAiKSkpOworCitzdGF0aWMgdm9pZCBlbWlmX2dldF9kbW1fcmVnc19zZHAoY29uc3Qgc3RydWN0IGRtbV9saXNhX21hcF9yZWdzCisJCQkJCQkqKmRtbV9saXNhX3JlZ3MpCit7CisJKmRtbV9saXNhX3JlZ3MgPSAmbGlzYV9tYXBfNEdfeF8xX3hfMjsKK30KKwordm9pZCBlbWlmX2dldF9kbW1fcmVncyhjb25zdCBzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgKipkbW1fbGlzYV9yZWdzKQorCV9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJlbWlmX2dldF9kbW1fcmVnc19zZHAiKSkpOworCisjZWxzZQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyBlbHBpZGFfNEdfUzRfZGV0YWlscyA9IHsKKwkudHlwZQkJPSBMUEREUjJfVFlQRV9TNCwKKwkuZGVuc2l0eQk9IExQRERSMl9ERU5TSVRZXzRHYiwKKwkuaW9fd2lkdGgJPSBMUEREUjJfSU9fV0lEVEhfMzIsCisJLm1hbnVmYWN0dXJlcgk9IExQRERSMl9NQU5VRkFDVFVSRVJfRUxQSURBCit9OworCitzdGF0aWMgdm9pZCBlbWlmX2dldF9kZXZpY2VfZGV0YWlsc19zZHAodTMyIGVtaWZfbnIsCisJCXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMF9kZXZpY2VfZGV0YWlscywKKwkJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MxX2RldmljZV9kZXRhaWxzKQoreworCS8qIEVNSUYxICYgRU1JRjIgaGF2ZSBpZGVudGljYWwgY29uZmlndXJhdGlvbiAqLworCSpjczBfZGV2aWNlX2RldGFpbHMgPSBlbHBpZGFfNEdfUzRfZGV0YWlsczsKKworCS8qIE5vdGhpbmcgaXMgY29uZWN0ZWQgb24gY3MxICovCisJY3MxX2RldmljZV9kZXRhaWxzID0gTlVMTDsKK30KKwordm9pZCBlbWlmX2dldF9kZXZpY2VfZGV0YWlscyh1MzIgZW1pZl9uciwKKwkJc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2RldmljZV9kZXRhaWxzLAorCQlzdHJ1Y3QgbHBkZHIyX2RldmljZV9kZXRhaWxzICpjczFfZGV2aWNlX2RldGFpbHMpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoImVtaWZfZ2V0X2RldmljZV9kZXRhaWxzX3NkcCIpKSk7CisKKyNlbmRpZiAvKiBDT05GSUdfU1lTX0VNSUZfUFJFQ0FMQ1VMQVRFRF9USU1JTkdfUkVHUyAqLworCisjaWZuZGVmIENPTkZJR19TWVNfREVGQVVMVF9MUEREUjJfVElNSU5HUworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyB0aW1pbmdzX2plZGVjXzUzMl9taHogPSB7CisJLm1heF9mcmVxCT0gNTMyMDAwMDAwLAorCS5STAkJPSA4LAorCS50UlBhYgkJPSAyMSwKKwkudFJDRAkJPSAxOCwKKwkudFdSCQk9IDE1LAorCS50UkFTbWluCT0gNDIsCisJLnRSUkQJCT0gMTAsCisJLnRXVFJ4MgkJPSAxNSwKKwkudFhTUgkJPSAxNDAsCisJLnRYUHgyCQk9IDE1LAorCS50UkZDYWIJCT0gMTMwLAorCS50UlRQeDIJCT0gMTUsCisJLnRDS0UJCT0gMywKKwkudENLRVNSCQk9IDE1LAorCS50WlFDUwkJPSA5MCwKKwkudFpRQ0wJCT0gMzYwLAorCS50WlFJTklUCT0gMTAwMCwKKwkudERRU0NLTUFYeDIJPSAxMSwKKwkudFJBU21heAk9IDcwLAorCS50RkFXCQk9IDUwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrIG1pbl90Y2tfZWxwaWRhID0geworCS50UkwJCT0gMywKKwkudFJQX0FCCQk9IDMsCisJLnRSQ0QJCT0gMywKKwkudFdSCQk9IDMsCisJLnRSQVNfTUlOCT0gMywKKwkudFJSRAkJPSAyLAorCS50V1RSCQk9IDIsCisJLnRYUAkJPSAyLAorCS50UlRQCQk9IDIsCisJLnRDS0UJCT0gMywKKwkudENLRVNSCQk9IDMsCisJLnRGQVcJCT0gOAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqZWxwaWRhX2FjX3RpbWluZ3NbTUFYX05VTV9TUEVFREJJTlNdID0geworCSZ0aW1pbmdzX2plZGVjXzUzMl9taHoKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzIGVscGlkYV80R19TNF90aW1pbmdzID0geworCS5hY190aW1pbmdzCT0gZWxwaWRhX2FjX3RpbWluZ3MsCisJLm1pbl90Y2sJPSAmbWluX3Rja19lbHBpZGEsCit9OworCit2b2lkIGVtaWZfZ2V0X2RldmljZV90aW1pbmdzX3NkcCh1MzIgZW1pZl9uciwKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMF9kZXZpY2VfdGltaW5ncywKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMV9kZXZpY2VfdGltaW5ncykKK3sKKwkvKiBJZGVudGljYWwgZGV2aWNlcyBvbiBFTUlGMSAmIEVNSUYyICovCisJKmNzMF9kZXZpY2VfdGltaW5ncyA9ICZlbHBpZGFfNEdfUzRfdGltaW5nczsKKwkqY3MxX2RldmljZV90aW1pbmdzID0gTlVMTDsKK30KKwordm9pZCBlbWlmX2dldF9kZXZpY2VfdGltaW5ncyh1MzIgZW1pZl9uciwKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMF9kZXZpY2VfdGltaW5ncywKKwkJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqKmNzMV9kZXZpY2VfdGltaW5ncykKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiZW1pZl9nZXRfZGV2aWNlX3RpbWluZ3Nfc2RwIikpKTsKKworI2VuZGlmIC8qIENPTkZJR19TWVNfREVGQVVMVF9MUEREUjJfVElNSU5HUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybXY3L3M1cC1jb21tb24vcHdtLmMgYi9hcmNoL2FybS9jcHUvYXJtdjcvczVwLWNvbW1vbi9wd20uYwppbmRleCBmZjk1Yjg0Li41OGQyNzllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jcHUvYXJtdjcvczVwLWNvbW1vbi9wd20uYworKysgYi9hcmNoL2FybS9jcHUvYXJtdjcvczVwLWNvbW1vbi9wd20uYwpAQCAtODIsNyArODIsNiBAQAogCXVuc2lnbmVkIGxvbmcgcGVyaW9kOwogCXVuc2lnbmVkIGxvbmcgdGNvbjsKIAl1bnNpZ25lZCBsb25nIHRjbnQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lcl9yYXRlX2h6OwogCXVuc2lnbmVkIGxvbmcgdGNtcDsKIAogCS8qCkBAIC0xMDAsNyArOTksNiBAQAogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBjaGFuZ2luZyB0aGUgY2xvY2sgcmF0ZSBvZiB0aGUgUFdNICovCiAJdGluX3JhdGUgPSBwd21fY2FsY190aW4ocHdtX2lkLCBwZXJpb2QpOwotCXRpbWVyX3JhdGVfaHogPSB0aW5fcmF0ZTsKIAogCXRpbl9ucyA9IE5TX0lOX0haIC8gdGluX3JhdGU7CiAJdGNudCA9IHBlcmlvZF9ucyAvIHRpbl9uczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9haW50Y19kZWZzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvYWludGNfZGVmcy5oCmluZGV4IDhmMzcwNTMuLjM4ZjgxNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9haW50Y19kZWZzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2FpbnRjX2RlZnMuaApAQCAtNDcsNCArNDcsNiBAQAogCiAjZGVmaW5lIGR2X2FpbnRjX3JlZ3MgKChzdHJ1Y3QgZHZfYWludGNfcmVncyAqKURBVklOQ0lfQVJNX0lOVENfQkFTRSkKIAorI2RlZmluZSBEVl9BSU5UQ19JTlRDVExfSURNT0RFCSgxIDw8IDIpCisKICNlbmRpZiAvKiBfRFZfQUlOVENfREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2FtMTgwOF9sb3dsZXZlbC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2RhODUwX2xvd2xldmVsLmgKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2FtMTgwOF9sb3dsZXZlbC5oCnJlbmFtZSB0byBhcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZGE4NTBfbG93bGV2ZWwuaAppbmRleCAwYmM3Zjc2Li5lNDg5YzQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvYW0xODA4X2xvd2xldmVsLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2RhODUwX2xvd2xldmVsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogU29DLXNwZWNpZmljIGxvd2xldmVsIGNvZGUgZm9yIEFNMTgwOCBhbmQgc2ltaWxhciBjaGlwcworICogU29DLXNwZWNpZmljIGxvd2xldmVsIGNvZGUgZm9yIERBODUwCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDExCiAgKiBIZWlrbyBTY2hvY2hlciwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgaHNAZGVueC5kZS4KQEAgLTIxLDI0ICsyMSwyNCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCi0jaWZuZGVmIF9fQU0xODA4X0xPV0xFVkVMX0gKLSNkZWZpbmUgX19BTTE4MDhfTE9XTEVWRUxfSAorI2lmbmRlZiBfX0RBODUwX0xPV0xFVkVMX0gKKyNkZWZpbmUgX19EQTg1MF9MT1dMRVZFTF9ICiAKIC8qIE5PUiBCb290IENvbmZpZ3VyYXRpb24gV29yZCBGaWVsZCBEZXNjcmlwdGlvbnMgKi8KLSNkZWZpbmUgQU0xODA4X05PUkJPT1RfQ09QWV9YSyhYKQkoKFggLSAxKSA8PCA4KQotI2RlZmluZSBBTTE4MDhfTk9SQk9PVF9NRVRIT0RfRElSRUNUCSgxIDw8IDQpCi0jZGVmaW5lIEFNMTgwOF9OT1JCT09UXzE2QklUCQkoMSA8PCAwKQorI2RlZmluZSBEQTg1MF9OT1JCT09UX0NPUFlfWEsoWCkJKChYIC0gMSkgPDwgOCkKKyNkZWZpbmUgREE4NTBfTk9SQk9PVF9NRVRIT0RfRElSRUNUCSgxIDw8IDQpCisjZGVmaW5lIERBODUwX05PUkJPT1RfMTZCSVQJCSgxIDw8IDApCiAKICNkZWZpbmUgZHZfbWFza2JpdHMoYWRkciwgdmFsKSBcCiAJd3JpdGVsKChyZWFkbChhZGRyKSAmIHZhbCksIGFkZHIpCiAKLXZvaWQgYW0xODA4X3dhaXRsb29wKHVuc2lnbmVkIGxvbmcgbG9vcGNudCk7Ci1pbnQgYW0xODA4X3BsbF9pbml0KHN0cnVjdCBkYXZpbmNpX3BsbGNfcmVncyAqcmVnLCB1bnNpZ25lZCBsb25nIHBsbG11bHQpOwotdm9pZCBhbTE4MDhfbHBjX3RyYW5zaXRpb24odW5zaWduZWQgY2hhciBwc2NudW0sIHVuc2lnbmVkIGNoYXIgbW9kdWxlLAordm9pZCBkYTg1MF93YWl0bG9vcCh1bnNpZ25lZCBsb25nIGxvb3BjbnQpOworaW50IGRhODUwX3BsbF9pbml0KHN0cnVjdCBkYXZpbmNpX3BsbGNfcmVncyAqcmVnLCB1bnNpZ25lZCBsb25nIHBsbG11bHQpOwordm9pZCBkYTg1MF9scGNfdHJhbnNpdGlvbih1bnNpZ25lZCBjaGFyIHBzY251bSwgdW5zaWduZWQgY2hhciBtb2R1bGUsCiAJCXVuc2lnbmVkIGNoYXIgZG9tYWluLCB1bnNpZ25lZCBjaGFyIHN0YXRlKTsKLWludCBhbTE4MDhfZGRyX3NldHVwKHVuc2lnbmVkIGludCBmcmVxKTsKLXZvaWQgYW0xODA4X3BzY19pbml0KHZvaWQpOwotdm9pZCBhbTE4MDhfcGlubXV4X2N0bCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBtYXNrLAoraW50IGRhODUwX2Rkcl9zZXR1cCh2b2lkKTsKK3ZvaWQgZGE4NTBfcHNjX2luaXQodm9pZCk7Cit2b2lkIGRhODUwX3Bpbm11eF9jdGwodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaywKIAl1bnNpZ25lZCBsb25nIHZhbHVlKTsKIAotI2VuZGlmIC8qICNpZm5kZWYgX19BTTE4MDhfTE9XTEVWRUxfSCAqLworI2VuZGlmIC8qICNpZm5kZWYgX19EQTg1MF9MT1dMRVZFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZGRyMl9kZWZzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZGRyMl9kZWZzLmgKaW5kZXggMWI5NDMwYy4uNGY5NDNiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2RkcjJfZGVmcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9kZHIyX2RlZnMuaApAQCAtNjMsNiArNjMsNyBAQAogCiAjZGVmaW5lIERWX0REUl9TRFRNUjJfUkFTTUFYX1NISUZUCTI3CiAjZGVmaW5lIERWX0REUl9TRFRNUjJfWFBfU0hJRlQJMjUKKyNkZWZpbmUgRFZfRERSX1NEVE1SMl9PRFRfU0hJRlQJMjMKICNkZWZpbmUgRFZfRERSX1NEVE1SMl9YU05SX1NISUZUCTE2CiAjZGVmaW5lIERWX0REUl9TRFRNUjJfWFNSRF9TSElGVAk4CiAjZGVmaW5lIERWX0REUl9TRFRNUjJfUlRQX1NISUZUCTUKQEAgLTg0LDYgKzg1LDkgQEAKICNkZWZpbmUgRFZfRERSX1NEQ1JfSUJBTktfU0hJRlQJNAogI2RlZmluZSBEVl9ERFJfU0RDUl9QQUdFU0laRV9TSElGVAkwCiAKKyNkZWZpbmUgRFZfRERSX1NEUkNSX0xQTU9ERU4JKDEgPDwgMzEpCisjZGVmaW5lIERWX0REUl9TRFJDUl9NQ0xLU1RPUEVOCSgxIDw8IDMwKQorCiAjZGVmaW5lIERWX0REUl9TUkNSX0xQTU9ERU5fU0hJRlQJMzEKICNkZWZpbmUgRFZfRERSX1NSQ1JfTUNMS1NUT1BFTl9TSElGVAkzMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZW1pZl9kZWZzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvZW1pZl9kZWZzLmgKaW5kZXggYjQ4ZWMxNy4uYjllNzhhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2VtaWZfZGVmcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtZGF2aW5jaS9lbWlmX2RlZnMuaApAQCAtNzAsNiArNzAsNyBAQAogI2RlZmluZSBEQVZJTkNJX05BTkRGQ1JfMUJJVF9FQ0NfU1RBUlQobikJCSgxIDw8ICg4ICsgKG4tMikpKQogI2RlZmluZSBEQVZJTkNJX05BTkRGQ1JfNEJJVF9FQ0NfU1RBUlQJCQkoMSA8PCAxMikKICNkZWZpbmUgREFWSU5DSV9OQU5ERkNSXzRCSVRfQ0FMQ19TVEFSVAkJCSgxIDw8IDEzKQorI2RlZmluZSBEQVZJTkNJX05BTkRGQ1JfQ1MyTkFORAkJCQkoMSA8PCAwKQogCiAvKiBDaGlwIFNlbGVjdCBzZXR1cCAqLwogI2RlZmluZSBEQVZJTkNJX0FCQ1JfU1RST0JFX1NFTEVDVAkJCSgxIDw8IDMxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL2hhcmR3YXJlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvaGFyZHdhcmUuaAppbmRleCBiZWExNDk5Li4zZTlhM2I2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvaGFyZHdhcmUuaApAQCAtMjMwLDYgKzIzMCw5IEBACiAjZGVmaW5lIERBVklOQ0lfTFBTQ19DRkc1CQkzOAogI2RlZmluZSBEQVZJTkNJX0xQU0NfR0VNCQkzOQogI2RlZmluZSBEQVZJTkNJX0xQU0NfSU1DT1AJCTQwCisjZGVmaW5lIERBVklOQ0lfTFBTQ19WUFNTTUFTVEVSCQk0NworI2RlZmluZSBEQVZJTkNJX0xQU0NfTUpDUAkJNTAKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0hEVklDUAkJNTEKIAogI2RlZmluZSBEQVZJTkNJX0RNNjQ2WF9MUFNDX0VNQUMJMTQKICNkZWZpbmUgREFWSU5DSV9ETTY0NlhfTFBTQ19VQVJUMAkyNgpAQCAtMzg1LDYgKzM4OCwyMCBAQAogI2RlZmluZSBQSU5NVVgzCQkJCTB4MDFjNDAwMGMKICNkZWZpbmUgUElOTVVYNAkJCQkweDAxYzQwMDEwCiAKK3N0cnVjdCBkYXZpbmNpX3VhcnRfY3RybF9yZWdzIHsKKwlkdl9yZWcJcmV2aWQxOworCWR2X3JlZwlyZXM7CisJZHZfcmVnCXB3cmVtdV9tZ210OworCWR2X3JlZwltZHI7Cit9OworCisjZGVmaW5lIERBVklOQ0lfVUFSVF9DVFJMX0JBU0UgMHgyOAorCisvKiBVQVJUIFBXUkVNVV9NR01UIGRlZmluaXRpb25zICovCisjZGVmaW5lIERBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9GUkVFCSgxIDw8IDApCisjZGVmaW5lIERBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9VUlJTVAkoMSA8PCAxMykKKyNkZWZpbmUgREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VUUlNUCSgxIDw8IDE0KQorCiAjZWxzZSAvKiBDT05GSUdfU09DX0RBOFhYICovCiAKIHN0cnVjdCBkYXZpbmNpX3BsbGNfcmVncyB7CkBAIC00MzEsNiArNDQ4LDcgQEAKIGVudW0gZGF2aW5jaV9jbGtfaWRzIHsKIAlEQVZJTkNJX1NQSTBfQ0xLSUQgPSAyLAogCURBVklOQ0lfVUFSVDJfQ0xLSUQgPSAyLAorCURBVklOQ0lfTU1DX0NMS0lEID0gMiwKIAlEQVZJTkNJX01ESU9fQ0xLSUQgPSA0LAogCURBVklOQ0lfQVJNX0NMS0lEID0gNiwKIAlEQVZJTkNJX1BMTE1fQ0xLSUQgPSAweGZmLApAQCAtNDY4LDYgKzQ4Niw3IEBACiAjZGVmaW5lIERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfU1BJMAkJKDEgPDwgMjEpCiAjZGVmaW5lIERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfU1BJMQkJKDEgPDwgMjIpCiAjZGVmaW5lIERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfVUFSVDAJCSgxIDw8IDE4KQorI2RlZmluZSBEQVZJTkNJX1NZU0NGR19TVVNQU1JDX1VBUlQyCQkoMSA8PCAyMCkKICNkZWZpbmUgREFWSU5DSV9TWVNDRkdfU1VTUFNSQ19USU1FUjAJCSgxIDw8IDI3KQogCiBzdHJ1Y3QgZGF2aW5jaV9zeXNjZmcxX3JlZ3MgewpAQCAtNDkxLDYgKzUxMCw5IEBACiAjZGVmaW5lIFZUUF9SRUFEWQkJKDEgPDwgMTUpCiAjZGVmaW5lIFZUUF9JT1BXUkRXTgkJKDEgPDwgMTQpCiAKKyNkZWZpbmUgRFZfU1lTQ0ZHX0tJQ0swX1VOTE9DSwkweDgzZTcwYjEzCisjZGVmaW5lIERWX1NZU0NGR19LSUNLMV9VTkxPQ0sJMHg5NWE0ZjFlMAorCiAvKiBJbnRlcnJ1cHQgY29udHJvbGxlciAqLwogc3RydWN0IGRhdmluY2lfYWludGNfcmVncyB7CiAJZHZfcmVnCXJldmlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1kYXZpbmNpL3BsbF9kZWZzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvcGxsX2RlZnMuaAppbmRleCA1YzMwOTUzLi5mMTM5NmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvcGxsX2RlZnMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLWRhdmluY2kvcGxsX2RlZnMuaApAQCAtNTcsMTEgKzU3LDI0IEBACiAJdW5zaWduZWQgaW50CXBsbGRpdjk7CS8qIDB4MTc0ICovCiB9OwogCisjZGVmaW5lIFBMTF9NQVNURVJfTE9DSwkoMSA8PCA0KQorCisjZGVmaW5lIFBMTENUTF9DTE9DS19NT0RFX1NISUZUCTgKICNkZWZpbmUgUExMQ1RMX1BMTEVOCSgxIDw8IDApCiAjZGVmaW5lIFBMTENUTF9QTExQV1JETgkoMSA8PCAxKQogI2RlZmluZSBQTExDVExfUExMUlNUCSgxIDw8IDMpCisjZGVmaW5lIFBMTENUTF9QTExESVMJKDEgPDwgNCkKICNkZWZpbmUgUExMQ1RMX1BMTEVOU1JDCSgxIDw8IDUpCiAjZGVmaW5lIFBMTENUTF9SRVNfOQkoMSA8PCA4KQorI2RlZmluZSBQTExDVExfRVhUQ0xLU1JDCSgxIDw8IDkpCisKKyNkZWZpbmUgUExMX1BPU1RERU4JKDEgPDwgMTUpCisKKyNkZWZpbmUgUExMX1NDU0NGRzNfRElWNDVQRU5BCSgxIDw8IDIpCisjZGVmaW5lIFBMTF9TQ1NDRkczX0VNQV9DTEtTUkMJKDEgPDwgMSkKKworI2RlZmluZSBQTExfUlNUWVBFX1BPUgkJKDEgPDwgMCkKKyNkZWZpbmUgUExMX1JTVFlQRV9YV1JTVAkoMSA8PCAxKQogCiAjZGVmaW5lIFBMTFNFQ0NUTF9USU5JVFoJKDEgPDwgMTYpCiAjZGVmaW5lIFBMTFNFQ0NUTF9URU5BQkxFCSgxIDw8IDE3KQpAQCAtNjksNiArODIsNyBAQAogI2RlZmluZSBQTExTRUNDVExfU1RPUE1PREUJKDEgPDwgMjIpCiAKICNkZWZpbmUgUExMQ01EX0dPU0VUCQkoMSA8PCAwKQorI2RlZmluZSBQTExDTURfR09TVEFUCQkoMSA8PCAwKQogCiAjZGVmaW5lIFBMTDBfTE9DSwkJMHgwNzAwMDAwMAogI2RlZmluZSBQTEwxX0xPQ0sJCTB4MDcwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9jbG9jay5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwMGZlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9jbG9jay5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IENsb2NrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ0xPQ0tfSF9fCisjZGVmaW5lIF9fQ0xPQ0tfSF9fCisKK2VudW0gbXhjX2Nsb2NrIHsKKwlNWENfQVJNX0NMSyA9IDAsCisJTVhDX0FIQl9DTEssCisJTVhDX0lQR19DTEssCisJTVhDX0VNSV9DTEssCisJTVhDX0dQTUlfQ0xLLAorCU1YQ19JTzBfQ0xLLAorCU1YQ19JTzFfQ0xLLAorCU1YQ19TU1AwX0NMSywKKwlNWENfU1NQMV9DTEssCisJTVhDX1NTUDJfQ0xLLAorCU1YQ19TU1AzX0NMSywKK307CisKK2VudW0gbXhzX2lvY2xvY2sgeworCU1YQ19JT0NMSzAgPSAwLAorCU1YQ19JT0NMSzEsCit9OworCitlbnVtIG14c19zc3BjbG9jayB7CisJTVhDX1NTUENMSzAgPSAwLAorCU1YQ19TU1BDTEsxLAorCU1YQ19TU1BDTEsyLAorCU1YQ19TU1BDTEszLAorfTsKKwordWludDMyX3QgbXhjX2dldF9jbG9jayhlbnVtIG14Y19jbG9jayBjbGspOworCit2b2lkIG14Mjhfc2V0X2lvY2xrKGVudW0gbXhzX2lvY2xvY2sgaW8sIHVpbnQzMl90IGZyZXEpOwordm9pZCBteDI4X3NldF9zc3BjbGsoZW51bSBteHNfc3NwY2xvY2sgc3NwLCB1aW50MzJfdCBmcmVxLCBpbnQgeHRhbCk7Cit2b2lkIG14Mjhfc2V0X3NzcF9idXNjbG9jayh1bnNpZ25lZCBpbnQgYnVzLCB1aW50MzJfdCBmcmVxKTsKKworLyogQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSBGRUMgRXRoZXJuZXQgZHJpdmVyICovCisjZGVmaW5lCWlteF9nZXRfZmVjY2xrKCkJbXhjX2dldF9jbG9jayhNWENfQUhCX0NMSykKKworI2VuZGlmCS8qIF9fQ0xPQ0tfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvZG1hLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MWU3YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9kbWEuaApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggQVBCSCBETUEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0RNQV9IX18KKyNkZWZpbmUgX19ETUFfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpZm5kZWYJQ09ORklHX0FSQ0hfRE1BX1BJT19XT1JEUworI2RlZmluZQlETUFfUElPX1dPUkRTCQkxNQorI2Vsc2UKKyNkZWZpbmUJRE1BX1BJT19XT1JEUwkJQ09ORklHX0FSQ0hfRE1BX1BJT19XT1JEUworI2VuZGlmCisKKyNkZWZpbmUgTVhTX0RNQV9BTElHTk1FTlQJMzIKKworLyoKKyAqIE1YUyBETUEgY2hhbm5lbHMKKyAqLworZW51bSB7CisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX1NTUDAgPSAwLAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9TU1AxLAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9TU1AyLAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9TU1AzLAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMCwKKwlNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTEsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX0dQTUkyLAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMywKKwlNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTQsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX0dQTUk1LAorCU1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JNiwKKwlNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTcsCisJTVhTX0RNQV9DSEFOTkVMX0FIQl9BUEJIX1NTUCwKKwlNWFNfTUFYX0RNQV9DSEFOTkVMUywKK307CisKKy8qCisgKiBNWFMgRE1BIGhhcmR3YXJlIGNvbW1hbmQuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBpbi1tZW1vcnkgbGF5b3V0IG9mIGFuIGVudGlyZSBETUEgY29tbWFuZCwKKyAqIGluY2x1ZGluZyBzcGFjZSBmb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIFBJTyBhY2Nlc3Nlcy4gU2VlIHRoZSBhcHByb3ByaWF0ZQorICogcmVmZXJlbmNlIG1hbnVhbCBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZXNlIGZpZWxkcyBtZWFuIHRvIHRoZQorICogRE1BIGhhcmR3YXJlLgorICovCisjZGVmaW5lCU1YU19ETUFfREVTQ19DT01NQU5EX01BU0sJMHgzCisjZGVmaW5lCU1YU19ETUFfREVTQ19DT01NQU5EX09GRlNFVAkwCisjZGVmaW5lCU1YU19ETUFfREVTQ19DT01NQU5EX05PX0RNQVhGRVIJMHgwCisjZGVmaW5lCU1YU19ETUFfREVTQ19DT01NQU5EX0RNQV9XUklURQkweDEKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0NPTU1BTkRfRE1BX1JFQUQJMHgyCisjZGVmaW5lCU1YU19ETUFfREVTQ19DT01NQU5EX0RNQV9TRU5TRQkweDMKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0NIQUlOCQkoMSA8PCAyKQorI2RlZmluZQlNWFNfRE1BX0RFU0NfSVJRCQkoMSA8PCAzKQorI2RlZmluZQlNWFNfRE1BX0RFU0NfTkFORF9MT0NLCQkoMSA8PCA0KQorI2RlZmluZQlNWFNfRE1BX0RFU0NfTkFORF9XQUlUXzRfUkVBRFkJKDEgPDwgNSkKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0RFQ19TRU0JCSgxIDw8IDYpCisjZGVmaW5lCU1YU19ETUFfREVTQ19XQUlUNEVORAkJKDEgPDwgNykKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0hBTFRfT05fVEVSTUlOQVRFCSgxIDw8IDgpCisjZGVmaW5lCU1YU19ETUFfREVTQ19URVJNSU5BVEVfRkxVU0gJKDEgPDwgOSkKKyNkZWZpbmUJTVhTX0RNQV9ERVNDX1BJT19XT1JEU19NQVNLCSgweGYgPDwgMTIpCisjZGVmaW5lCU1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUCTEyCisjZGVmaW5lCU1YU19ETUFfREVTQ19CWVRFU19NQVNLCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlNWFNfRE1BX0RFU0NfQllURVNfT0ZGU0VUCTE2CisKK3N0cnVjdCBteHNfZG1hX2NtZCB7CisJdW5zaWduZWQgbG9uZwkJbmV4dDsKKwl1bnNpZ25lZCBsb25nCQlkYXRhOworCXVuaW9uIHsKKwkJZG1hX2FkZHJfdAlhZGRyZXNzOworCQl1bnNpZ25lZCBsb25nCWFsdGVybmF0ZTsKKwl9OworCXVuc2lnbmVkIGxvbmcJCXBpb193b3Jkc1tETUFfUElPX1dPUkRTXTsKK307CisKKy8qCisgKiBNWFMgRE1BIGNvbW1hbmQgZGVzY3JpcHRvci4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpbmNvcnBvcmF0ZXMgYW4gTVhTIERNQSBoYXJkd2FyZSBjb21tYW5kIHN0cnVjdHVyZSwgYWxvbmcKKyAqIHdpdGggbWV0YWRhdGEuCisgKi8KKyNkZWZpbmUJTVhTX0RNQV9ERVNDX0ZJUlNUCSgxIDw8IDApCisjZGVmaW5lCU1YU19ETUFfREVTQ19MQVNUCSgxIDw8IDEpCisjZGVmaW5lCU1YU19ETUFfREVTQ19SRUFEWQkoMSA8PCAzMSkKKworc3RydWN0IG14c19kbWFfZGVzYyB7CisJc3RydWN0IG14c19kbWFfY21kCWNtZDsKKwl1bnNpZ25lZCBpbnQJCWZsYWdzOworCWRtYV9hZGRyX3QJCWFkZHJlc3M7CisJdm9pZAkJCSpidWZmZXI7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworfTsKKworLyoqCisgKiBNWFMgRE1BIGNoYW5uZWwKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgc2luZ2xlIERNQSBjaGFubmVsLiBUaGUgTVhTIHBsYXRmb3JtIGNvZGUKKyAqIG1haW50YWlucyBhbiBhcnJheSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIHRvIHJlcHJlc2VudCBldmVyeSBETUEgY2hhbm5lbCBpbiB0aGUKKyAqIHN5c3RlbSAoc2VlIG14c19kbWFfY2hhbm5lbHMpLgorICovCisjZGVmaW5lCU1YU19ETUFfRkxBR1NfSURMRQkwCisjZGVmaW5lCU1YU19ETUFfRkxBR1NfQlVTWQkoMSA8PCAwKQorI2RlZmluZQlNWFNfRE1BX0ZMQUdTX0ZSRUUJMAorI2RlZmluZQlNWFNfRE1BX0ZMQUdTX0FMTE9DQVRFRAkoMSA8PCAxNikKKyNkZWZpbmUJTVhTX0RNQV9GTEFHU19WQUxJRAkoMSA8PCAzMSkKKworc3RydWN0IG14c19kbWFfY2hhbiB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIGRldjsKKwlzdHJ1Y3QgbXhzX2RtYV9kZXZpY2UgKmRtYTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdW5zaWduZWQgaW50IGFjdGl2ZV9udW07CisJdW5zaWduZWQgaW50IHBlbmRpbmdfbnVtOworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQgZG9uZTsKK307CisKKy8qIEhhcmR3YXJlIG1hbmFnZW1lbnQgb3BzICovCitpbnQgbXhzX2RtYV9lbmFibGUoaW50IGNoYW5uZWwpOworaW50IG14c19kbWFfZGlzYWJsZShpbnQgY2hhbm5lbCk7CitpbnQgbXhzX2RtYV9yZXNldChpbnQgY2hhbm5lbCk7CitpbnQgbXhzX2RtYV9mcmVlemUoaW50IGNoYW5uZWwpOworaW50IG14c19kbWFfdW5mcmVlemUoaW50IGNoYW5uZWwpOworaW50IG14c19kbWFfcmVhZF9zZW1hcGhvcmUoaW50IGNoYW5uZWwpOworaW50IG14c19kbWFfZW5hYmxlX2lycShpbnQgY2hhbm5lbCwgaW50IGVuYWJsZSk7CitpbnQgbXhzX2RtYV9pcnFfaXNfcGVuZGluZyhpbnQgY2hhbm5lbCk7CitpbnQgbXhzX2RtYV9hY2tfaXJxKGludCBjaGFubmVsKTsKKworLyogQ2hhbm5lbCBtYW5hZ2VtZW50IG9wcyAqLworaW50IG14c19kbWFfcmVxdWVzdChpbnQgY2hhbm5lbCk7CitpbnQgbXhzX2RtYV9yZWxlYXNlKGludCBjaGFubmVsKTsKKworLyogRGVzY3JpcHRvciBtYW5hZ2VtZW50IG9wcyAqLworc3RydWN0IG14c19kbWFfZGVzYyAqbXhzX2RtYV9kZXNjX2FsbG9jKHZvaWQpOwordm9pZCBteHNfZG1hX2Rlc2NfZnJlZShzdHJ1Y3QgbXhzX2RtYV9kZXNjICopOworCit1bnNpZ25lZCBpbnQgbXhzX2RtYV9jbWRfYWRkcmVzcyhzdHJ1Y3QgbXhzX2RtYV9kZXNjICpkZXNjKTsKK2ludCBteHNfZG1hX2Rlc2NfcGVuZGluZyhzdHJ1Y3QgbXhzX2RtYV9kZXNjICpwZGVzYyk7CisKK2ludCBteHNfZG1hX2Rlc2NfYXBwZW5kKGludCBjaGFubmVsLCBzdHJ1Y3QgbXhzX2RtYV9kZXNjICpwZGVzYyk7CisKK2ludCBteHNfZG1hX2dldF9maW5pc2hlZChpbnQgY2hhbm5lbCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitpbnQgbXhzX2RtYV9maW5pc2goaW50IGNoYW5uZWwsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworCitpbnQgbXhzX2RtYV93YWl0X2NvbXBsZXRlKHVpbnQzMl90IHRpbWVvdXQsIHVuc2lnbmVkIGludCBjaGFuKTsKK2ludCBteHNfZG1hX2dvKGludCBjaGFuKTsKKworaW50IG14c19kbWFfaW5pdCh2b2lkKTsKKworI2VuZGlmCS8qIF9fRE1BX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2dwaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxYzk0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9ncGlvLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggR1BJTworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZglfX01YMjhfR1BJT19IX18KKyNkZWZpbmUJX19NWDI4X0dQSU9fSF9fCisKKyNpZmRlZglDT05GSUdfTVhTX0dQSU8KK3ZvaWQgbXhzX2dwaW9faW5pdCh2b2lkKTsKKyNlbHNlCitpbmxpbmUgdm9pZCBteHNfZ3Bpb19pbml0KHZvaWQpIHt9CisjZW5kaWYKKworI2VuZGlmCS8qIF9fTVgyOF9HUElPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2lteC1yZWdzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvaW14LXJlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTYxYjVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2lteC1yZWdzLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggUmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fSU1YX1JFR1NfSF9fCisjZGVmaW5lIF9fSU1YX1JFR1NfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWFwYmguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWJhc2UuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWJjaC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xrY3RybC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3BtaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaTJjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1vY290cC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtcGluY3RybC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtcG93ZXIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXJ0Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc3NwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy10aW1yb3QuaD4KKworI2VuZGlmCS8qIF9fSU1YX1JFR1NfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvaW9tdXgtbXgyOC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2lvbXV4LW14MjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDI4MjBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L2lvbXV4LW14MjguaApAQCAtMCwwICsxLDUzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEFtaXQgS3VjaGVyaWEgPGFtaXQua3VjaGVyaWFAY2Fub25pY2FsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2lmbmRlZiBfX01BQ0hfSU9NVVhfTVgyOF9IX18KKyNkZWZpbmUgX19NQUNIX0lPTVVYX01YMjhfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9pb211eC5oPgorCisvKgorICogVGhlIG5hbWluZyBjb252ZW50aW9uIGZvciB0aGUgcGFkIG1vZGVzIGlzIE1YMjhfUEFEXzxwYWRuYW1lPl9fPHBhZG1vZGU+CisgKiBJZiA8cGFkbmFtZT4gb3IgPHBhZG1vZGU+IHJlZmVycyB0byBhIEdQSU8sIGl0IGlzIG5hbWVkIEdQSU9fPHVuaXQ+XzxudW0+CisgKiBTZWUgYWxzbyBpb211eC5oCisgKgorICoJCQkJCQkJCQlCQU5LCVBJTglNVVgKKyAqLworLyogTVVYU0VMXzAgKi8KKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDBfX0dQTUlfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAxX19HUE1JX0QxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMl9fR1BNSV9EMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDNfX0dQTUlfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA0X19HUE1JX0Q0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNV9fR1BNSV9ENQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDZfX0dQTUlfRDYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA3X19HUE1JX0Q3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFME5fX0dQTUlfQ0UwTgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTFOX19HUE1JX0NFMU4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UyTl9fR1BNSV9DRTJOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFM05fX0dQTUlfQ0UzTgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkwX19HUE1JX1JFQURZMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkxX19HUE1JX1JFQURZMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkyX19HUE1JX1JFQURZMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkzX19HUE1JX1JFQURZMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRE5fX0dQTUlfUkROCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1dSTl9fR1BNSV9XUk4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQUxFX19HUE1JX0FMRQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DTEVfX0dQTUlfQ0xFCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JFU0VUTl9fR1BNSV9SRVNFVE4JCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjgsIFBBRF9NVVhTRUxfMCkKKworI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAwX19MQ0RfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDFfX0xDRF9EMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMl9fTENEX0QyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAzX19MQ0RfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDRfX0xDRF9ENAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNV9fTENEX0Q1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA2X19MQ0RfRDYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDdfX0xDRF9ENwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwOF9fTENEX0Q4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA5X19MQ0RfRDkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTBfX0xDRF9EMTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTFfX0xDRF9EMTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDExLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTJfX0xDRF9EMTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTNfX0xDRF9EMTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTRfX0xDRF9EMTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTVfX0xDRF9EMTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTZfX0xDRF9EMTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTdfX0xDRF9EMTcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMThfX0xDRF9EMTgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTlfX0xDRF9EMTkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjBfX0xDRF9EMjAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjFfX0xDRF9EMjEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjJfX0xDRF9EMjIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjNfX0xDRF9EMjMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SRF9FX19MQ0RfUkRfRQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1dSX1JXTl9fTENEX1dSX1JXTgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JTX19MQ0RfUlMJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfQ1NfX0xDRF9DUwkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9WU1lOQ19fTENEX1ZTWU5DCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfSFNZTkNfX0xDRF9IU1lOQwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0RPVENMS19fTENEX0RPVENMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0VOQUJMRV9fTENEX0VOQUJMRQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzEsIFBBRF9NVVhTRUxfMCkKKworI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEEwX19TU1AwX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEExX19TU1AwX0QxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEEyX19TU1AwX0QyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEEzX19TU1AwX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE0X19TU1AwX0Q0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE1X19TU1AwX0Q1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE2X19TU1AwX0Q2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE3X19TU1AwX0Q3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0NNRF9fU1NQMF9DTUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREVURUNUX19TU1AwX0NBUkRfREVURUNUCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfU0NLX19TU1AwX1NDSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9TQ0tfX1NTUDFfU0NLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0NNRF9fU1NQMV9DTUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfREFUQTBfX1NTUDFfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfREFUQTNfX1NTUDFfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU0NLX19TU1AyX1NDSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9NT1NJX19TU1AyX0NNRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9NSVNPX19TU1AyX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMF9fU1NQMl9EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzFfX1NTUDJfRDQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MyX19TU1AyX0Q1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX1NDS19fU1NQM19TQ0sJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfTU9TSV9fU1NQM19DTUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfTUlTT19fU1NQM19EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19TUzBfX1NTUDNfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI3LCBQQURfTVVYU0VMXzApCisKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1JYX19BVUFSVDBfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9UWF9fQVVBUlQwX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfQ1RTX19BVUFSVDBfQ1RTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfUlRTX19BVUFSVDBfUlRTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfUlhfX0FVQVJUMV9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1RYX19BVUFSVDFfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9DVFNfX0FVQVJUMV9DVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9SVFNfX0FVQVJUMV9SVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9SWF9fQVVBUlQyX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfVFhfX0FVQVJUMl9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX0NUU19fQVVBUlQyX0NUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1JUU19fQVVBUlQyX1JUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1JYX19BVUFSVDNfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19UWF9fQVVBUlQzX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfQ1RTX19BVUFSVDNfQ1RTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfUlRTX19BVUFSVDNfUlRTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9QV00wX19QV01fMAkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1BXTTFfX1BXTV8xCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfUFdNMl9fUFdNXzIJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9NQ0xLX19TQUlGMF9NQ0xLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9MUkNMS19fU0FJRjBfTFJDTEsJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfQklUQ0xLX19TQUlGMF9CSVRDTEsJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfU0RBVEEwX19TQUlGMF9TREFUQTAJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfSTJDMF9TQ0xfX0kyQzBfU0NMCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9JMkMwX1NEQV9fSTJDMF9TREEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYxX1NEQVRBMF9fU0FJRjFfU0RBVEEwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NQRElGX19TUERJRl9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfUFdNM19fUFdNXzMJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9QV000X19QV01fNAkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SRVNFVF9fTENEX1JFU0VUCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAzMCwgUEFEX01VWFNFTF8wKQorCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX01EQ19fRU5FVDBfTURDCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9NRElPX19FTkVUMF9NRElPCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWF9FTl9fRU5FVDBfUlhfRU4JCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMF9fRU5FVDBfUlhEMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMV9fRU5FVDBfUlhEMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhfQ0xLX19FTkVUMF9UWF9DTEsJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhfRU5fX0VORVQwX1RYX0VOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDBfX0VORVQwX1RYRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDFfX0VORVQwX1RYRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDJfX0VORVQwX1JYRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDNfX0VORVQwX1JYRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDJfX0VORVQwX1RYRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDExLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDNfX0VORVQwX1RYRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYX0NMS19fRU5FVDBfUlhfQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX0NPTF9fRU5FVDBfQ09MCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9DUlNfX0VORVQwX0NSUwkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVF9DTEtfX0NMS0NUUkxfRU5FVAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfSlRBR19SVENLX19KVEFHX1JUQ0sJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDIwLCBQQURfTVVYU0VMXzApCisKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwMF9fRU1JX0RBVEEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDAxX19FTUlfREFUQTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICAxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDJfX0VNSV9EQVRBMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwM19fRU1JX0RBVEEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDA0X19FTUlfREFUQTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICA0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDVfX0VNSV9EQVRBNQkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwNl9fRU1JX0RBVEE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDA3X19FTUlfREFUQTcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICA3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDhfX0VNSV9EQVRBOAkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwOV9fRU1JX0RBVEE5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDEwX19FTUlfREFUQTEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDExX19FTUlfREFUQTExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDEyX19FTUlfREFUQTEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDEzX19FTUlfREFUQTEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDE0X19FTUlfREFUQTE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDE1X19FTUlfREFUQTE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfT0RUMF9fRU1JX09EVDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDE2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EUU0wX19FTUlfRFFNMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX09EVDFfX0VNSV9PRFQxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRFFNMV9fRU1JX0RRTTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDE5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9ERFJfT1BFTl9GQl9fRU1JX0REUl9PUEVOX0ZFRURCQUNLCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMjAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0NMS19fRU1JX0NMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMjEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0RRUzBfX0VNSV9EUVMwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAyMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRFFTMV9fRU1JX0RRUzEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDIzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9ERFJfT1BFTl9fRU1JX0REUl9PUEVOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDI2LCBQQURfTVVYU0VMXzApCisKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwMF9fRU1JX0FERFIwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTAxX19FTUlfQUREUjEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICAxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDJfX0VNSV9BRERSMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwM19fRU1JX0FERFIzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTA0X19FTUlfQUREUjQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICA0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDVfX0VNSV9BRERSNQkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwNl9fRU1JX0FERFI2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTA3X19FTUlfQUREUjcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICA3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDhfX0VNSV9BRERSOAkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwOV9fRU1JX0FERFI5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTEwX19FTUlfQUREUjEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTExX19FTUlfQUREUjExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTEyX19FTUlfQUREUjEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTEzX19FTUlfQUREUjEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTE0X19FTUlfQUREUjE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQkEwX19FTUlfQkEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQkExX19FTUlfQkExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQkEyX19FTUlfQkEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQ0FTTl9fRU1JX0NBU04JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDE5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9SQVNOX19FTUlfUkFTTgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMjAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX1dFTl9fRU1JX1dFTgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMjEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0NFME5fX0VNSV9DRTBOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAyMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQ0UxTl9fRU1JX0NFMU4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDIzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9DS0VfX0VNSV9DS0UJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDI0LCBQQURfTVVYU0VMXzApCisKKy8qIE1VWFNFTF8xICovCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAwX19TU1AxX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMV9fU1NQMV9EMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDJfX1NTUDFfRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAzX19TU1AxX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNF9fU1NQMV9ENAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDVfX1NTUDFfRDUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA2X19TU1AxX0Q2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwN19fU1NQMV9ENwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTBOX19TU1AzX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFMU5fX1NTUDNfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UyTl9fQ0FOMV9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTgsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTNOX19DQU4xX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTBfX1NTUDFfQ0FSRF9ERVRFQ1QJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkxX19TU1AxX0NNRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkyX19DQU4wX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTNfX0NBTjBfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkROX19TU1AzX1NDSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9XUk5fX1NTUDFfU0NLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0FMRV9fU1NQM19EMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DTEVfX1NTUDNfRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkVTRVROX19TU1AzX0NNRAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjgsIFBBRF9NVVhTRUxfMSkKKworI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAzX19FVE1fREE4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA0X19FVE1fREE5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA4X19FVE1fREEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgOCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA5X19FVE1fREE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgOSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIwX19FTkVUMV8xNTg4X0VWRU5UMl9PVVQJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMV9fRU5FVDFfMTU4OF9FVkVOVDJfSU4JCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMl9fRU5FVDFfMTU4OF9FVkVOVDNfT1VUCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjNfX0VORVQxXzE1ODhfRVZFTlQzX0lOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SRF9FX19MQ0RfVlNZTkMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9XUl9SV05fX0xDRF9IU1lOQwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JTX19MQ0RfRE9UQ0xLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfQ1NfX0xDRF9FTkFCTEUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9WU1lOQ19fU0FJRjFfU0RBVEEwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9IU1lOQ19fU0FJRjFfU0RBVEExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI5LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9ET1RDTEtfX1NBSUYxX01DTEsJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDMwLCBQQURfTVVYU0VMXzEpCisKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNF9fU1NQMl9EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNV9fU1NQMl9EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNl9fU1NQMl9DTUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTdfX1NTUDJfU0NLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX1NDS19fU1NQMl9EMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9DTURfX1NTUDJfRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfREFUQTBfX1NTUDJfRDYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfREFUQTNfX1NTUDJfRDcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU0NLX19BVUFSVDJfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfTU9TSV9fQVVBUlQyX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX01JU09fX0FVQVJUM19SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTgsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzBfX0FVQVJUM19UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzFfX1NTUDJfRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MyX19TU1AyX0QyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX1NDS19fQVVBUlQ0X1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX01PU0lfX0FVQVJUNF9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19NSVNPX19BVUFSVDRfUlRTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX1NTMF9fQVVBUlQ0X0NUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjcsIFBBRF9NVVhTRUxfMSkKKworI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfUlhfX0kyQzBfU0NMCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfVFhfX0kyQzBfU0RBCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfQ1RTX19BVUFSVDRfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9SVFNfX0FVQVJUNF9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1JYX19TU1AyX0NBUkRfREVURUNUCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9UWF9fU1NQM19DQVJEX0RFVEVDVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfQ1RTX19VU0IwX09WRVJDVVJSRU5UCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9SVFNfX1VTQjBfSUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9SWF9fU1NQM19EMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDgsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1RYX19TU1AzX0QyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfQ1RTX19JMkMxX1NDTAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1JUU19fSTJDMV9TREEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDExLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19SWF9fQ0FOMF9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1RYX19DQU4wX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfQ1RTX19DQU4xX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfUlRTX19DQU4xX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9QV00wX19JMkMxX1NDTAkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1BXTTFfX0kyQzFfU0RBCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfUFdNMl9fVVNCMF9JRAkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX01DTEtfX1BXTV8zCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9MUkNMS19fUFdNXzQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIxLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX0JJVENMS19fUFdNXzUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX1NEQVRBMF9fUFdNXzYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0kyQzBfU0NMX19USU1ST1RfUk9UQVJZQQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9JMkMwX1NEQV9fVElNUk9UX1JPVEFSWUIJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjFfU0RBVEEwX19QV01fNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JFU0VUX19MQ0RfVlNZTkMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDMwLCBQQURfTVVYU0VMXzEpCisKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfTURDX19HUE1JX0NFNE4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX01ESU9fX0dQTUlfQ0U1TgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhfRU5fX0dQTUlfQ0U2TgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMF9fR1BNSV9DRTdOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQxX19HUE1JX1JFQURZNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWF9DTEtfX0hTQURDX1RSSUdHRVIJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhfRU5fX0dQTUlfUkVBRFk1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDBfX0dQTUlfUkVBRFk2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDFfX0dQTUlfUkVBRFk3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDJfX0VORVQxX1JYRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA5LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDNfX0VORVQxX1JYRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDJfX0VORVQxX1RYRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDExLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDNfX0VORVQxX1RYRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYX0NMS19fRU5FVDBfUlhfRVIJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfQ09MX19FTkVUMV9UWF9FTgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfQ1JTX19FTkVUMV9SWF9FTgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTUsIFBBRF9NVVhTRUxfMSkKKworLyogTVVYU0VMXzIgKi8KKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTJOX19FTkVUMF9SWF9FUgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTNOX19TQUlGMV9NQ0xLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTBfX1VTQjBfSUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMl9fRU5FVDBfVFhfRVIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZM19fSFNBRENfVFJJR0dFUgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0FMRV9fU1NQM19ENAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DTEVfX1NTUDNfRDUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI3LCBQQURfTVVYU0VMXzIpCisKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMF9fRVRNX0RBMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMV9fRVRNX0RBMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMl9fRVRNX0RBMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwM19fRVRNX0RBMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNF9fRVRNX0RBNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNV9fRVRNX0RBNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNl9fRVRNX0RBNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwN19fRVRNX0RBNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDcsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwOF9fRVRNX0RBOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwOV9fRVRNX0RBOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMF9fRVRNX0RBMTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTFfX0VUTV9EQTExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEyX19FVE1fREExMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxM19fRVRNX0RBMTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTRfX0VUTV9EQTE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE1X19FVE1fREExNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNl9fRVRNX0RBNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxN19fRVRNX0RBNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTcsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxOF9fRVRNX0RBNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxOV9fRVRNX0RBNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMF9fRVRNX0RBMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMV9fRVRNX0RBMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMl9fRVRNX0RBMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyM19fRVRNX0RBMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JEX0VfX0VUTV9UQ1RMCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfV1JfUldOX19FVE1fVENMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0hTWU5DX19FVE1fVENUTAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0RPVENMS19fRVRNX1RDTEsJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDMwLCBQQURfTVVYU0VMXzIpCisKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9TQ0tfX0VORVQwXzE1ODhfRVZFTlQyX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfQ01EX19FTkVUMF8xNTg4X0VWRU5UMl9JTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0RBVEEwX19FTkVUMF8xNTg4X0VWRU5UM19PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0RBVEEzX19FTkVUMF8xNTg4X0VWRU5UM19JTglNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU0NLX19TQUlGMF9TREFUQTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE2LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfTU9TSV9fU0FJRjBfU0RBVEEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE3LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfTUlTT19fU0FJRjFfU0RBVEExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE4LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MwX19TQUlGMV9TREFUQTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MxX19VU0IxX09WRVJDVVJSRU5UCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MyX19VU0IwX09WRVJDVVJSRU5UCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIxLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfU0NLX19FTkVUMV8xNTg4X0VWRU5UMF9PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX01PU0lfX0VORVQxXzE1ODhfRVZFTlQwX0lOCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19NSVNPX19FTkVUMV8xNTg4X0VWRU5UMV9PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX1NTMF9fRU5FVDFfMTU4OF9FVkVOVDFfSU4JCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjcsIFBBRF9NVVhTRUxfMikKKworI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfUlhfX0RVQVJUX0NUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1RYX19EVUFSVF9SVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAxLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9DVFNfX0RVQVJUX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfUlRTX19EVUFSVF9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1JYX19QV01fMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1RYX19QV01fMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX0NUU19fVElNUk9UX1JPVEFSWUEJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1JUU19fVElNUk9UX1JPVEFSWUIJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDcsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1JYX19TU1AzX0Q0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfVFhfX1NTUDNfRDUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9DVFNfX1NBSUYxX0JJVENMSwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfUlRTX19TQUlGMV9MUkNMSwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfUlhfX0VORVQwXzE1ODhfRVZFTlQwX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19UWF9fRU5FVDBfMTU4OF9FVkVOVDBfSU4JTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfQ1RTX19FTkVUMF8xNTg4X0VWRU5UMV9PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfUlRTX19FTkVUMF8xNTg4X0VWRU5UMV9JTglNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1BXTTBfX0RVQVJUX1JYCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfUFdNMV9fRFVBUlRfVFgJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9QV00yX19VU0IxX09WRVJDVVJSRU5UCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxOCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9NQ0xLX19BVUFSVDRfQ1RTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9MUkNMS19fQVVBUlQ0X1JUUwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9CSVRDTEtfX0FVQVJUNF9SWAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9TREFUQTBfX0FVQVJUNF9UWAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9JMkMwX1NDTF9fRFVBUlRfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0kyQzBfU0RBX19EVUFSVF9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjFfU0RBVEEwX19TQUlGMF9TREFUQTEJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1BESUZfX0VORVQxX1JYX0VSCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNywgUEFEX01VWFNFTF8yKQorCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX01EQ19fU0FJRjBfU0RBVEExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX01ESU9fX1NBSUYwX1NEQVRBMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWF9FTl9fU0FJRjFfU0RBVEExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDBfX1NBSUYxX1NEQVRBMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWF9DTEtfX0VORVQwXzE1ODhfRVZFTlQyX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDJfX0VORVQwXzE1ODhfRVZFTlQwX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDNfX0VORVQwXzE1ODhfRVZFTlQwX0lOCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMl9fRU5FVDBfMTU4OF9FVkVOVDFfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEM19fRU5FVDBfMTU4OF9FVkVOVDFfSU4JTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWF9DTEtfX0VORVQwXzE1ODhfRVZFTlQyX0lOCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfQ09MX19FTkVUMF8xNTg4X0VWRU5UM19PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9DUlNfX0VORVQwXzE1ODhfRVZFTlQzX0lOCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTUsIFBBRF9NVVhTRUxfMikKKworLyogTVVYU0VMX0dQSU8gKi8KKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDBfX0dQSU9fMF8wCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMV9fR1BJT18wXzEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAyX19HUElPXzBfMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDNfX0dQSU9fMF8zCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNF9fR1BJT18wXzQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA1X19HUElPXzBfNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDZfX0dQSU9fMF82CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwN19fR1BJT18wXzcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UwTl9fR1BJT18wXzE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFMU5fX0dQSU9fMF8xNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTJOX19HUElPXzBfMTgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UzTl9fR1BJT18wXzE5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTBfX0dQSU9fMF8yMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkxX19HUElPXzBfMjEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMl9fR1BJT18wXzIyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTNfX0dQSU9fMF8yMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRE5fX0dQSU9fMF8yNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9XUk5fX0dQSU9fMF8yNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9BTEVfX0dQSU9fMF8yNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DTEVfX0dQSU9fMF8yNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRVNFVE5fX0dQSU9fMF8yOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjgsIFBBRF9NVVhTRUxfR1BJTykKKworI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAwX19HUElPXzFfMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMV9fR1BJT18xXzEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDJfX0dQSU9fMV8yCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAzX19HUElPXzFfMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNF9fR1BJT18xXzQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDVfX0dQSU9fMV81CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA2X19HUElPXzFfNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwN19fR1BJT18xXzcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDhfX0dQSU9fMV84CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA5X19HUElPXzFfOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMF9fR1BJT18xXzEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDExX19HUElPXzFfMTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDExLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTJfX0dQSU9fMV8xMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxM19fR1BJT18xXzEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE0X19HUElPXzFfMTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTVfX0dQSU9fMV8xNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNl9fR1BJT18xXzE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE3X19HUElPXzFfMTcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMThfX0dQSU9fMV8xOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxOV9fR1BJT18xXzE5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIwX19HUElPXzFfMjAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjFfX0dQSU9fMV8yMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMl9fR1BJT18xXzIyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIzX19HUElPXzFfMjMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SRF9FX19HUElPXzFfMjQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9XUl9SV05fX0dQSU9fMV8yNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX1JTX19HUElPXzFfMjYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9DU19fR1BJT18xXzI3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfVlNZTkNfX0dQSU9fMV8yOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0hTWU5DX19HUElPXzFfMjkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9ET1RDTEtfX0dQSU9fMV8zMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0VOQUJMRV9fR1BJT18xXzMxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAzMSwgUEFEX01VWFNFTF9HUElPKQorCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTBfX0dQSU9fMl8wCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEExX19HUElPXzJfMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBMl9fR1BJT18yXzIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTNfX0dQSU9fMl8zCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE0X19HUElPXzJfNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNV9fR1BJT18yXzUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTZfX0dQSU9fMl82CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE3X19HUElPXzJfNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9DTURfX0dQSU9fMl84CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RFVEVDVF9fR1BJT18yXzkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfU0NLX19HUElPXzJfMTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfU0NLX19HUElPXzJfMTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfQ01EX19HUElPXzJfMTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfREFUQTBfX0dQSU9fMl8xNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9EQVRBM19fR1BJT18yXzE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NDS19fR1BJT18yXzE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX01PU0lfX0dQSU9fMl8xNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9NSVNPX19HUElPXzJfMTgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MwX19HUElPXzJfMTkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MxX19HUElPXzJfMjAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MyX19HUElPXzJfMjEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfU0NLX19HUElPXzJfMjQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfTU9TSV9fR1BJT18yXzI1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX01JU09fX0dQSU9fMl8yNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19TUzBfX0dQSU9fMl8yNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjcsIFBBRF9NVVhTRUxfR1BJTykKKworI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfUlhfX0dQSU9fM18wCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfVFhfX0dQSU9fM18xCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfQ1RTX19HUElPXzNfMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1JUU19fR1BJT18zXzMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9SWF9fR1BJT18zXzQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9UWF9fR1BJT18zXzUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9DVFNfX0dQSU9fM182CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfUlRTX19HUElPXzNfNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1JYX19HUElPXzNfOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1RYX19HUElPXzNfOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX0NUU19fR1BJT18zXzEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfUlRTX19HUElPXzNfMTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDExLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19SWF9fR1BJT18zXzEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfVFhfX0dQSU9fM18xMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX0NUU19fR1BJT18zXzE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfUlRTX19HUElPXzNfMTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1BXTTBfX0dQSU9fM18xNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfUFdNMV9fR1BJT18zXzE3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9QV00yX19HUElPXzNfMTgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX01DTEtfX0dQSU9fM18yMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfTFJDTEtfX0dQSU9fM18yMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfQklUQ0xLX19HUElPXzNfMjIJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfU0RBVEEwX19HUElPXzNfMjMJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfSTJDMF9TQ0xfX0dQSU9fM18yNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfSTJDMF9TREFfX0dQSU9fM18yNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjFfU0RBVEEwX19HUElPXzNfMjYJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1BESUZfX0dQSU9fM18yNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfUFdNM19fR1BJT18zXzI4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9QV000X19HUElPXzNfMjkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SRVNFVF9fR1BJT18zXzMwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAzMCwgUEFEX01VWFNFTF9HUElPKQorCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX01EQ19fR1BJT180XzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX01ESU9fX0dQSU9fNF8xCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWF9FTl9fR1BJT180XzIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDBfX0dQSU9fNF8zCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQxX19HUElPXzRfNAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhfQ0xLX19HUElPXzRfNQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhfRU5fX0dQSU9fNF82CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQwX19HUElPXzRfNwkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMV9fR1BJT180XzgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDJfX0dQSU9fNF85CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQzX19HUElPXzRfMTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDJfX0dQSU9fNF8xMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEM19fR1BJT180XzEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWF9DTEtfX0dQSU9fNF8xMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9DT0xfX0dQSU9fNF8xNAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfQ1JTX19HUElPXzRfMTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVRfQ0xLX19HUElPXzRfMTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0pUQUdfUlRDS19fR1BJT180XzIwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAyMCwgUEFEX01VWFNFTF9HUElPKQorCisjZW5kaWYgLyogX19NQUNIX0lPTVVYX01YMjhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvaW9tdXguaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9pb211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYmRmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvaW9tdXguaApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBKYW4gV2VpdHplbCBQaHl0ZWMgTWVzc3RlY2huaWsgR21iSCwKKyAqCQkJPGFybWxpbnV4QHBoeXRlYy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19NQUNIX01YU19JT01VWF9IX18KKyNkZWZpbmUgX19NQUNIX01YU19JT01VWF9IX18KKworLyoKKyAqIElPTVVYL1BBRCBCaXQgZmllbGQgZGVmaW5pdGlvbnMKKyAqCisgKiBQQURfQkFOSzoJCSAwLi4yCSgzKQorICogUEFEX1BJTjoJCSAzLi43CSg1KQorICogUEFEX01VWFNFTDoJCSA4Li45CSgyKQorICogUEFEX01BOgkJMTAuLjExCSgyKQorICogUEFEX01BX1ZBTElEOgkxMgkoMSkKKyAqIFBBRF9WT0w6CQkxMwkoMSkKKyAqIFBBRF9WT0xfVkFMSUQ6CTE0CSgxKQorICogUEFEX1BVTEw6CQkxNQkoMSkKKyAqIFBBRF9QVUxMX1ZBTElEOgkxNgkoMSkKKyAqIFJFU0VSVkVEOgkJMTcuLjMxCSgxNSkKKyAqLwordHlwZWRlZiB1MzIgaW9tdXhfY2ZnX3Q7CisKKyNkZWZpbmUgTVhTX1BBRF9CQU5LX1NISUZUCTAKKyNkZWZpbmUgTVhTX1BBRF9CQU5LX01BU0sJKChpb211eF9jZmdfdCkweDcgPDwgTVhTX1BBRF9CQU5LX1NISUZUKQorI2RlZmluZSBNWFNfUEFEX1BJTl9TSElGVAkzCisjZGVmaW5lIE1YU19QQURfUElOX01BU0sJKChpb211eF9jZmdfdCkweDFmIDw8IE1YU19QQURfUElOX1NISUZUKQorI2RlZmluZSBNWFNfUEFEX01VWFNFTF9TSElGVAk4CisjZGVmaW5lIE1YU19QQURfTVVYU0VMX01BU0sJKChpb211eF9jZmdfdCkweDMgPDwgTVhTX1BBRF9NVVhTRUxfU0hJRlQpCisjZGVmaW5lIE1YU19QQURfTUFfU0hJRlQJMTAKKyNkZWZpbmUgTVhTX1BBRF9NQV9NQVNLCQkoKGlvbXV4X2NmZ190KTB4MyA8PCBNWFNfUEFEX01BX1NISUZUKQorI2RlZmluZSBNWFNfUEFEX01BX1ZBTElEX1NISUZUCTEyCisjZGVmaW5lIE1YU19QQURfTUFfVkFMSURfTUFTSwkoKGlvbXV4X2NmZ190KTB4MSA8PCBNWFNfUEFEX01BX1ZBTElEX1NISUZUKQorI2RlZmluZSBNWFNfUEFEX1ZPTF9TSElGVAkxMworI2RlZmluZSBNWFNfUEFEX1ZPTF9NQVNLCSgoaW9tdXhfY2ZnX3QpMHgxIDw8IE1YU19QQURfVk9MX1NISUZUKQorI2RlZmluZSBNWFNfUEFEX1ZPTF9WQUxJRF9TSElGVAkxNAorI2RlZmluZSBNWFNfUEFEX1ZPTF9WQUxJRF9NQVNLCSgoaW9tdXhfY2ZnX3QpMHgxIDw8IE1YU19QQURfVk9MX1ZBTElEX1NISUZUKQorI2RlZmluZSBNWFNfUEFEX1BVTExfU0hJRlQJMTUKKyNkZWZpbmUgTVhTX1BBRF9QVUxMX01BU0sJKChpb211eF9jZmdfdCkweDEgPDwgTVhTX1BBRF9QVUxMX1NISUZUKQorI2RlZmluZSBNWFNfUEFEX1BVTExfVkFMSURfU0hJRlQgMTYKKyNkZWZpbmUgTVhTX1BBRF9QVUxMX1ZBTElEX01BU0sJKChpb211eF9jZmdfdCkweDEgPDwgTVhTX1BBRF9QVUxMX1ZBTElEX1NISUZUKQorCisjZGVmaW5lIFBBRF9NVVhTRUxfMAkJMAorI2RlZmluZSBQQURfTVVYU0VMXzEJCTEKKyNkZWZpbmUgUEFEX01VWFNFTF8yCQkyCisjZGVmaW5lIFBBRF9NVVhTRUxfR1BJTwkJMworCisjZGVmaW5lIFBBRF80TUEJCQkwCisjZGVmaW5lIFBBRF84TUEJCQkxCisjZGVmaW5lIFBBRF8xMk1BCQkyCisjZGVmaW5lIFBBRF8xNk1BCQkzCisKKyNkZWZpbmUgUEFEXzFWOAkJCTAKKyNkZWZpbmUgUEFEXzNWMwkJCTEKKworI2RlZmluZSBQQURfTk9QVUxMCQkwCisjZGVmaW5lIFBBRF9QVUxMVVAJCTEKKworI2RlZmluZSBNWFNfUEFEXzRNQQkoKFBBRF80TUEgPDwgTVhTX1BBRF9NQV9TSElGVCkgfCBcCisJCQkJCU1YU19QQURfTUFfVkFMSURfTUFTSykKKyNkZWZpbmUgTVhTX1BBRF84TUEJKChQQURfOE1BIDw8IE1YU19QQURfTUFfU0hJRlQpIHwgXAorCQkJCQlNWFNfUEFEX01BX1ZBTElEX01BU0spCisjZGVmaW5lIE1YU19QQURfMTJNQQkoKFBBRF8xMk1BIDw8IE1YU19QQURfTUFfU0hJRlQpIHwgXAorCQkJCQlNWFNfUEFEX01BX1ZBTElEX01BU0spCisjZGVmaW5lIE1YU19QQURfMTZNQQkoKFBBRF8xNk1BIDw8IE1YU19QQURfTUFfU0hJRlQpIHwgXAorCQkJCQlNWFNfUEFEX01BX1ZBTElEX01BU0spCisKKyNkZWZpbmUgTVhTX1BBRF8xVjgJKChQQURfMVY4IDw8IE1YU19QQURfVk9MX1NISUZUKSB8IFwKKwkJCQkJTVhTX1BBRF9WT0xfVkFMSURfTUFTSykKKyNkZWZpbmUgTVhTX1BBRF8zVjMJKChQQURfM1YzIDw8IE1YU19QQURfVk9MX1NISUZUKSB8IFwKKwkJCQkJTVhTX1BBRF9WT0xfVkFMSURfTUFTSykKKworI2RlZmluZSBNWFNfUEFEX05PUFVMTAkoKFBBRF9OT1BVTEwgPDwgTVhTX1BBRF9QVUxMX1NISUZUKSB8IFwKKwkJCQkJTVhTX1BBRF9QVUxMX1ZBTElEX01BU0spCisjZGVmaW5lIE1YU19QQURfUFVMTFVQCSgoUEFEX1BVTExVUCA8PCBNWFNfUEFEX1BVTExfU0hJRlQpIHwgXAorCQkJCQlNWFNfUEFEX1BVTExfVkFMSURfTUFTSykKKworLyogZ2VuZXJpYyBwYWQgY29udHJvbCB1c2VkIGluIG1vc3QgY2FzZXMgKi8KKyNkZWZpbmUgTVhTX1BBRF9DVFJMCShNWFNfUEFEXzRNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9OT1BVTEwpCisKKyNkZWZpbmUgTVhTX0lPTVVYX1BBRChfYmFuaywgX3BpbiwgX211eHNlbCwgX21hLCBfdm9sLCBfcHVsbCkJCVwKKwkJKCgoaW9tdXhfY2ZnX3QpKF9iYW5rKSA8PCBNWFNfUEFEX0JBTktfU0hJRlQpIHwJCVwKKwkJKChpb211eF9jZmdfdCkoX3BpbikgPDwgTVhTX1BBRF9QSU5fU0hJRlQpIHwJCVwKKwkJKChpb211eF9jZmdfdCkoX211eHNlbCkgPDwgTVhTX1BBRF9NVVhTRUxfU0hJRlQpIHwJXAorCQkoKGlvbXV4X2NmZ190KShfbWEpIDw8IE1YU19QQURfTUFfU0hJRlQpIHwJCVwKKwkJKChpb211eF9jZmdfdCkoX3ZvbCkgPDwgTVhTX1BBRF9WT0xfU0hJRlQpIHwJCVwKKwkJKChpb211eF9jZmdfdCkoX3B1bGwpIDw8IE1YU19QQURfUFVMTF9TSElGVCkpCisKKy8qCisgKiBBIHBhZCBiZWNvbWVzIG5ha2VkLCB3aGVuIG5vbmUgb2YgbUEsIHZvbCBvciBwdWxsCisgKiB2YWxpZGl0eSBiaXRzIGlzIHNldC4KKyAqLworI2RlZmluZSBNWFNfSU9NVVhfUEFEX05BS0VEKF9iYW5rLCBfcGluLCBfbXV4c2VsKSBcCisJCU1YU19JT01VWF9QQUQoX2JhbmssIF9waW4sIF9tdXhzZWwsIDAsIDAsIDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9CQU5LKGlvbXV4X2NmZ190IHBhZCkKK3sKKwlyZXR1cm4gKHBhZCAmIE1YU19QQURfQkFOS19NQVNLKSA+PiBNWFNfUEFEX0JBTktfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9QSU4oaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9QSU5fTUFTSykgPj4gTVhTX1BBRF9QSU5fU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9NVVhTRUwoaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9NVVhTRUxfTUFTSykgPj4gTVhTX1BBRF9NVVhTRUxfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9NQShpb211eF9jZmdfdCBwYWQpCit7CisJcmV0dXJuIChwYWQgJiBNWFNfUEFEX01BX01BU0spID4+IE1YU19QQURfTUFfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9NQV9WQUxJRChpb211eF9jZmdfdCBwYWQpCit7CisJcmV0dXJuIChwYWQgJiBNWFNfUEFEX01BX1ZBTElEX01BU0spID4+IE1YU19QQURfTUFfVkFMSURfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9WT0woaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9WT0xfTUFTSykgPj4gTVhTX1BBRF9WT0xfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9WT0xfVkFMSUQoaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9WT0xfVkFMSURfTUFTSykgPj4gTVhTX1BBRF9WT0xfVkFMSURfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9QVUxMKGlvbXV4X2NmZ190IHBhZCkKK3sKKwlyZXR1cm4gKHBhZCAmIE1YU19QQURfUFVMTF9NQVNLKSA+PiBNWFNfUEFEX1BVTExfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9QVUxMX1ZBTElEKGlvbXV4X2NmZ190IHBhZCkKK3sKKwlyZXR1cm4gKHBhZCAmIE1YU19QQURfUFVMTF9WQUxJRF9NQVNLKSA+PiBNWFNfUEFEX1BVTExfVkFMSURfU0hJRlQ7Cit9CisKKy8qCisgKiBjb25maWd1cmVzIGEgc2luZ2xlIHBhZCBpbiB0aGUgaW9tdXhlcgorICovCitpbnQgbXhzX2lvbXV4X3NldHVwX3BhZChpb211eF9jZmdfdCBwYWQpOworCisvKgorICogY29uZmlndXJlcyBtdWx0aXBsZSBwYWRzCisgKiBjb252ZW5pZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcworICovCitpbnQgbXhzX2lvbXV4X3NldHVwX211bHRpcGxlX3BhZHMoY29uc3QgaW9tdXhfY2ZnX3QgKnBhZF9saXN0LCB1bnNpZ25lZCBjb3VudCk7CisKKyNlbmRpZiAvKiBfX01BQ0hfTVhTX0lPTVVYX0hfXyovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1hcGJoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1hcGJoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmYTFlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWFwYmguaApAQCAtMCwwICsxLDQ2NiBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggQVBCSCBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fUkVHU19BUEJIX0hfXworI2RlZmluZSBfX1JFR1NfQVBCSF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisKKyNpZm5kZWYJX19BU1NFTUJMWV9fCitzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgeworCW14MjhfcmVnKGh3X2FwYmhfY3RybDApCisJbXgyOF9yZWcoaHdfYXBiaF9jdHJsMSkKKwlteDI4X3JlZyhod19hcGJoX2N0cmwyKQorCW14MjhfcmVnKGh3X2FwYmhfY2hhbm5lbF9jdHJsKQorCW14MjhfcmVnKGh3X2FwYmhfZGV2c2VsKQorCW14MjhfcmVnKGh3X2FwYmhfZG1hX2J1cnN0X3NpemUpCisJbXgyOF9yZWcoaHdfYXBiaF9kZWJ1ZykKKworCXVpbnQzMl90CXJlc2VydmVkWzM2XTsKKworCXVuaW9uIHsKKwlzdHJ1Y3QgeworCQlteDI4X3JlZyhod19hcGJoX2NoX2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoX254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoX2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaF9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2hfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaF9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2hfZGVidWcyKQorCX0gY2hbMTZdOworCXN0cnVjdCB7CisJCW14MjhfcmVnKGh3X2FwYmhfY2gwX2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMF9ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDBfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoMF9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gwX3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gwX2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDBfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMV9jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDFfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxX2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDFfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMV9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoMV9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxX2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDJfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gyX254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMl9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gyX2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDJfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDJfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoMl9kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gzX2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoM19ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDNfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoM19iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gzX3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gzX2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDNfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoNF9jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDRfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g0X2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDRfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoNF9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoNF9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g0X2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDVfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g1X254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoNV9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g1X2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDVfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDVfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoNV9kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g2X2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoNl9ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDZfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoNl9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g2X3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g2X2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDZfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoN19jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDdfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g3X2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDdfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoN19zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoN19kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g3X2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDhfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g4X254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoOF9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g4X2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDhfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDhfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoOF9kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g5X2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoOV9ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDlfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoOV9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g5X3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2g5X2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDlfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTBfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMF9ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEwX2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEwX2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEwX3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMF9kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMF9kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMV9jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDExX254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTFfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTFfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTFfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDExX2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDExX2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEyX2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTJfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMl9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMl9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxMl9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTJfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTJfZGVidWcyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTNfY3VyY21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxM19ueHRjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEzX2NtZCkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEzX2JhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDEzX3NlbWEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxM19kZWJ1ZzEpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxM19kZWJ1ZzIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNF9jdXJjbWRhcikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDE0X254dGNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTRfY21kKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTRfYmFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTRfc2VtYSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDE0X2RlYnVnMSkKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDE0X2RlYnVnMikKKwkJbXgyOF9yZWcoaHdfYXBiaF9jaDE1X2N1cmNtZGFyKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTVfbnh0Y21kYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNV9jbWQpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNV9iYXIpCisJCW14MjhfcmVnKGh3X2FwYmhfY2gxNV9zZW1hKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTVfZGVidWcxKQorCQlteDI4X3JlZyhod19hcGJoX2NoMTVfZGVidWcyKQorCX07CisJfTsKKwlteDI4X3JlZyhod19hcGJoX3ZlcnNpb24pCit9OworI2VuZGlmCisKKyNkZWZpbmUJQVBCSF9DVFJMMF9TRlRSU1QJCQkJKDEgPDwgMzEpCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURQkJCQkoMSA8PCAzMCkKKyNkZWZpbmUJQVBCSF9DVFJMMF9BSEJfQlVSU1Q4X0VOCQkJKDEgPDwgMjkpCisjZGVmaW5lCUFQQkhfQ1RSTDBfQVBCX0JVUlNUX0VOCQkJCSgxIDw8IDI4KQorI2RlZmluZQlBUEJIX0NUUkwwX1JTVkQwX01BU0sJCQkJKDB4ZmZmIDw8IDE2KQorI2RlZmluZQlBUEJIX0NUUkwwX1JTVkQwX09GRlNFVAkJCQkxNgorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX09GRlNFVAkJMAorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9TU1AwCQkJMHgwMDAxCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX1NTUDEJCQkweDAwMDIKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfU1NQMgkJCTB4MDAwNAorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9TU1AzCQkJMHgwMDA4CisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX05BTkQwCQkweDAwMTAKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfTkFORDEJCTB4MDAyMAorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9OQU5EMgkJMHgwMDQwCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX05BTkQzCQkweDAwODAKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfTkFORDQJCTB4MDEwMAorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9OQU5ENQkJMHgwMjAwCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX05BTkQ2CQkweDA0MDAKKyNkZWZpbmUJQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfTkFORDcJCTB4MDgwMAorI2RlZmluZQlBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9IU0FEQwkJMHgxMDAwCisjZGVmaW5lCUFQQkhfQ1RSTDBfQ0xLR0FURV9DSEFOTkVMX0xDRElGCQkweDIwMDAKKworI2RlZmluZQlBUEJIX0NUUkwxX0NIMTVfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMzEpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxNF9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAzMCkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDEzX0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDI5KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMTJfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMjgpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxMV9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAyNykKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDEwX0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDI2KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIOV9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAyNSkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDhfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMjQpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g3X0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDIzKQorI2RlZmluZQlBUEJIX0NUUkwxX0NINl9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAyMikKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDVfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMjEpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0g0X0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDIwKQorI2RlZmluZQlBUEJIX0NUUkwxX0NIM19DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAxOSkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDJfQ01EQ01QTFRfSVJRX0VOCQkJKDEgPDwgMTgpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxX0NNRENNUExUX0lSUV9FTgkJCSgxIDw8IDE3KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMF9DTURDTVBMVF9JUlFfRU4JCQkoMSA8PCAxNikKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSF9DTURDTVBMVF9JUlFfRU5fT0ZGU0VUCQkxNgorI2RlZmluZQlBUEJIX0NUUkwxX0NIX0NNRENNUExUX0lSUV9FTl9NQVNLCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMTVfQ01EQ01QTFRfSVJRCQkJKDEgPDwgMTUpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxNF9DTURDTVBMVF9JUlEJCQkoMSA8PCAxNCkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDEzX0NNRENNUExUX0lSUQkJCSgxIDw8IDEzKQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMTJfQ01EQ01QTFRfSVJRCQkJKDEgPDwgMTIpCisjZGVmaW5lCUFQQkhfQ1RSTDFfQ0gxMV9DTURDTVBMVF9JUlEJCQkoMSA8PCAxMSkKKyNkZWZpbmUJQVBCSF9DVFJMMV9DSDEwX0NNRENNUExUX0lSUQkJCSgxIDw8IDEwKQorI2RlZmluZQlBUEJIX0NUUkwxX0NIOV9DTURDTVBMVF9JUlEJCQkoMSA8PCA5KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIOF9DTURDTVBMVF9JUlEJCQkoMSA8PCA4KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIN19DTURDTVBMVF9JUlEJCQkoMSA8PCA3KQorI2RlZmluZQlBUEJIX0NUUkwxX0NINl9DTURDTVBMVF9JUlEJCQkoMSA8PCA2KQorI2RlZmluZQlBUEJIX0NUUkwxX0NINV9DTURDTVBMVF9JUlEJCQkoMSA8PCA1KQorI2RlZmluZQlBUEJIX0NUUkwxX0NINF9DTURDTVBMVF9JUlEJCQkoMSA8PCA0KQorI2RlZmluZQlBUEJIX0NUUkwxX0NIM19DTURDTVBMVF9JUlEJCQkoMSA8PCAzKQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMl9DTURDTVBMVF9JUlEJCQkoMSA8PCAyKQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMV9DTURDTVBMVF9JUlEJCQkoMSA8PCAxKQorI2RlZmluZQlBUEJIX0NUUkwxX0NIMF9DTURDTVBMVF9JUlEJCQkoMSA8PCAwKQorCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxNV9FUlJPUl9TVEFUVVMJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDE0X0VSUk9SX1NUQVRVUwkJCSgxIDw8IDMwKQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMTNfRVJST1JfU1RBVFVTCQkJKDEgPDwgMjkpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxMl9FUlJPUl9TVEFUVVMJCQkoMSA8PCAyOCkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDExX0VSUk9SX1NUQVRVUwkJCSgxIDw8IDI3KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMTBfRVJST1JfU1RBVFVTCQkJKDEgPDwgMjYpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g5X0VSUk9SX1NUQVRVUwkJCSgxIDw8IDI1KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIOF9FUlJPUl9TVEFUVVMJCQkoMSA8PCAyNCkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDdfRVJST1JfU1RBVFVTCQkJKDEgPDwgMjMpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0g2X0VSUk9SX1NUQVRVUwkJCSgxIDw8IDIyKQorI2RlZmluZQlBUEJIX0NUUkwyX0NINV9FUlJPUl9TVEFUVVMJCQkoMSA8PCAyMSkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDRfRVJST1JfU1RBVFVTCQkJKDEgPDwgMjApCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gzX0VSUk9SX1NUQVRVUwkJCSgxIDw8IDE5KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMl9FUlJPUl9TVEFUVVMJCQkoMSA8PCAxOCkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDFfRVJST1JfU1RBVFVTCQkJKDEgPDwgMTcpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gwX0VSUk9SX1NUQVRVUwkJCSgxIDw8IDE2KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMTVfRVJST1JfSVJRCQkJKDEgPDwgMTUpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxNF9FUlJPUl9JUlEJCQkoMSA8PCAxNCkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDEzX0VSUk9SX0lSUQkJCSgxIDw8IDEzKQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMTJfRVJST1JfSVJRCQkJKDEgPDwgMTIpCisjZGVmaW5lCUFQQkhfQ1RSTDJfQ0gxMV9FUlJPUl9JUlEJCQkoMSA8PCAxMSkKKyNkZWZpbmUJQVBCSF9DVFJMMl9DSDEwX0VSUk9SX0lSUQkJCSgxIDw8IDEwKQorI2RlZmluZQlBUEJIX0NUUkwyX0NIOV9FUlJPUl9JUlEJCQkoMSA8PCA5KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIOF9FUlJPUl9JUlEJCQkoMSA8PCA4KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIN19FUlJPUl9JUlEJCQkoMSA8PCA3KQorI2RlZmluZQlBUEJIX0NUUkwyX0NINl9FUlJPUl9JUlEJCQkoMSA8PCA2KQorI2RlZmluZQlBUEJIX0NUUkwyX0NINV9FUlJPUl9JUlEJCQkoMSA8PCA1KQorI2RlZmluZQlBUEJIX0NUUkwyX0NINF9FUlJPUl9JUlEJCQkoMSA8PCA0KQorI2RlZmluZQlBUEJIX0NUUkwyX0NIM19FUlJPUl9JUlEJCQkoMSA8PCAzKQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMl9FUlJPUl9JUlEJCQkoMSA8PCAyKQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMV9FUlJPUl9JUlEJCQkoMSA8PCAxKQorI2RlZmluZQlBUEJIX0NUUkwyX0NIMF9FUlJPUl9JUlEJCQkoMSA8PCAwKQorCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX1JFU0VUX0NIQU5ORUxfTUFTSwkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9PRkZTRVQJCTE2CisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX1JFU0VUX0NIQU5ORUxfU1NQMAkJKDB4MDAwMSA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9TU1AxCQkoMHgwMDAyIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9SRVNFVF9DSEFOTkVMX1NTUDIJCSgweDAwMDQgPDwgMTYpCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX1JFU0VUX0NIQU5ORUxfU1NQMwkJKDB4MDAwOCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9OQU5EMAkJKDB4MDAxMCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9OQU5EMQkJKDB4MDAyMCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9OQU5EMgkJKDB4MDA0MCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9OQU5EMwkJKDB4MDA4MCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9OQU5ENAkJKDB4MDEwMCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9OQU5ENQkJKDB4MDIwMCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9OQU5ENgkJKDB4MDQwMCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9OQU5ENwkJKDB4MDgwMCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9IU0FEQwkJKDB4MTAwMCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfUkVTRVRfQ0hBTk5FTF9MQ0RJRgkJKDB4MjAwMCA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfTUFTSwkJMHhmZmZmCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX09GRlNFVAkJMAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9TU1AwCQkweDAwMDEKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfU1NQMQkJMHgwMDAyCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX1NTUDIJCTB4MDAwNAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9TU1AzCQkweDAwMDgKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfTkFORDAJCTB4MDAxMAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9OQU5EMQkJMHgwMDIwCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX05BTkQyCQkweDAwNDAKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfTkFORDMJCTB4MDA4MAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9OQU5ENAkJMHgwMTAwCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX05BTkQ1CQkweDAyMDAKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfTkFORDYJCTB4MDQwMAorI2RlZmluZQlBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9OQU5ENwkJMHgwODAwCisjZGVmaW5lCUFQQkhfQ0hBTk5FTF9DVFJMX0ZSRUVaRV9DSEFOTkVMX0hTQURDCQkweDEwMDAKKyNkZWZpbmUJQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfTENESUYJCTB4MjAwMAorCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMTVfTUFTSwkJCQkoMHgzIDw8IDMwKQorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDE1X09GRlNFVAkJCQkzMAorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDE0X01BU0sJCQkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxNF9PRkZTRVQJCQkJMjgKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxM19NQVNLCQkJCSgweDMgPDwgMjYpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMTNfT0ZGU0VUCQkJCTI2CisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMTJfTUFTSwkJCQkoMHgzIDw8IDI0KQorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDEyX09GRlNFVAkJCQkyNAorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDExX01BU0sJCQkJKDB4MyA8PCAyMikKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxMV9PRkZTRVQJCQkJMjIKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0gxMF9NQVNLCQkJCSgweDMgPDwgMjApCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMTBfT0ZGU0VUCQkJCTIwCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIOV9NQVNLCQkJCSgweDMgPDwgMTgpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIOV9PRkZTRVQJCQkJMTgKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g4X01BU0sJCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g4X09GRlNFVAkJCQkxNgorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDdfTUFTSwkJCQkoMHgzIDw8IDE0KQorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDdfT0ZGU0VUCQkJCTE0CisjZGVmaW5lCUFQQkhfREVWU0VMX0NINl9NQVNLCQkJCSgweDMgPDwgMTIpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NINl9PRkZTRVQJCQkJMTIKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g1X01BU0sJCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJQVBCSF9ERVZTRUxfQ0g1X09GRlNFVAkJCQkxMAorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDRfTUFTSwkJCQkoMHgzIDw8IDgpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NINF9PRkZTRVQJCQkJOAorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDNfTUFTSwkJCQkoMHgzIDw8IDYpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIM19PRkZTRVQJCQkJNgorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDJfTUFTSwkJCQkoMHgzIDw8IDQpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMl9PRkZTRVQJCQkJNAorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDFfTUFTSwkJCQkoMHgzIDw8IDIpCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMV9PRkZTRVQJCQkJMgorI2RlZmluZQlBUEJIX0RFVlNFTF9DSDBfTUFTSwkJCQkoMHgzIDw8IDApCisjZGVmaW5lCUFQQkhfREVWU0VMX0NIMF9PRkZTRVQJCQkJMAorCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxNV9NQVNLCQkJKDB4MyA8PCAzMCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDE1X09GRlNFVAkJCTMwCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxNF9NQVNLCQkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDE0X09GRlNFVAkJCTI4CisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxM19NQVNLCQkJKDB4MyA8PCAyNikKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDEzX09GRlNFVAkJCTI2CisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxMl9NQVNLCQkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDEyX09GRlNFVAkJCTI0CisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxMV9NQVNLCQkJKDB4MyA8PCAyMikKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDExX09GRlNFVAkJCTIyCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxMF9NQVNLCQkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDEwX09GRlNFVAkJCTIwCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0g5X01BU0sJCQkoMHgzIDw8IDE4KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIOV9PRkZTRVQJCQkxOAorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIOF9NQVNLCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDhfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDhfQlVSU1QwCQkJKDB4MCA8PCAxNikKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDhfQlVSU1Q0CQkJKDB4MSA8PCAxNikKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDhfQlVSU1Q4CQkJKDB4MiA8PCAxNikKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDdfTUFTSwkJCSgweDMgPDwgMTQpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0g3X09GRlNFVAkJCTE0CisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0g2X01BU0sJCQkoMHgzIDw8IDEyKQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NINl9PRkZTRVQJCQkxMgorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NINV9NQVNLCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDVfT0ZGU0VUCQkJMTAKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDRfTUFTSwkJCSgweDMgPDwgOCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDRfT0ZGU0VUCQkJOAorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIM19NQVNLCQkJKDB4MyA8PCA2KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIM19PRkZTRVQJCQk2CisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gzX0JVUlNUMAkJCSgweDAgPDwgNikKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDNfQlVSU1Q0CQkJKDB4MSA8PCA2KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIM19CVVJTVDgJCQkoMHgyIDw8IDYpCisKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDJfTUFTSwkJCSgweDMgPDwgNCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDJfT0ZGU0VUCQkJNAorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMl9CVVJTVDAJCQkoMHgwIDw8IDQpCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gyX0JVUlNUNAkJCSgweDEgPDwgNCkKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDJfQlVSU1Q4CQkJKDB4MiA8PCA0KQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMV9NQVNLCQkJKDB4MyA8PCAyKQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMV9PRkZTRVQJCQkyCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gxX0JVUlNUMAkJCSgweDAgPDwgMikKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDFfQlVSU1Q0CQkJKDB4MSA8PCAyKQorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMV9CVVJTVDgJCQkoMHgyIDw8IDIpCisKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDBfTUFTSwkJCTB4MworI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMF9PRkZTRVQJCQkwCisjZGVmaW5lCUFQQkhfRE1BX0JVUlNUX1NJWkVfQ0gwX0JVUlNUMAkJCTB4MAorI2RlZmluZQlBUEJIX0RNQV9CVVJTVF9TSVpFX0NIMF9CVVJTVDQJCQkweDEKKyNkZWZpbmUJQVBCSF9ETUFfQlVSU1RfU0laRV9DSDBfQlVSU1Q4CQkJMHgyCisKKyNkZWZpbmUJQVBCSF9ERUJVR19HUE1JX09ORV9GSUZPCQkJKDEgPDwgMCkKKworI2RlZmluZQlBUEJIX0NIbl9DVVJDTURBUl9DTURfQUREUl9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlBUEJIX0NIbl9DVVJDTURBUl9DTURfQUREUl9PRkZTRVQJCTAKKworI2RlZmluZQlBUEJIX0NIbl9OWFRDTURBUl9DTURfQUREUl9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlBUEJIX0NIbl9OWFRDTURBUl9DTURfQUREUl9PRkZTRVQJCTAKKworI2RlZmluZQlBUEJIX0NIbl9DTURfWEZFUl9DT1VOVF9NQVNLCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX1hGRVJfQ09VTlRfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX0NNRFdPUkRTX01BU0sJCQkoMHhmIDw8IDEyKQorI2RlZmluZQlBUEJIX0NIbl9DTURfQ01EV09SRFNfT0ZGU0VUCQkJMTIKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX0hBTFRPTlRFUk1JTkFURQkJCSgxIDw8IDgpCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9XQUlUNEVORENNRAkJCSgxIDw8IDcpCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9TRU1BUEhPUkUJCQkJKDEgPDwgNikKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX05BTkRXQUlUNFJFQURZCQkJKDEgPDwgNSkKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX05BTkRMT0NLCQkJCSgxIDw8IDQpCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9JUlFPTkNNUExUCQkJCSgxIDw8IDMpCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9DSEFJTgkJCQkoMSA8PCAyKQorI2RlZmluZQlBUEJIX0NIbl9DTURfQ09NTUFORF9NQVNLCQkJMHgzCisjZGVmaW5lCUFQQkhfQ0huX0NNRF9DT01NQU5EX09GRlNFVAkJCTAKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX0NPTU1BTkRfTk9fRE1BX1hGRVIJCTB4MAorI2RlZmluZQlBUEJIX0NIbl9DTURfQ09NTUFORF9ETUFfV1JJVEUJCQkweDEKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX0NPTU1BTkRfRE1BX1JFQUQJCQkweDIKKyNkZWZpbmUJQVBCSF9DSG5fQ01EX0NPTU1BTkRfRE1BX1NFTlNFCQkJMHgzCisKKyNkZWZpbmUJQVBCSF9DSG5fQkFSX0FERFJFU1NfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQVBCSF9DSG5fQkFSX0FERFJFU1NfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUFQQkhfQ0huX1NFTUFfUlNWRDJfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlBUEJIX0NIbl9TRU1BX1JTVkQyX09GRlNFVAkJCTI0CisjZGVmaW5lCUFQQkhfQ0huX1NFTUFfUEhPUkVfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIbl9TRU1BX1BIT1JFX09GRlNFVAkJCTE2CisjZGVmaW5lCUFQQkhfQ0huX1NFTUFfUlNWRDFfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lCUFQQkhfQ0huX1NFTUFfUlNWRDFfT0ZGU0VUCQkJOAorI2RlZmluZQlBUEJIX0NIbl9TRU1BX0lOQ1JFTUVOVF9TRU1BX01BU0sJCSgweGZmIDw8IDApCisjZGVmaW5lCUFQQkhfQ0huX1NFTUFfSU5DUkVNRU5UX1NFTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1JFUQkJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX0JVUlNUCQkJCSgxIDw8IDMwKQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfS0lDSwkJCQkoMSA8PCAyOSkKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX0VORAkJCQkoMSA8PCAyOCkKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NFTlNFCQkJCSgxIDw8IDI3KQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfUkVBRFkJCQkJKDEgPDwgMjYpCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9MT0NLCQkJCSgxIDw8IDI1KQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfTkVYVENNREFERFJWQUxJRAkJKDEgPDwgMjQpCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9SRF9GSUZPX0VNUFRZCQkJKDEgPDwgMjMpCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9SRF9GSUZPX0ZVTEwJCQkoMSA8PCAyMikKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1dSX0ZJRk9fRU1QVFkJCQkoMSA8PCAyMSkKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1dSX0ZJRk9fRlVMTAkJCSgxIDw8IDIwKQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfUlNWRDFfTUFTSwkJCSgweDdmZmYgPDwgNSkKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1JTVkQxX09GRlNFVAkJCTUKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9NQVNLCQkweDFmCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfT0ZGU0VUCQkwCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfSURMRQkJMHgwMAorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1JFUV9DTUQxCQkweDAxCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfUkVRX0NNRDMJCTB4MDIKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9SRVFfQ01EMgkJMHgwMworI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1hGRVJfREVDT0RFCTB4MDQKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9SRVFfV0FJVAkJMHgwNQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1JFUV9DTUQ0CQkweDA2CisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfUElPX1JFUQkJMHgwNworI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1JFQURfRkxVU0gJCTB4MDgKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9SRUFEX1dBSVQJCTB4MDkKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcxX1NUQVRFTUFDSElORV9XUklURQkJMHgwYworI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1JFQURfUkVRCQkweDBkCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfQ0hFQ0tfQ0hBSU4JMHgwZQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1hGRVJfQ09NUExFVEUJMHgwZgorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1RFUk1JTkFURQkJMHgxNAorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1dBSVRfRU5ECQkweDE1CisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfV1JJVEVfV0FJVAkJMHgxYworI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX0hBTFRfQUZURVJfVEVSTQkweDFkCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMV9TVEFURU1BQ0hJTkVfQ0hFQ0tfV0FJVAkJMHgxZQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzFfU1RBVEVNQUNISU5FX1dBSVRfUkVBRFkJCTB4MWYKKworI2RlZmluZQlBUEJIX0NIbl9ERUJVRzJfQVBCX0JZVEVTX01BU0sJCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlBUEJIX0NIbl9ERUJVRzJfQVBCX0JZVEVTX09GRlNFVAkJMTYKKyNkZWZpbmUJQVBCSF9DSG5fREVCVUcyX0FIQl9CWVRFU19NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUFQQkhfQ0huX0RFQlVHMl9BSEJfQllURVNfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQVBCSF9WRVJTSU9OX01BSk9SX01BU0sJCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCUFQQkhfVkVSU0lPTl9NQUpPUl9PRkZTRVQJCQkyNAorI2RlZmluZQlBUEJIX1ZFUlNJT05fTUlOT1JfTUFTSwkJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJQVBCSF9WRVJTSU9OX01JTk9SX09GRlNFVAkJCTE2CisjZGVmaW5lCUFQQkhfVkVSU0lPTl9TVEVQX01BU0sJCQkJMHhmZmZmCisjZGVmaW5lCUFQQkhfVkVSU0lPTl9TVEVQX09GRlNFVAkJCTAKKworI2VuZGlmCS8qIF9fUkVHU19BUEJIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtYmFzZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZGNjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1iYXNlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggUGVyaXBoZXJhbCBCYXNlIEFkZHJlc3NlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucyBJbmMuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA5LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfQkFTRV9IX18KKyNkZWZpbmUgX19NWDI4X1JFR1NfQkFTRV9IX18KKworLyoKKyAqIFJlZ2lzdGVyIGJhc2UgYWRkcmVzcworICovCisjZGVmaW5lCU1YU19JQ09MX0JBU0UJCTB4ODAwMDAwMDAKKyNkZWZpbmUJTVhTX0hTQURDX0JBU0UJCTB4ODAwMDIwMDAKKyNkZWZpbmUJTVhTX0FQQkhfQkFTRQkJMHg4MDAwNDAwMAorI2RlZmluZQlNWFNfUEVSRk1PTl9CQVNFCTB4ODAwMDYwMDAKKyNkZWZpbmUJTVhTX0JDSF9CQVNFCQkweDgwMDBBMDAwCisjZGVmaW5lCU1YU19HUE1JX0JBU0UJCTB4ODAwMEMwMDAKKyNkZWZpbmUJTVhTX1NTUDBfQkFTRQkJMHg4MDAxMDAwMAorI2RlZmluZQlNWFNfU1NQMV9CQVNFCQkweDgwMDEyMDAwCisjZGVmaW5lCU1YU19TU1AyX0JBU0UJCTB4ODAwMTQwMDAKKyNkZWZpbmUJTVhTX1NTUDNfQkFTRQkJMHg4MDAxNjAwMAorI2RlZmluZQlNWFNfUElOQ1RSTF9CQVNFCTB4ODAwMTgwMDAKKyNkZWZpbmUJTVhTX0RJR0NUTF9CQVNFCQkweDgwMDFDMDAwCisjZGVmaW5lCU1YU19FVE1fQkFTRQkJMHg4MDAyMjAwMAorI2RlZmluZQlNWFNfQVBCWF9CQVNFCQkweDgwMDI0MDAwCisjZGVmaW5lCU1YU19EQ1BfQkFTRQkJMHg4MDAyODAwMAorI2RlZmluZQlNWFNfUFhQX0JBU0UJCTB4ODAwMkEwMDAKKyNkZWZpbmUJTVhTX09DT1RQX0JBU0UJCTB4ODAwMkMwMDAKKyNkZWZpbmUJTVhTX0FYSV9BSEIwX0JBU0UJMHg4MDAyRTAwMAorI2RlZmluZQlNWFNfTENESUZfQkFTRQkJMHg4MDAzMDAwMAorI2RlZmluZQlNWFNfQ0FOMF9CQVNFCQkweDgwMDMyMDAwCisjZGVmaW5lCU1YU19DQU4xX0JBU0UJCTB4ODAwMzQwMDAKKyNkZWZpbmUJTVhTX1NJTURCR19CQVNFCQkweDgwMDNDMDAwCisjZGVmaW5lCU1YU19TSU1HUE1JU0VMX0JBU0UJMHg4MDAzQzIwMAorI2RlZmluZQlNWFNfU0lNU1NQU0VMX0JBU0UJMHg4MDAzQzMwMAorI2RlZmluZQlNWFNfU0lNTUVNU0VMX0JBU0UJMHg4MDAzQzQwMAorI2RlZmluZQlNWFNfR1BJT01PTl9CQVNFCTB4ODAwM0M1MDAKKyNkZWZpbmUJTVhTX1NJTUVORVRfQkFTRQkweDgwMDNDNzAwCisjZGVmaW5lCU1YU19BUk1KVEFHX0JBU0UJMHg4MDAzQzgwMAorI2RlZmluZQlNWFNfQ0xLQ1RSTF9CQVNFCTB4ODAwNDAwMDAKKyNkZWZpbmUJTVhTX1NBSUYwX0JBU0UJCTB4ODAwNDIwMDAKKyNkZWZpbmUJTVhTX1BPV0VSX0JBU0UJCTB4ODAwNDQwMDAKKyNkZWZpbmUJTVhTX1NBSUYxX0JBU0UJCTB4ODAwNDYwMDAKKyNkZWZpbmUJTVhTX0xSQURDX0JBU0UJCTB4ODAwNTAwMDAKKyNkZWZpbmUJTVhTX1NQRElGX0JBU0UJCTB4ODAwNTQwMDAKKyNkZWZpbmUJTVhTX1JUQ19CQVNFCQkweDgwMDU2MDAwCisjZGVmaW5lCU1YU19JMkMwX0JBU0UJCTB4ODAwNTgwMDAKKyNkZWZpbmUJTVhTX0kyQzFfQkFTRQkJMHg4MDA1QTAwMAorI2RlZmluZQlNWFNfUFdNX0JBU0UJCTB4ODAwNjQwMDAKKyNkZWZpbmUJTVhTX1RJTVJPVF9CQVNFCQkweDgwMDY4MDAwCisjZGVmaW5lCU1YU19VQVJUQVBQMF9CQVNFCTB4ODAwNkEwMDAKKyNkZWZpbmUJTVhTX1VBUlRBUFAxX0JBU0UJMHg4MDA2QzAwMAorI2RlZmluZQlNWFNfVUFSVEFQUDJfQkFTRQkweDgwMDZFMDAwCisjZGVmaW5lCU1YU19VQVJUQVBQM19CQVNFCTB4ODAwNzAwMDAKKyNkZWZpbmUJTVhTX1VBUlRBUFA0X0JBU0UJMHg4MDA3MjAwMAorI2RlZmluZQlNWFNfVUFSVERCR19CQVNFCTB4ODAwNzQwMDAKKyNkZWZpbmUJTVhTX1VTQlBIWTBfQkFTRQkweDgwMDdDMDAwCisjZGVmaW5lCU1YU19VU0JQSFkxX0JBU0UJMHg4MDA3RTAwMAorI2RlZmluZQlNWFNfVVNCQ1RSTDBfQkFTRQkweDgwMDgwMDAwCisjZGVmaW5lCU1YU19VU0JDVFJMMV9CQVNFCTB4ODAwOTAwMDAKKyNkZWZpbmUJTVhTX0RGTFBUX0JBU0UJCTB4ODAwQzAwMDAKKyNkZWZpbmUJTVhTX0RSQU1fQkFTRQkJMHg4MDBFMDAwMAorI2RlZmluZQlNWFNfRU5FVDBfQkFTRQkJMHg4MDBGMDAwMAorI2RlZmluZQlNWFNfRU5FVDFfQkFTRQkJMHg4MDBGNDAwMAorCisjZW5kaWYgLyogX19NWDI4X1JFR1NfQkFTRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWJjaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtYmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjMDQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWJjaC5oCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBCQ0ggUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01YMjhfUkVHU19CQ0hfSF9fCisjZGVmaW5lIF9fTVgyOF9SRUdTX0JDSF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisKKyNpZm5kZWYJX19BU1NFTUJMWV9fCitzdHJ1Y3QgbXgyOF9iY2hfcmVncyB7CisJbXgyOF9yZWcoaHdfYmNoX2N0cmwpCisJbXgyOF9yZWcoaHdfYmNoX3N0YXR1czApCisJbXgyOF9yZWcoaHdfYmNoX21vZGUpCisJbXgyOF9yZWcoaHdfYmNoX2VuY29kZXB0cikKKwlteDI4X3JlZyhod19iY2hfZGF0YXB0cikKKwlteDI4X3JlZyhod19iY2hfbWV0YXB0cikKKworCXVpbnQzMl90CXJlc2VydmVkWzRdOworCisJbXgyOF9yZWcoaHdfYmNoX2xheW91dHNlbGVjdCkKKwlteDI4X3JlZyhod19iY2hfZmxhc2gwbGF5b3V0MCkKKwlteDI4X3JlZyhod19iY2hfZmxhc2gwbGF5b3V0MSkKKwlteDI4X3JlZyhod19iY2hfZmxhc2gxbGF5b3V0MCkKKwlteDI4X3JlZyhod19iY2hfZmxhc2gxbGF5b3V0MSkKKwlteDI4X3JlZyhod19iY2hfZmxhc2gybGF5b3V0MCkKKwlteDI4X3JlZyhod19iY2hfZmxhc2gybGF5b3V0MSkKKwlteDI4X3JlZyhod19iY2hfZmxhc2gzbGF5b3V0MCkKKwlteDI4X3JlZyhod19iY2hfZmxhc2gzbGF5b3V0MSkKKwlteDI4X3JlZyhod19iY2hfZGJna2VzcmVhZCkKKwlteDI4X3JlZyhod19iY2hfZGJnY3NmZXJlYWQpCisJbXgyOF9yZWcoaHdfYmNoX2RiZ3N5bmRlZ3JlYWQpCisJbXgyOF9yZWcoaHdfYmNoX2RiZ2FoYm1yZWFkKQorCW14MjhfcmVnKGh3X2JjaF9ibG9ja25hbWUpCisJbXgyOF9yZWcoaHdfYmNoX3ZlcnNpb24pCit9OworI2VuZGlmCisKKyNkZWZpbmUJQkNIX0NUUkxfU0ZUUlNUCQkJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQkNIX0NUUkxfQ0xLR0FURQkJCQkoMSA8PCAzMCkKKyNkZWZpbmUJQkNIX0NUUkxfREVCVUdTWU5EUk9NRQkJCQkoMSA8PCAyMikKKyNkZWZpbmUJQkNIX0NUUkxfTTJNX0xBWU9VVF9NQVNLCQkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJQkNIX0NUUkxfTTJNX0xBWU9VVF9PRkZTRVQJCQkxOAorI2RlZmluZQlCQ0hfQ1RSTF9NMk1fRU5DT0RFCQkJCSgxIDw8IDE3KQorI2RlZmluZQlCQ0hfQ1RSTF9NMk1fRU5BQkxFCQkJCSgxIDw8IDE2KQorI2RlZmluZQlCQ0hfQ1RSTF9ERUJVR19TVEFMTF9JUlFfRU4JCQkoMSA8PCAxMCkKKyNkZWZpbmUJQkNIX0NUUkxfQ09NUExFVEVfSVJRX0VOCQkJKDEgPDwgOCkKKyNkZWZpbmUJQkNIX0NUUkxfQk1fRVJST1JfSVJRCQkJCSgxIDw8IDMpCisjZGVmaW5lCUJDSF9DVFJMX0RFQlVHX1NUQUxMX0lSUQkJCSgxIDw8IDIpCisjZGVmaW5lCUJDSF9DVFJMX0NPTVBMRVRFX0lSUQkJCQkoMSA8PCAwKQorCisjZGVmaW5lCUJDSF9TVEFUVVMwX0hBTkRMRV9NQVNLCQkJCSgweGZmZiA8PCAyMCkKKyNkZWZpbmUJQkNIX1NUQVRVUzBfSEFORExFX09GRlNFVAkJCTIwCisjZGVmaW5lCUJDSF9TVEFUVVMwX0NPTVBMRVRFRF9DRV9NQVNLCQkJKDB4ZiA8PCAxNikKKyNkZWZpbmUJQkNIX1NUQVRVUzBfQ09NUExFVEVEX0NFX09GRlNFVAkJCTE2CisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9TVEFUVVNfQkxLMF9PRkZTRVQJCQk4CisjZGVmaW5lCUJDSF9TVEFUVVMwX1NUQVRVU19CTEswX1pFUk8JCQkoMHgwMCA8PCA4KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9TVEFUVVNfQkxLMF9FUlJPUjEJCQkoMHgwMSA8PCA4KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9TVEFUVVNfQkxLMF9FUlJPUjIJCQkoMHgwMiA8PCA4KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9TVEFUVVNfQkxLMF9FUlJPUjMJCQkoMHgwMyA8PCA4KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9TVEFUVVNfQkxLMF9FUlJPUjQJCQkoMHgwNCA8PCA4KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9TVEFUVVNfQkxLMF9VTkNPUlJFQ1RBQkxFCQkoMHhmZSA8PCA4KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9TVEFUVVNfQkxLMF9FUkFTRUQJCQkoMHhmZiA8PCA4KQorI2RlZmluZQlCQ0hfU1RBVFVTMF9BTExPTkVTCQkJCSgxIDw8IDQpCisjZGVmaW5lCUJDSF9TVEFUVVMwX0NPUlJFQ1RFRAkJCQkoMSA8PCAzKQorI2RlZmluZQlCQ0hfU1RBVFVTMF9VTkNPUlJFQ1RBQkxFCQkJKDEgPDwgMikKKworI2RlZmluZQlCQ0hfTU9ERV9FUkFTRV9USFJFU0hPTERfTUFTSwkJCTB4ZmYKKyNkZWZpbmUJQkNIX01PREVfRVJBU0VfVEhSRVNIT0xEX09GRlNFVAkJCTAKKworI2RlZmluZQlCQ0hfRU5DT0RFUFRSX0FERFJfTUFTSwkJCQkweGZmZmZmZmZmCisjZGVmaW5lCUJDSF9FTkNPREVQVFJfQUREUl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJQkNIX0RBVEFQVFJfQUREUl9NQVNLCQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNIX0RBVEFQVFJfQUREUl9PRkZTRVQJCQkJMAorCisjZGVmaW5lCUJDSF9NRVRBUFRSX0FERFJfTUFTSwkJCQkweGZmZmZmZmZmCisjZGVmaW5lCUJDSF9NRVRBUFRSX0FERFJfT0ZGU0VUCQkJCTAKKworI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMTVfU0VMRUNUX01BU0sJCSgweDMgPDwgMzApCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxNV9TRUxFQ1RfT0ZGU0VUCQkzMAorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMTRfU0VMRUNUX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxNF9TRUxFQ1RfT0ZGU0VUCQkyOAorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMTNfU0VMRUNUX01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxM19TRUxFQ1RfT0ZGU0VUCQkyNgorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMTJfU0VMRUNUX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxMl9TRUxFQ1RfT0ZGU0VUCQkyNAorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMTFfU0VMRUNUX01BU0sJCSgweDMgPDwgMjIpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxMV9TRUxFQ1RfT0ZGU0VUCQkyMgorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMTBfU0VMRUNUX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxMF9TRUxFQ1RfT0ZGU0VUCQkyMAorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTOV9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzlfU0VMRUNUX09GRlNFVAkJMTgKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzhfU0VMRUNUX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1M4X1NFTEVDVF9PRkZTRVQJCTE2CisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1M3X1NFTEVDVF9NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTN19TRUxFQ1RfT0ZGU0VUCQkxNAorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTNl9TRUxFQ1RfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzZfU0VMRUNUX09GRlNFVAkJMTIKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzVfU0VMRUNUX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1M1X1NFTEVDVF9PRkZTRVQJCTEwCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1M0X1NFTEVDVF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1M0X1NFTEVDVF9PRkZTRVQJCTgKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzNfU0VMRUNUX01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzNfU0VMRUNUX09GRlNFVAkJNgorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMl9TRUxFQ1RfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlCQ0hfTEFZT1VUU0VMRUNUX0NTMl9TRUxFQ1RfT0ZGU0VUCQk0CisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxX1NFTEVDVF9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCUJDSF9MQVlPVVRTRUxFQ1RfQ1MxX1NFTEVDVF9PRkZTRVQJCTIKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzBfU0VMRUNUX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJQkNIX0xBWU9VVFNFTEVDVF9DUzBfU0VMRUNUX09GRlNFVAkJMAorCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfTkJMT0NLU19NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfTkJMT0NLU19PRkZTRVQJCQkyNAorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX01FVEFfU0laRV9NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfTUVUQV9TSVpFX09GRlNFVAkJMTYKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX01BU0sJCQkoMHhmIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX0VDQzBfT0ZGU0VUCQkJMTIKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX05PTkUJCQkoMHgwIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX0VDQzBfRUNDMgkJCSgweDEgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0M0CQkJKDB4MiA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9FQ0MwX0VDQzYJCQkoMHgzIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX0VDQzBfRUNDOAkJCSgweDQgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MxMAkJCSgweDUgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MxMgkJCSgweDYgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MxNAkJCSgweDcgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MxNgkJCSgweDggPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MxOAkJCSgweDkgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MyMAkJCSgweGEgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MyMgkJCSgweGIgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MyNAkJCSgweGMgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MyNgkJCSgweGQgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MyOAkJCSgweGUgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MzMAkJCSgweGYgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfRUNDMF9FQ0MzMgkJCSgweDEwIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQwX0dGMTNfMF9HRjE0XzEJCQkoMSA8PCAxMCkKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMF9EQVRBMF9TSVpFX01BU0sJCTB4ZmZmCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDBfREFUQTBfU0laRV9PRkZTRVQJCTAKKworI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX1BBR0VfU0laRV9NQVNLCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9QQUdFX1NJWkVfT0ZGU0VUCQkxNgorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfRUNDTl9PRkZTRVQJCQkxMgorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fTk9ORQkJCSgweDAgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfRUNDTl9FQ0MyCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzQJCQkoMHgyIDw8IDEyKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0VDQ05fRUNDNgkJCSgweDMgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfRUNDTl9FQ0M4CQkJKDB4NCA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzEwCQkJKDB4NSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzEyCQkJKDB4NiA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzE0CQkJKDB4NyA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzE2CQkJKDB4OCA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzE4CQkJKDB4OSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzIwCQkJKDB4YSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzIyCQkJKDB4YiA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzI0CQkJKDB4YyA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzI2CQkJKDB4ZCA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzI4CQkJKDB4ZSA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzMwCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX0VDQzMyCQkJKDB4MTAgPDwgMTIpCisjZGVmaW5lCUJDSF9GTEFTSExBWU9VVDFfR0YxM18wX0dGMTRfMQkJCSgxIDw8IDEwKQorI2RlZmluZQlCQ0hfRkxBU0hMQVlPVVQxX0RBVEFOX1NJWkVfTUFTSwkJMHhmZmYKKyNkZWZpbmUJQkNIX0ZMQVNITEFZT1VUMV9EQVRBTl9TSVpFX09GRlNFVAkJMAorCisjZGVmaW5lCUJDSF9ERUJVRzBfUlNWRDFfTUFTSwkJCQkoMHgxZiA8PCAyNykKKyNkZWZpbmUJQkNIX0RFQlVHMF9SU1ZEMV9PRkZTRVQJCQkJMjcKKyNkZWZpbmUJQkNIX0RFQlVHMF9ST01fQklTVF9FTkFCTEUJCQkoMSA8PCAyNikKKyNkZWZpbmUJQkNIX0RFQlVHMF9ST01fQklTVF9DT01QTEVURQkJCSgxIDw8IDI1KQorI2RlZmluZQlCQ0hfREVCVUcwX0tFU19ERUJVR19TWU5EUk9NRV9TWU1CT0xfTUFTSwkoMHgxZmYgPDwgMTYpCisjZGVmaW5lCUJDSF9ERUJVRzBfS0VTX0RFQlVHX1NZTkRST01FX1NZTUJPTF9PRkZTRVQJMTYKKyNkZWZpbmUJQkNIX0RFQlVHMF9LRVNfREVCVUdfU1lORFJPTUVfU1lNQk9MX05PUk1BTAkoMHgwIDw8IDE2KQorI2RlZmluZQlCQ0hfREVCVUcwX0tFU19ERUJVR19TWU5EUk9NRV9TWU1CT0xfVEVTVF9NT0RFCSgweDEgPDwgMTYpCisjZGVmaW5lCUJDSF9ERUJVRzBfS0VTX0RFQlVHX1NISUZUX1NZTkQJCQkoMSA8PCAxNSkKKyNkZWZpbmUJQkNIX0RFQlVHMF9LRVNfREVCVUdfUEFZTE9BRF9GTEFHCQkoMSA8PCAxNCkKKyNkZWZpbmUJQkNIX0RFQlVHMF9LRVNfREVCVUdfTU9ERTRLCQkJKDEgPDwgMTMpCisjZGVmaW5lCUJDSF9ERUJVRzBfS0VTX0RFQlVHX0tJQ0sJCQkoMSA8PCAxMikKKyNkZWZpbmUJQkNIX0RFQlVHMF9LRVNfU1RBTkRBTE9ORQkJCSgxIDw8IDExKQorI2RlZmluZQlCQ0hfREVCVUcwX0tFU19ERUJVR19TVEVQCQkJKDEgPDwgMTApCisjZGVmaW5lCUJDSF9ERUJVRzBfS0VTX0RFQlVHX1NUQUxMCQkJKDEgPDwgOSkKKyNkZWZpbmUJQkNIX0RFQlVHMF9CTV9LRVNfVEVTVF9CWVBBU1MJCQkoMSA8PCA4KQorI2RlZmluZQlCQ0hfREVCVUcwX1JTVkQwX01BU0sJCQkJKDB4MyA8PCA2KQorI2RlZmluZQlCQ0hfREVCVUcwX1JTVkQwX09GRlNFVAkJCQk2CisjZGVmaW5lCUJDSF9ERUJVRzBfREVCVUdfUkVHX1NFTEVDVF9NQVNLCQkweDNmCisjZGVmaW5lCUJDSF9ERUJVRzBfREVCVUdfUkVHX1NFTEVDVF9PRkZTRVQJCTAKKworI2RlZmluZQlCQ0hfREJHS0VTUkVBRF9WQUxVRVNfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNIX0RCR0tFU1JFQURfVkFMVUVTX09GRlNFVAkJCTAKKworI2RlZmluZQlCQ0hfREJHQ1NGRVJFQURfVkFMVUVTX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCUJDSF9EQkdDU0ZFUkVBRF9WQUxVRVNfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUJDSF9EQkdTWU5ER0VOUkVBRF9WQUxVRVNfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNIX0RCR1NZTkRHRU5SRUFEX1ZBTFVFU19PRkZTRVQJCTAKKworI2RlZmluZQlCQ0hfREJHQUhCTVJFQURfVkFMVUVTX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCUJDSF9EQkdBSEJNUkVBRF9WQUxVRVNfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUJDSF9CTE9DS05BTUVfTkFNRV9NQVNLCQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNIX0JMT0NLTkFNRV9OQU1FX09GRlNFVAkJCTAKKworI2RlZmluZQlCQ0hfVkVSU0lPTl9NQUpPUl9NQVNLCQkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlCQ0hfVkVSU0lPTl9NQUpPUl9PRkZTRVQJCQkyNAorI2RlZmluZQlCQ0hfVkVSU0lPTl9NSU5PUl9NQVNLCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlCQ0hfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCQkxNgorI2RlZmluZQlCQ0hfVkVSU0lPTl9TVEVQX01BU0sJCQkJMHhmZmZmCisjZGVmaW5lCUJDSF9WRVJTSU9OX1NURVBfT0ZGU0VUCQkJCTAKKworI2VuZGlmCS8qIF9fTVgyOF9SRUdTX0JDSF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWNsa2N0cmwuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWNsa2N0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2QwMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtY2xrY3RybC5oCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBDTEtDVFJMIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfQ0xLQ1RSTF9IX18KKyNkZWZpbmUgX19NWDI4X1JFR1NfQ0xLQ1RSTF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisKKyNpZm5kZWYJX19BU1NFTUJMWV9fCitzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgeworCW14MjhfcmVnKGh3X2Nsa2N0cmxfcGxsMGN0cmwwKQkJLyogMHgwMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfcGxsMGN0cmwxKQkJLyogMHgxMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfcGxsMWN0cmwwKQkJLyogMHgyMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfcGxsMWN0cmwxKQkJLyogMHgzMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfcGxsMmN0cmwwKQkJLyogMHg0MCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfY3B1KQkJLyogMHg1MCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfaGJ1cykJCS8qIDB4NjAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX3hidXMpCQkvKiAweDcwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF94dGFsKQkJLyogMHg4MCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfc3NwMCkJCS8qIDB4OTAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX3NzcDEpCQkvKiAweGEwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9zc3AyKQkJLyogMHhiMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfc3NwMykJCS8qIDB4YzAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2dwbWkpCQkvKiAweGQwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9zcGRpZikJCS8qIDB4ZTAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2VtaSkJCS8qIDB4ZjAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX3NhaWYwKQkJLyogMHgxMDAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX3NhaWYxKQkJLyogMHgxMTAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2xjZGlmKQkJLyogMHgxMjAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2V0bSkJCS8qIDB4MTMwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9lbmV0KQkJLyogMHgxNDAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2hzYWRjKQkJLyogMHgxNTAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX2ZsZXhjYW4pCQkvKiAweDE2MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWRbMTZdOworCisJbXgyOF9yZWcoaHdfY2xrY3RybF9mcmFjMCkJCS8qIDB4MWIwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9mcmFjMSkJCS8qIDB4MWMwICovCisJbXgyOF9yZWcoaHdfY2xrY3RybF9jbGtzZXEpCQkvKiAweDFkMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfcmVzZXQpCQkvKiAweDFlMCAqLworCW14MjhfcmVnKGh3X2Nsa2N0cmxfc3RhdHVzKQkJLyogMHgxZjAgKi8KKwlteDI4X3JlZyhod19jbGtjdHJsX3ZlcnNpb24pCQkvKiAweDIwMCAqLworfTsKKyNlbmRpZgorCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0xGUl9TRUxfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfTEZSX1NFTF9PRkZTRVQJMjgKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfTEZSX1NFTF9ERUZBVUxUCSgweDAgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0xGUl9TRUxfVElNRVNfMgkoMHgxIDw8IDI4KQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMX1RJTUVTXzA1CSgweDIgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0xGUl9TRUxfVU5ERUZJTkVECSgweDMgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0NQX1NFTF9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUxfT0ZGU0VUCQkyNAorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUxfREVGQVVMVAkoMHgwIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUxfVElNRVNfMgkoMHgxIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUxfVElNRVNfMDUJKDB4MiA8PCAyNCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfQ1BfU0VMX1VOREVGSU5FRAkoMHgzIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9ESVZfU0VMX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0RJVl9TRUxfT0ZGU0VUCTIwCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX0RJVl9TRUxfREVGQVVMVAkoMHgwIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9ESVZfU0VMX0xPV0VSCQkoMHgxIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9ESVZfU0VMX0xPV0VTVAkoMHgyIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9ESVZfU0VMX1VOREVGSU5FRAkoMHgzIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMF9FTl9VU0JfQ0xLUwkJKDEgPDwgMTgpCisjZGVmaW5lCUNMS0NUUkxfUExMMENUUkwwX1BPV0VSCQkJKDEgPDwgMTcpCisKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDFfTE9DSwkJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMV9GT1JDRV9MT0NLCQkoMSA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDFfTE9DS19DT1VOVF9NQVNLCTB4ZmZmZgorI2RlZmluZQlDTEtDVFJMX1BMTDBDVFJMMV9MT0NLX0NPVU5UX09GRlNFVAkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfQ0xLR0FURUVNSQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUxfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTF9PRkZTRVQJMjgKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTF9ERUZBVUxUCSgweDAgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUxfVElNRVNfMgkoMHgxIDw8IDI4KQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9MRlJfU0VMX1RJTUVTXzA1CSgweDIgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUxfVU5ERUZJTkVECSgweDMgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0NQX1NFTF9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9DUF9TRUxfT0ZGU0VUCQkyNAorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9DUF9TRUxfREVGQVVMVAkoMHgwIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9DUF9TRUxfVElNRVNfMgkoMHgxIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9DUF9TRUxfVElNRVNfMDUJKDB4MiA8PCAyNCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDBfQ1BfU0VMX1VOREVGSU5FRAkoMHgzIDw8IDI0KQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUxfT0ZGU0VUCTIwCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUxfREVGQVVMVAkoMHgwIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMX0xPV0VSCQkoMHgxIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMX0xPV0VTVAkoMHgyIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMX1VOREVGSU5FRAkoMHgzIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMF9FTl9VU0JfQ0xLUwkJKDEgPDwgMTgpCisjZGVmaW5lCUNMS0NUUkxfUExMMUNUUkwwX1BPV0VSCQkJKDEgPDwgMTcpCisKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDFfTE9DSwkJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMV9GT1JDRV9MT0NLCQkoMSA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwxQ1RSTDFfTE9DS19DT1VOVF9NQVNLCTB4ZmZmZgorI2RlZmluZQlDTEtDVFJMX1BMTDFDVFJMMV9MT0NLX0NPVU5UX09GRlNFVAkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwyQ1RSTDBfQ0xLR0FURQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfUExMMkNUUkwwX0xGUl9TRUxfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwyQ1RSTDBfTEZSX1NFTF9PRkZTRVQJMjgKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwyQ1RSTDBfSE9MRF9SSU5HX09GRl9CCSgxIDw8IDI2KQorI2RlZmluZQlDTEtDVFJMX1BMTDJDVFJMMF9DUF9TRUxfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwyQ1RSTDBfQ1BfU0VMX09GRlNFVAkJMjQKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwyQ1RSTDBfUE9XRVIJCQkoMSA8PCAyMykKKworI2RlZmluZQlDTEtDVFJMX0NQVV9CVVNZX1JFRl9YVEFMCQkoMSA8PCAyOSkKKyNkZWZpbmUJQ0xLQ1RSTF9DUFVfQlVTWV9SRUZfQ1BVCQkoMSA8PCAyOCkKKyNkZWZpbmUJQ0xLQ1RSTF9DUFVfRElWX1hUQUxfRlJBQ19FTgkJKDEgPDwgMjYpCisjZGVmaW5lCUNMS0NUUkxfQ1BVX0RJVl9YVEFMX01BU0sJCSgweDNmZiA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9DUFVfRElWX1hUQUxfT0ZGU0VUCQkxNgorI2RlZmluZQlDTEtDVFJMX0NQVV9JTlRFUlJVUFRfV0FJVAkJKDEgPDwgMTIpCisjZGVmaW5lCUNMS0NUUkxfQ1BVX0RJVl9DUFVfRlJBQ19FTgkJKDEgPDwgMTApCisjZGVmaW5lCUNMS0NUUkxfQ1BVX0RJVl9DUFVfTUFTSwkJMHgzZgorI2RlZmluZQlDTEtDVFJMX0NQVV9ESVZfQ1BVX09GRlNFVAkJMAorCisjZGVmaW5lCUNMS0NUUkxfSEJVU19BU01fQlVTWQkJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX0hCVVNfRENQX0FTX0VOQUJMRQkJKDEgPDwgMzApCisjZGVmaW5lCUNMS0NUUkxfSEJVU19QWFBfQVNfRU5BQkxFCQkoMSA8PCAyOSkKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX0FTTV9FTUlQT1JUX0FTX0VOQUJMRQkoMSA8PCAyNykKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX0FQQkhETUFfQVNfRU5BQkxFCQkoMSA8PCAyNikKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX0FQQlhETUFfQVNfRU5BQkxFCQkoMSA8PCAyNSkKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1RSQUZGSUNfSkFNX0FTX0VOQUJMRQkoMSA8PCAyNCkKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1RSQUZGSUNfQVNfRU5BQkxFCQkoMSA8PCAyMykKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX0NQVV9EQVRBX0FTX0VOQUJMRQkJKDEgPDwgMjIpCisjZGVmaW5lCUNMS0NUUkxfSEJVU19DUFVfSU5TVFJfQVNfRU5BQkxFCSgxIDw8IDIxKQorI2RlZmluZQlDTEtDVFJMX0hCVVNfQVNNX0VOQUJMRQkJCSgxIDw8IDIwKQorI2RlZmluZQlDTEtDVFJMX0hCVVNfQVVUT19DTEVBUl9ESVZfRU5BQkxFCSgxIDw8IDE5KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfU0xPV19ESVZfTUFTSwkJKDB4NyA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX09GRlNFVAkJMTYKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX0JZMQkJKDB4MCA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX0JZMgkJKDB4MSA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX0JZNAkJKDB4MiA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX0JZOAkJKDB4MyA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX0JZMTYJCSgweDQgPDwgMTYpCisjZGVmaW5lCUNMS0NUUkxfSEJVU19TTE9XX0RJVl9CWTMyCQkoMHg1IDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0hCVVNfRElWX0ZSQUNfRU4JCSgxIDw8IDUpCisjZGVmaW5lCUNMS0NUUkxfSEJVU19ESVZfTUFTSwkJCTB4MWYKKyNkZWZpbmUJQ0xLQ1RSTF9IQlVTX0RJVl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9YQlVTX0JVU1kJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9YQlVTX0FVVE9fQ0xFQVJfRElWX0VOQUJMRQkoMSA8PCAxMSkKKyNkZWZpbmUJQ0xLQ1RSTF9YQlVTX0RJVl9GUkFDX0VOCQkoMSA8PCAxMCkKKyNkZWZpbmUJQ0xLQ1RSTF9YQlVTX0RJVl9NQVNLCQkJMHgzZmYKKyNkZWZpbmUJQ0xLQ1RSTF9YQlVTX0RJVl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9YVEFMX1VBUlRfQ0xLX0dBVEUJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX1hUQUxfUFdNX0NMSzI0TV9HQVRFCQkoMSA8PCAyOSkKKyNkZWZpbmUJQ0xLQ1RSTF9YVEFMX1RJTVJPVF9DTEszMktfR0FURQkJKDEgPDwgMjYpCisjZGVmaW5lCUNMS0NUUkxfWFRBTF9ESVZfVUFSVF9NQVNLCQkweDMKKyNkZWZpbmUJQ0xLQ1RSTF9YVEFMX0RJVl9VQVJUX09GRlNFVAkJMAorCisjZGVmaW5lCUNMS0NUUkxfU1NQX0NMS0dBVEUJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9TU1BfQlVTWQkJCSgxIDw8IDI5KQorI2RlZmluZQlDTEtDVFJMX1NTUF9ESVZfRlJBQ19FTgkJCSgxIDw8IDkpCisjZGVmaW5lCUNMS0NUUkxfU1NQX0RJVl9NQVNLCQkJMHgxZmYKKyNkZWZpbmUJQ0xLQ1RSTF9TU1BfRElWX09GRlNFVAkJCTAKKworI2RlZmluZQlDTEtDVFJMX0dQTUlfQ0xLR0FURQkJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX0dQTUlfQlVTWQkJCSgxIDw8IDI5KQorI2RlZmluZQlDTEtDVFJMX0dQTUlfRElWX0ZSQUNfRU4JCSgxIDw8IDEwKQorI2RlZmluZQlDTEtDVFJMX0dQTUlfRElWX01BU0sJCQkweDNmZgorI2RlZmluZQlDTEtDVFJMX0dQTUlfRElWX09GRlNFVAkJCTAKKworI2RlZmluZQlDTEtDVFJMX1NQRElGX0NMS0dBVEUJCQkoMSA8PCAzMSkKKworI2RlZmluZQlDTEtDVFJMX0VNSV9DTEtHQVRFCQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfRU1JX1NZTkNfTU9ERV9FTgkJKDEgPDwgMzApCisjZGVmaW5lCUNMS0NUUkxfRU1JX0JVU1lfUkVGX1hUQUwJCSgxIDw8IDI5KQorI2RlZmluZQlDTEtDVFJMX0VNSV9CVVNZX1JFRl9FTUkJCSgxIDw8IDI4KQorI2RlZmluZQlDTEtDVFJMX0VNSV9CVVNZX1JFRl9DUFUJCSgxIDw8IDI3KQorI2RlZmluZQlDTEtDVFJMX0VNSV9CVVNZX1NZTkNfTU9ERQkJKDEgPDwgMjYpCisjZGVmaW5lCUNMS0NUUkxfRU1JX0JVU1lfRENDX1JFU1lOQwkJKDEgPDwgMTcpCisjZGVmaW5lCUNMS0NUUkxfRU1JX0RDQ19SRVNZTkNfRU5BQkxFCQkoMSA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9FTUlfRElWX1hUQUxfTUFTSwkJKDB4ZiA8PCA4KQorI2RlZmluZQlDTEtDVFJMX0VNSV9ESVZfWFRBTF9PRkZTRVQJCTgKKyNkZWZpbmUJQ0xLQ1RSTF9FTUlfRElWX0VNSV9NQVNLCQkweDNmCisjZGVmaW5lCUNMS0NUUkxfRU1JX0RJVl9FTUlfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9TQUlGMF9DTEtHQVRFCQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfU0FJRjBfQlVTWQkJCSgxIDw8IDI5KQorI2RlZmluZQlDTEtDVFJMX1NBSUYwX0RJVl9GUkFDX0VOCQkoMSA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9TQUlGMF9ESVZfTUFTSwkJCTB4ZmZmZgorI2RlZmluZQlDTEtDVFJMX1NBSUYwX0RJVl9PRkZTRVQJCTAKKworI2RlZmluZQlDTEtDVFJMX1NBSUYxX0NMS0dBVEUJCQkoMSA8PCAzMSkKKyNkZWZpbmUJQ0xLQ1RSTF9TQUlGMV9CVVNZCQkJKDEgPDwgMjkpCisjZGVmaW5lCUNMS0NUUkxfU0FJRjFfRElWX0ZSQUNfRU4JCSgxIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX1NBSUYxX0RJVl9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUNMS0NUUkxfU0FJRjFfRElWX09GRlNFVAkJMAorCisjZGVmaW5lCUNMS0NUUkxfRElTX0xDRElGX0NMS0dBVEUJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX0RJU19MQ0RJRl9CVVNZCQkJKDEgPDwgMjkpCisjZGVmaW5lCUNMS0NUUkxfRElTX0xDRElGX0RJVl9GUkFDX0VOCQkoMSA8PCAxMykKKyNkZWZpbmUJQ0xLQ1RSTF9ESVNfTENESUZfRElWX01BU0sJCTB4MWZmZgorI2RlZmluZQlDTEtDVFJMX0RJU19MQ0RJRl9ESVZfT0ZGU0VUCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9FVE1fQ0xLR0FURQkJCSgxIDw8IDMxKQorI2RlZmluZQlDTEtDVFJMX0VUTV9CVVNZCQkJKDEgPDwgMjkpCisjZGVmaW5lCUNMS0NUUkxfRVRNX0RJVl9GUkFDX0VOCQkJKDEgPDwgNykKKyNkZWZpbmUJQ0xLQ1RSTF9FVE1fRElWX01BU0sJCQkweDdmCisjZGVmaW5lCUNMS0NUUkxfRVRNX0RJVl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX1NMRUVQCQkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9ESVNBQkxFCQkJKDEgPDwgMzApCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9TVEFUVVMJCQkoMSA8PCAyOSkKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX0JVU1lfVElNRQkJCSgxIDw8IDI3KQorI2RlZmluZQlDTEtDVFJMX0VORVRfRElWX1RJTUVfTUFTSwkJKDB4M2YgPDwgMjEpCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9ESVZfVElNRV9PRkZTRVQJCTIxCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9USU1FX1NFTF9NQVNLCQkoMHgzIDw8IDE5KQorI2RlZmluZQlDTEtDVFJMX0VORVRfVElNRV9TRUxfT0ZGU0VUCQkxOQorI2RlZmluZQlDTEtDVFJMX0VORVRfVElNRV9TRUxfWFRBTAkJKDB4MCA8PCAxOSkKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMX1BMTAkJKDB4MSA8PCAxOSkKKyNkZWZpbmUJQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMX1JNSUlfQ0xLCQkoMHgyIDw8IDE5KQorI2RlZmluZQlDTEtDVFJMX0VORVRfVElNRV9TRUxfVU5ERUZJTkVECQkoMHgzIDw8IDE5KQorI2RlZmluZQlDTEtDVFJMX0VORVRfQ0xLX09VVF9FTgkJCSgxIDw8IDE4KQorI2RlZmluZQlDTEtDVFJMX0VORVRfUkVTRVRfQllfU1dfQ0hJUAkJKDEgPDwgMTcpCisjZGVmaW5lCUNMS0NUUkxfRU5FVF9SRVNFVF9CWV9TVwkJKDEgPDwgMTYpCisKKyNkZWZpbmUJQ0xLQ1RSTF9IU0FEQ19SRVNFVEIJCQkoMSA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9IU0FEQ19GUkVRRElWX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCUNMS0NUUkxfSFNBRENfRlJFUURJVl9PRkZTRVQJCTI4CisKKyNkZWZpbmUJQ0xLQ1RSTF9GTEVYQ0FOX1NUT1BfQ0FOMAkJKDEgPDwgMzApCisjZGVmaW5lCUNMS0NUUkxfRkxFWENBTl9DQU4wX1NUQVRVUwkJKDEgPDwgMjkpCisjZGVmaW5lCUNMS0NUUkxfRkxFWENBTl9TVE9QX0NBTjEJCSgxIDw8IDI4KQorI2RlZmluZQlDTEtDVFJMX0ZMRVhDQU5fQ0FOMV9TVEFUVVMJCSgxIDw8IDI3KQorCisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfQ0xLR0FURUlPMAkJKDEgPDwgMzEpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfSU8wX1NUQUJMRQkJKDEgPDwgMzApCisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfSU8wRlJBQ19NQVNLCQkoMHgzZiA8PCAyNCkKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9JTzBGUkFDX09GRlNFVAkJMjQKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFSU8xCQkoMSA8PCAyMykKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9JTzFfU1RBQkxFCQkoMSA8PCAyMikKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9JTzFGUkFDX01BU0sJCSgweDNmIDw8IDE2KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0lPMUZSQUNfT0ZGU0VUCQkxNgorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0NMS0dBVEVFTUkJCSgxIDw8IDE1KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0VNSV9TVEFCTEUJCSgxIDw8IDE0KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0VNSUZSQUNfTUFTSwkJKDB4M2YgPDwgOCkKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9FTUlGUkFDX09GRlNFVAkJOAorI2RlZmluZQlDTEtDVFJMX0ZSQUMwX0NMS0dBVEVDUFUJCSgxIDw8IDcpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzBfQ1BVX1NUQUJMRQkJKDEgPDwgNikKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9DUFVGUkFDX01BU0sJCTB4M2YKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMF9DUFVGUkFDX09GRlNFVAkJMAorCisjZGVmaW5lCUNMS0NUUkxfRlJBQzFfQ0xLR0FURUdQTUkJCSgxIDw8IDIzKQorI2RlZmluZQlDTEtDVFJMX0ZSQUMxX0dQTUlfU1RBQkxFCQkoMSA8PCAyMikKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMV9HUE1JRlJBQ19NQVNLCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMV9HUE1JRlJBQ19PRkZTRVQJCTE2CisjZGVmaW5lCUNMS0NUUkxfRlJBQzFfQ0xLR0FURUhTQURDCQkoMSA8PCAxNSkKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMV9IU0FEQ19TVEFCTEUJCSgxIDw8IDE0KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMxX0hTQURDRlJBQ19NQVNLCQkoMHgzZiA8PCA4KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMxX0hTQURDRlJBQ19PRkZTRVQJCTgKKyNkZWZpbmUJQ0xLQ1RSTF9GUkFDMV9DTEtHQVRFUElYCQkoMSA8PCA3KQorI2RlZmluZQlDTEtDVFJMX0ZSQUMxX1BJWF9TVEFCTEUJCSgxIDw8IDYpCisjZGVmaW5lCUNMS0NUUkxfRlJBQzFfUElYRlJBQ19NQVNLCQkweDNmCisjZGVmaW5lCUNMS0NUUkxfRlJBQzFfUElYRlJBQ19PRkZTRVQJCTAKKworI2RlZmluZQlDTEtDVFJMX0NMS1NFUV9CWVBBU1NfQ1BVCQkoMSA8PCAxOCkKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0RJU19MQ0RJRgkJKDEgPDwgMTQpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19ESVNfTENESUZfQllQQVNTCSgweDEgPDwgMTQpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19ESVNfTENESUZfUEZECSgweDAgPDwgMTQpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19FVE0JCSgxIDw8IDgpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19FTUkJCSgxIDw8IDcpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AzCQkoMSA8PCA2KQorI2RlZmluZQlDTEtDVFJMX0NMS1NFUV9CWVBBU1NfU1NQMgkJKDEgPDwgNSkKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NTUDEJCSgxIDw8IDQpCisjZGVmaW5lCUNMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AwCQkoMSA8PCAzKQorI2RlZmluZQlDTEtDVFJMX0NMS1NFUV9CWVBBU1NfR1BNSQkJKDEgPDwgMikKKyNkZWZpbmUJQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NBSUYxCQkoMSA8PCAxKQorI2RlZmluZQlDTEtDVFJMX0NMS1NFUV9CWVBBU1NfU0FJRjAJCSgxIDw8IDApCisKKyNkZWZpbmUJQ0xLQ1RSTF9SRVNFVF9XRE9HX1BPUl9ESVNBQkxFCQkoMSA8PCA1KQorI2RlZmluZQlDTEtDVFJMX1JFU0VUX0VYVEVSTkFMX1JFU0VUX0VOQUJMRQkoMSA8PCA0KQorI2RlZmluZQlDTEtDVFJMX1JFU0VUX1RIRVJNQUxfUkVTRVRfRU5BQkxFCSgxIDw8IDMpCisjZGVmaW5lCUNMS0NUUkxfUkVTRVRfVEhFUk1BTF9SRVNFVF9ERUZBVUxUCSgxIDw8IDIpCisjZGVmaW5lCUNMS0NUUkxfUkVTRVRfQ0hJUAkJCSgxIDw8IDEpCisjZGVmaW5lCUNMS0NUUkxfUkVTRVRfRElHCQkJKDEgPDwgMCkKKworI2RlZmluZQlDTEtDVFJMX1NUQVRVU19DUFVfTElNSVRfTUFTSwkJKDB4MyA8PCAzMCkKKyNkZWZpbmUJQ0xLQ1RSTF9TVEFUVVNfQ1BVX0xJTUlUX09GRlNFVAkJMzAKKworI2RlZmluZQlDTEtDVFJMX1ZFUlNJT05fTUFKT1JfTUFTSwkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCUNMS0NUUkxfVkVSU0lPTl9NQUpPUl9PRkZTRVQJCTI0CisjZGVmaW5lCUNMS0NUUkxfVkVSU0lPTl9NSU5PUl9NQVNLCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJQ0xLQ1RSTF9WRVJTSU9OX01JTk9SX09GRlNFVAkJMTYKKyNkZWZpbmUJQ0xLQ1RSTF9WRVJTSU9OX1NURVBfTUFTSwkJMHhmZmZmCisjZGVmaW5lCUNMS0NUUkxfVkVSU0lPTl9TVEVQX09GRlNFVAkJMAorCisjZW5kaWYgLyogX19NWDI4X1JFR1NfQ0xLQ1RSTF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWNvbW1vbi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlOTc1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLWNvbW1vbi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFJlZ2lzdGVyIEFjY2Vzc29ycworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTVgyOF9SRUdTX0NPTU1PTl9IX18KKyNkZWZpbmUgX19NWDI4X1JFR1NfQ09NTU9OX0hfXworCisvKgorICogVGhlIGkuTVgyOCBoYXMgaW50ZXJlc3RpbmcgZmVhdHVyZSB3aGVuIGl0IGNvbWVzIHRvIHJlZ2lzdGVyIGFjY2Vzcy4gVGhlcmUKKyAqIGFyZSBmb3VyIGtpbmRzIG9mIGFjY2VzcyB0byBvbmUgcGFydGljdWxhciByZWdpc3Rlci4gVGhvc2UgYXJlOgorICoKKyAqIDEpIENvbW1vbiByZWFkL3dyaXRlIGFjY2Vzcy4gVG8gdXNlIHRoaXMgbW9kZSwganVzdCB3cml0ZSB0byB0aGUgYWRkcmVzcyBvZgorICogICAgdGhlIHJlZ2lzdGVyLgorICogMikgU2V0IGJpdHMgb25seSBhY2Nlc3MuIFRvIHNldCBiaXRzLCB3cml0ZSB3aGljaCBiaXRzIHlvdSB3YW50IHRvIHNldCB0byB0aGUKKyAqICAgIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyICsgMHg0LgorICogMykgQ2xlYXIgYml0cyBvbmx5IGFjY2Vzcy4gVG8gY2xlYXIgYml0cywgd3JpdGUgd2hpY2ggYml0cyB5b3Ugd2FudCB0byBjbGVhcgorICogICAgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyICsgMHg4LgorICogNCkgVG9nZ2xlIGJpdHMgb25seSBhY2Nlc3MuIFRvIHRvZ2dsZSBiaXRzLCB3cml0ZSB3aGljaCBiaXRzIHlvdSB3YW50IHRvCisgKiAgICB0b2dnbGUgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyICsgMHhjLgorICoKKyAqIElNUE9SVEFOVCBOT1RFOiBOb3QgYWxsIHJlZ2lzdGVycyBzdXBwb3J0IGFjY2Vzc2VzIDItNCEgQWxzbywgbm90IGFsbCBiaXRzCisgKiBjYW4gYmUgc2V0L2NsZWFyZWQgYnkgcHVyZSB3cml0ZSBhcyBpbiBhY2Nlc3MgdHlwZSAxLCBzb21lIG5lZWQgdG8gYmUKKyAqIGV4cGxpY2l0bHkgc2V0L2NsZWFyZWQgYnkgdXNpbmcgYWNjZXNzIHR5cGUgMi0zLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFuZCBzdHJ1Y3R1cmVzIGFsbG93IHRoZSB1c2VyIHRvIGVpdGhlciBhY2Nlc3MgdGhlCisgKiByZWdpc3RlciBpbiBhbGwgYWZvcmVtZW50aW9uZWQgbW9kZXMgKGJ5IGFjY2Vzc2luZyByZWdfbmFtZSwgcmVnX25hbWVfc2V0LAorICogcmVnX25hbWVfY2xyLCByZWdfbmFtZV90b2cpIG9yIHBhc3MgdGhlIHJlZ2lzdGVyIHN0cnVjdHVyZSBmdXJ0aGVyIGludG8KKyAqIHZhcmlvdXMgZnVuY3Rpb25zIHdpdGggY29ycmVjdCB0eXBlIGluZm9ybWF0aW9uIChieSBhY2Nlc3NpbmcgcmVnX25hbWVfcmVnKS4KKyAqCisgKi8KKworI2RlZmluZQlfX214MjhfcmVnKG5hbWUpCQlcCisJdWludDMyX3QgbmFtZTsJCQlcCisJdWludDMyX3QgbmFtZSMjX3NldDsJCVwKKwl1aW50MzJfdCBuYW1lIyNfY2xyOwkJXAorCXVpbnQzMl90IG5hbWUjI190b2c7CisKK3N0cnVjdCBteDI4X3JlZ2lzdGVyIHsKKwlfX214MjhfcmVnKHJlZykKK307CisKKyNkZWZpbmUJbXgyOF9yZWcobmFtZSkJCQkJCVwKKwl1bmlvbiB7CQkJCQkJXAorCQlzdHJ1Y3QgeyBfX214MjhfcmVnKG5hbWUpIH07CQlcCisJCXN0cnVjdCBteDI4X3JlZ2lzdGVyIG5hbWUjI19yZWc7CVwKKwl9OworCisjZW5kaWYJLyogX19NWDI4X1JFR1NfQ09NTU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtZ3BtaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtZ3BtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTY3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1ncG1pLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IEdQTUkgUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01YMjhfUkVHU19HUE1JX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19HUE1JX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X2dwbWlfcmVncyB7CisJbXgyOF9yZWcoaHdfZ3BtaV9jdHJsMCkKKwlteDI4X3JlZyhod19ncG1pX2NvbXBhcmUpCisJbXgyOF9yZWcoaHdfZ3BtaV9lY2NjdHJsKQorCW14MjhfcmVnKGh3X2dwbWlfZWNjY291bnQpCisJbXgyOF9yZWcoaHdfZ3BtaV9wYXlsb2FkKQorCW14MjhfcmVnKGh3X2dwbWlfYXV4aWxpYXJ5KQorCW14MjhfcmVnKGh3X2dwbWlfY3RybDEpCisJbXgyOF9yZWcoaHdfZ3BtaV90aW1pbmcwKQorCW14MjhfcmVnKGh3X2dwbWlfdGltaW5nMSkKKworCXVpbnQzMl90CXJlc2VydmVkWzRdOworCisJbXgyOF9yZWcoaHdfZ3BtaV9kYXRhKQorCW14MjhfcmVnKGh3X2dwbWlfc3RhdCkKKwlteDI4X3JlZyhod19ncG1pX2RlYnVnKQorCW14MjhfcmVnKGh3X2dwbWlfdmVyc2lvbikKK307CisjZW5kaWYKKworI2RlZmluZQlHUE1JX0NUUkwwX1NGVFJTVAkJCQkoMSA8PCAzMSkKKyNkZWZpbmUJR1BNSV9DVFJMMF9DTEtHQVRFCQkJCSgxIDw8IDMwKQorI2RlZmluZQlHUE1JX0NUUkwwX1JVTgkJCQkJKDEgPDwgMjkpCisjZGVmaW5lCUdQTUlfQ1RSTDBfREVWX0lSUV9FTgkJCQkoMSA8PCAyOCkKKyNkZWZpbmUJR1BNSV9DVFJMMF9MT0NLX0NTCQkJCSgxIDw8IDI3KQorI2RlZmluZQlHUE1JX0NUUkwwX1VETUEJCQkJCSgxIDw8IDI2KQorI2RlZmluZQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9NQVNLCQkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJR1BNSV9DVFJMMF9DT01NQU5EX01PREVfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJR1BNSV9DVFJMMF9DT01NQU5EX01PREVfV1JJVEUJCQkoMHgwIDw8IDI0KQorI2RlZmluZQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9SRUFECQkJKDB4MSA8PCAyNCkKKyNkZWZpbmUJR1BNSV9DVFJMMF9DT01NQU5EX01PREVfUkVBRF9BTkRfQ09NUEFSRQkoMHgyIDw8IDI0KQorI2RlZmluZQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9XQUlUX0ZPUl9SRUFEWQkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSAkJCQkoMSA8PCAyMykKKyNkZWZpbmUJR1BNSV9DVFJMMF9DU19NQVNLCQkJCSgweDcgPDwgMjApCisjZGVmaW5lCUdQTUlfQ1RSTDBfQ1NfT0ZGU0VUCQkJCTIwCisjZGVmaW5lCUdQTUlfQ1RSTDBfQUREUkVTU19NQVNLCQkJCSgweDcgPDwgMTcpCisjZGVmaW5lCUdQTUlfQ1RSTDBfQUREUkVTU19PRkZTRVQJCQkxNworI2RlZmluZQlHUE1JX0NUUkwwX0FERFJFU1NfTkFORF9EQVRBCQkJKDB4MCA8PCAxNykKKyNkZWZpbmUJR1BNSV9DVFJMMF9BRERSRVNTX05BTkRfQ0xFCQkJKDB4MSA8PCAxNykKKyNkZWZpbmUJR1BNSV9DVFJMMF9BRERSRVNTX05BTkRfQUxFCQkJKDB4MiA8PCAxNykKKyNkZWZpbmUJR1BNSV9DVFJMMF9BRERSRVNTX0lOQ1JFTUVOVAkJCSgxIDw8IDE2KQorI2RlZmluZQlHUE1JX0NUUkwwX1hGRVJfQ09VTlRfTUFTSwkJCTB4ZmZmZgorI2RlZmluZQlHUE1JX0NUUkwwX1hGRVJfQ09VTlRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUdQTUlfQ09NUEFSRV9NQVNLX01BU0sJCQkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUJR1BNSV9DT01QQVJFX01BU0tfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJR1BNSV9DT01QQVJFX1JFRkVSRU5DRV9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUdQTUlfQ09NUEFSRV9SRUZFUkVOQ0VfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9IQU5ETEVfTUFTSwkJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9IQU5ETEVfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0VDQ19DTURfTUFTSwkJCSgweDMgPDwgMTMpCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9FQ0NfQ01EX09GRlNFVAkJCTEzCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9FQ0NfQ01EX0RFQ09ERQkJCSgweDAgPDwgMTMpCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9FQ0NfQ01EX0VOQ09ERQkJCSgweDEgPDwgMTMpCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9FTkFCTEVfRUNDCQkJCSgxIDw8IDEyKQorI2RlZmluZQlHUE1JX0VDQ0NUUkxfQlVGRkVSX01BU0tfTUFTSwkJCTB4MWZmCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9CVUZGRVJfTUFTS19PRkZTRVQJCQkwCisjZGVmaW5lCUdQTUlfRUNDQ1RSTF9CVUZGRVJfTUFTS19CQ0hfQVVYT05MWQkJMHgxMDAKKyNkZWZpbmUJR1BNSV9FQ0NDVFJMX0JVRkZFUl9NQVNLX0JDSF9QQUdFCQkweDFmZgorCisjZGVmaW5lCUdQTUlfRUNDQ09VTlRfQ09VTlRfTUFTSwkJCTB4ZmZmZgorI2RlZmluZQlHUE1JX0VDQ0NPVU5UX0NPVU5UX09GRlNFVAkJCTAKKworI2RlZmluZQlHUE1JX1BBWUxPQURfQUREUkVTU19NQVNLCQkJKDB4M2ZmZmZmZmYgPDwgMikKKyNkZWZpbmUJR1BNSV9QQVlMT0FEX0FERFJFU1NfT0ZGU0VUCQkJMgorCisjZGVmaW5lCUdQTUlfQVVYSUxJQVJZX0FERFJFU1NfTUFTSwkJCSgweDNmZmZmZmZmIDw8IDIpCisjZGVmaW5lCUdQTUlfQVVYSUxJQVJZX0FERFJFU1NfT0ZGU0VUCQkJMgorCisjZGVmaW5lCUdQTUlfQ1RSTDFfREVDT1VQTEVfQ1MJCQkJKDEgPDwgMjQpCisjZGVmaW5lCUdQTUlfQ1RSTDFfV1JOX0RMWV9TRUxfTUFTSwkJCSgweDMgPDwgMjIpCisjZGVmaW5lCUdQTUlfQ1RSTDFfV1JOX0RMWV9TRUxfT0ZGU0VUCQkJMjIKKyNkZWZpbmUJR1BNSV9DVFJMMV9USU1FT1VUX0lSUV9FTgkJCSgxIDw8IDIwKQorI2RlZmluZQlHUE1JX0NUUkwxX0dBTkdFRF9SRFlCVVNZCQkJKDEgPDwgMTkpCisjZGVmaW5lCUdQTUlfQ1RSTDFfQkNIX01PREUJCQkJKDEgPDwgMTgpCisjZGVmaW5lCUdQTUlfQ1RSTDFfRExMX0VOQUJMRQkJCQkoMSA8PCAxNykKKyNkZWZpbmUJR1BNSV9DVFJMMV9IQUxGX1BFUklPRAkJCQkoMSA8PCAxNikKKyNkZWZpbmUJR1BNSV9DVFJMMV9SRE5fREVMQVlfTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lCUdQTUlfQ1RSTDFfUkROX0RFTEFZX09GRlNFVAkJCTEyCisjZGVmaW5lCUdQTUlfQ1RSTDFfRE1BMkVDQ19NT0RFCQkJCSgxIDw8IDExKQorI2RlZmluZQlHUE1JX0NUUkwxX0RFVl9JUlEJCQkJKDEgPDwgMTApCisjZGVmaW5lCUdQTUlfQ1RSTDFfVElNRU9VVF9JUlEJCQkJKDEgPDwgOSkKKyNkZWZpbmUJR1BNSV9DVFJMMV9CVVJTVF9FTgkJCQkoMSA8PCA4KQorI2RlZmluZQlHUE1JX0NUUkwxX0FCT1JUX1dBSVRfUkVRVUVTVAkJCSgxIDw8IDcpCisjZGVmaW5lCUdQTUlfQ1RSTDFfQUJPUlRfV0FJVF9GT1JfUkVBRFlfQ0hBTk5FTF9NQVNLCSgweDcgPDwgNCkKKyNkZWZpbmUJR1BNSV9DVFJMMV9BQk9SVF9XQUlUX0ZPUl9SRUFEWV9DSEFOTkVMX09GRlNFVAk0CisjZGVmaW5lCUdQTUlfQ1RSTDFfREVWX1JFU0VUCQkJCSgxIDw8IDMpCisjZGVmaW5lCUdQTUlfQ1RSTDFfQVRBX0lSUVJEWV9QT0xBUklUWQkJCSgxIDw8IDIpCisjZGVmaW5lCUdQTUlfQ1RSTDFfQ0FNRVJBX01PREUJCQkJKDEgPDwgMSkKKyNkZWZpbmUJR1BNSV9DVFJMMV9HUE1JX01PREUJCQkJKDEgPDwgMCkKKworI2RlZmluZQlHUE1JX1RJTUlORzBfQUREUkVTU19TRVRVUF9NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUdQTUlfVElNSU5HMF9BRERSRVNTX1NFVFVQX09GRlNFVAkJMTYKKyNkZWZpbmUJR1BNSV9USU1JTkcwX0RBVEFfSE9MRF9NQVNLCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUJR1BNSV9USU1JTkcwX0RBVEFfSE9MRF9PRkZTRVQJCQk4CisjZGVmaW5lCUdQTUlfVElNSU5HMF9EQVRBX1NFVFVQX01BU0sJCQkweGZmCisjZGVmaW5lCUdQTUlfVElNSU5HMF9EQVRBX1NFVFVQX09GRlNFVAkJCTAKKworI2RlZmluZQlHUE1JX1RJTUlORzFfREVWSUNFX0JVU1lfVElNRU9VVF9NQVNLCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlHUE1JX1RJTUlORzFfREVWSUNFX0JVU1lfVElNRU9VVF9PRkZTRVQJCTE2CisKKyNkZWZpbmUJR1BNSV9USU1JTkcyX1VETUFfVFJQX01BU0sJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJR1BNSV9USU1JTkcyX1VETUFfVFJQX09GRlNFVAkJCTI0CisjZGVmaW5lCUdQTUlfVElNSU5HMl9VRE1BX0VOVl9NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUdQTUlfVElNSU5HMl9VRE1BX0VOVl9PRkZTRVQJCQkxNgorI2RlZmluZQlHUE1JX1RJTUlORzJfVURNQV9IT0xEX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZQlHUE1JX1RJTUlORzJfVURNQV9IT0xEX09GRlNFVAkJCTgKKyNkZWZpbmUJR1BNSV9USU1JTkcyX1VETUFfU0VUVVBfTUFTSwkJCTB4ZmYKKyNkZWZpbmUJR1BNSV9USU1JTkcyX1VETUFfU0VUVVBfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUdQTUlfREFUQV9EQVRBX01BU0sJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlHUE1JX0RBVEFfREFUQV9PRkZTRVQJCQkJMAorCisjZGVmaW5lCUdQTUlfU1RBVF9SRUFEWV9CVVNZX01BU0sJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJR1BNSV9TVEFUX1JFQURZX0JVU1lfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJR1BNSV9TVEFUX1JEWV9USU1FT1VUX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJR1BNSV9TVEFUX1JEWV9USU1FT1VUX09GRlNFVAkJCTE2CisjZGVmaW5lCUdQTUlfU1RBVF9ERVY3X0VSUk9SCQkJCSgxIDw8IDE1KQorI2RlZmluZQlHUE1JX1NUQVRfREVWNl9FUlJPUgkJCQkoMSA8PCAxNCkKKyNkZWZpbmUJR1BNSV9TVEFUX0RFVjVfRVJST1IJCQkJKDEgPDwgMTMpCisjZGVmaW5lCUdQTUlfU1RBVF9ERVY0X0VSUk9SCQkJCSgxIDw8IDEyKQorI2RlZmluZQlHUE1JX1NUQVRfREVWM19FUlJPUgkJCQkoMSA8PCAxMSkKKyNkZWZpbmUJR1BNSV9TVEFUX0RFVjJfRVJST1IJCQkJKDEgPDwgMTApCisjZGVmaW5lCUdQTUlfU1RBVF9ERVYxX0VSUk9SCQkJCSgxIDw8IDkpCisjZGVmaW5lCUdQTUlfU1RBVF9ERVYwX0VSUk9SCQkJCSgxIDw8IDgpCisjZGVmaW5lCUdQTUlfU1RBVF9BVEFfSVJRCQkJCSgxIDw8IDQpCisjZGVmaW5lCUdQTUlfU1RBVF9JTlZBTElEX0JVRkZFUl9NQVNLCQkJKDEgPDwgMykKKyNkZWZpbmUJR1BNSV9TVEFUX0ZJRk9fRU1QVFkJCQkJKDEgPDwgMikKKyNkZWZpbmUJR1BNSV9TVEFUX0ZJRk9fRlVMTAkJCQkoMSA8PCAxKQorI2RlZmluZQlHUE1JX1NUQVRfUFJFU0VOVAkJCQkoMSA8PCAwKQorCisjZGVmaW5lCUdQTUlfREVCVUdfV0FJVF9GT1JfUkVBRFlfRU5EX01BU0sJCSgweGZmIDw8IDI0KQorI2RlZmluZQlHUE1JX0RFQlVHX1dBSVRfRk9SX1JFQURZX0VORF9PRkZTRVQJCTI0CisjZGVmaW5lCUdQTUlfREVCVUdfRE1BX1NFTlNFX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJR1BNSV9ERUJVR19ETUFfU0VOU0VfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJR1BNSV9ERUJVR19ETUFSRVFfTUFTSwkJCQkoMHhmZiA8PCA4KQorI2RlZmluZQlHUE1JX0RFQlVHX0RNQVJFUV9PRkZTRVQJCQk4CisjZGVmaW5lCUdQTUlfREVCVUdfQ01EX0VORF9NQVNLCQkJCTB4ZmYKKyNkZWZpbmUJR1BNSV9ERUJVR19DTURfRU5EX09GRlNFVAkJCTAKKworI2RlZmluZQlHUE1JX1ZFUlNJT05fTUFKT1JfTUFTSwkJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJR1BNSV9WRVJTSU9OX01BSk9SX09GRlNFVAkJCTI0CisjZGVmaW5lCUdQTUlfVkVSU0lPTl9NSU5PUl9NQVNLCQkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlHUE1JX1ZFUlNJT05fTUlOT1JfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJR1BNSV9WRVJTSU9OX1NURVBfTUFTSwkJCQkweGZmZmYKKyNkZWZpbmUJR1BNSV9WRVJTSU9OX1NURVBfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUdQTUlfREVCVUcyX1VETUFfU1RBVEVfTUFTSwkJCSgweGYgPDwgMjQpCisjZGVmaW5lCUdQTUlfREVCVUcyX1VETUFfU1RBVEVfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJR1BNSV9ERUJVRzJfQlVTWQkJCQkoMSA8PCAyMykKKyNkZWZpbmUJR1BNSV9ERUJVRzJfUElOX1NUQVRFX01BU0sJCQkoMHg3IDw8IDIwKQorI2RlZmluZQlHUE1JX0RFQlVHMl9QSU5fU1RBVEVfT0ZGU0VUCQkJMjAKKyNkZWZpbmUJR1BNSV9ERUJVRzJfUElOX1NUQVRFX1BTTV9JRExFCQkJKDB4MCA8PCAyMCkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfUElOX1NUQVRFX1BTTV9CWVRDTlQJCSgweDEgPDwgMjApCisjZGVmaW5lCUdQTUlfREVCVUcyX1BJTl9TVEFURV9QU01fQUREUgkJCSgweDIgPDwgMjApCisjZGVmaW5lCUdQTUlfREVCVUcyX1BJTl9TVEFURV9QU01fU1RBTEwJCQkoMHgzIDw8IDIwKQorI2RlZmluZQlHUE1JX0RFQlVHMl9QSU5fU1RBVEVfUFNNX1NUUk9CRQkJKDB4NCA8PCAyMCkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfUElOX1NUQVRFX1BTTV9BVEFSRFkJCSgweDUgPDwgMjApCisjZGVmaW5lCUdQTUlfREVCVUcyX1BJTl9TVEFURV9QU01fREhPTEQJCQkoMHg2IDw8IDIwKQorI2RlZmluZQlHUE1JX0RFQlVHMl9QSU5fU1RBVEVfUFNNX0RPTkUJCQkoMHg3IDw8IDIwKQorI2RlZmluZQlHUE1JX0RFQlVHMl9NQUlOX1NUQVRFX01BU0sJCQkoMHhmIDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9NQUlOX1NUQVRFX09GRlNFVAkJCTE2CisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTVNNX0lETEUJCQkoMHgwIDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9NQUlOX1NUQVRFX01TTV9CWVRDTlQJCSgweDEgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTVNNX1dBSVRGRQkJKDB4MiA8PCAxNikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfTUFJTl9TVEFURV9NU01fV0FJVEZSCQkoMHgzIDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9NQUlOX1NUQVRFX01TTV9ETUFSRVEJCSgweDQgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTVNNX0RNQUFDSwkJKDB4NSA8PCAxNikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfTUFJTl9TVEFURV9NU01fV0FJVEZGCQkoMHg2IDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9NQUlOX1NUQVRFX01TTV9MREZJRk8JCSgweDcgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTVNNX0xERE1BUgkJKDB4OCA8PCAxNikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfTUFJTl9TVEFURV9NU01fUkRDTVAJCSgweDkgPDwgMTYpCisjZGVmaW5lCUdQTUlfREVCVUcyX01BSU5fU1RBVEVfTVNNX0RPTkUJCQkoMHhhIDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHMl9TWU5EMkdQTUlfQkVfTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lCUdQTUlfREVCVUcyX1NZTkQyR1BNSV9CRV9PRkZTRVQJCQkxMgorI2RlZmluZQlHUE1JX0RFQlVHMl9HUE1JMlNZTkRfVkFMSUQJCQkoMSA8PCAxMSkKKyNkZWZpbmUJR1BNSV9ERUJVRzJfR1BNSTJTWU5EX1JFQURZCQkJKDEgPDwgMTApCisjZGVmaW5lCUdQTUlfREVCVUcyX1NZTkQyR1BNSV9WQUxJRAkJCSgxIDw8IDkpCisjZGVmaW5lCUdQTUlfREVCVUcyX1NZTkQyR1BNSV9SRUFEWQkJCSgxIDw8IDgpCisjZGVmaW5lCUdQTUlfREVCVUcyX1ZJRVdfREVMQVlFRF9SRE4JCQkoMSA8PCA3KQorI2RlZmluZQlHUE1JX0RFQlVHMl9VUERBVEVfV0lORE9XCQkJKDEgPDwgNikKKyNkZWZpbmUJR1BNSV9ERUJVRzJfUkROX1RBUF9NQVNLCQkJMHgzZgorI2RlZmluZQlHUE1JX0RFQlVHMl9SRE5fVEFQX09GRlNFVAkJCTAKKworI2RlZmluZQlHUE1JX0RFQlVHM19BUEJfV09SRF9DTlRSX01BU0sJCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlHUE1JX0RFQlVHM19BUEJfV09SRF9DTlRSX09GRlNFVAkJMTYKKyNkZWZpbmUJR1BNSV9ERUJVRzNfREVWX1dPUkRfQ05UUl9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCUdQTUlfREVCVUczX0RFVl9XT1JEX0NOVFJfT0ZGU0VUCQkwCisKKyNlbmRpZgkvKiBfX01YMjhfUkVHU19HUE1JX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtaTJjLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGUwZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtaTJjLmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IEkyQyBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTVgyOF9SRUdTX0kyQ19IX18KKyNkZWZpbmUgX19NWDI4X1JFR1NfSTJDX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X2kyY19yZWdzIHsKKwlteDI4X3JlZyhod19pMmNfY3RybDApCisJbXgyOF9yZWcoaHdfaTJjX3RpbWluZzApCisJbXgyOF9yZWcoaHdfaTJjX3RpbWluZzEpCisJbXgyOF9yZWcoaHdfaTJjX3RpbWluZzIpCisJbXgyOF9yZWcoaHdfaTJjX2N0cmwxKQorCW14MjhfcmVnKGh3X2kyY19zdGF0KQorCW14MjhfcmVnKGh3X2kyY19xdWV1ZWN0cmwpCisJbXgyOF9yZWcoaHdfaTJjX3F1ZXVlc3RhdCkKKwlteDI4X3JlZyhod19pMmNfcXVldWVjbWQpCisJbXgyOF9yZWcoaHdfaTJjX3F1ZXVlZGF0YSkKKwlteDI4X3JlZyhod19pMmNfZGF0YSkKKwlteDI4X3JlZyhod19pMmNfZGVidWcwKQorCW14MjhfcmVnKGh3X2kyY19kZWJ1ZzEpCisJbXgyOF9yZWcoaHdfaTJjX3ZlcnNpb24pCit9OworI2VuZGlmCisKKyNkZWZpbmUJSTJDX0NUUkxfU0ZUUlNUCQkJCSgxIDw8IDMxKQorI2RlZmluZQlJMkNfQ1RSTF9DTEtHQVRFCQkJKDEgPDwgMzApCisjZGVmaW5lCUkyQ19DVFJMX1JVTgkJCQkoMSA8PCAyOSkKKyNkZWZpbmUJSTJDX0NUUkxfUFJFQUNLCQkJCSgxIDw8IDI3KQorI2RlZmluZQlJMkNfQ1RSTF9BQ0tOT1dMRURHRQkJCSgxIDw8IDI2KQorI2RlZmluZQlJMkNfQ1RSTF9TRU5EX05BS19PTl9MQVNUCQkoMSA8PCAyNSkKKyNkZWZpbmUJSTJDX0NUUkxfTVVMVElfTUFTVEVSCQkJKDEgPDwgMjMpCisjZGVmaW5lCUkyQ19DVFJMX0NMT0NLX0hFTEQJCQkoMSA8PCAyMikKKyNkZWZpbmUJSTJDX0NUUkxfUkVUQUlOX0NMT0NLCQkJKDEgPDwgMjEpCisjZGVmaW5lCUkyQ19DVFJMX1BPU1RfU0VORF9TVE9QCQkJKDEgPDwgMjApCisjZGVmaW5lCUkyQ19DVFJMX1BSRV9TRU5EX1NUQVJUCQkJKDEgPDwgMTkpCisjZGVmaW5lCUkyQ19DVFJMX1NMQVZFX0FERFJFU1NfRU5BQkxFCQkoMSA8PCAxOCkKKyNkZWZpbmUJSTJDX0NUUkxfTUFTVEVSX01PREUJCQkoMSA8PCAxNykKKyNkZWZpbmUJSTJDX0NUUkxfRElSRUNUSU9OCQkJKDEgPDwgMTYpCisjZGVmaW5lCUkyQ19DVFJMX1hGRVJfQ09VTlRfTUFTSwkJMHhmZmZmCisjZGVmaW5lCUkyQ19DVFJMX1hGRVJfQ09VTlRfT0ZGU0VUCQkwCisKKyNkZWZpbmUJSTJDX1RJTUlORzBfSElHSF9DT1VOVF9NQVNLCQkoMHgzZmYgPDwgMTYpCisjZGVmaW5lCUkyQ19USU1JTkcwX0hJR0hfQ09VTlRfT0ZGU0VUCQkxNgorI2RlZmluZQlJMkNfVElNSU5HMF9SQ1ZfQ09VTlRfTUFTSwkJMHgzZmYKKyNkZWZpbmUJSTJDX1RJTUlORzBfUkNWX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCUkyQ19USU1JTkcxX0xPV19DT1VOVF9NQVNLCQkoMHgzZmYgPDwgMTYpCisjZGVmaW5lCUkyQ19USU1JTkcxX0xPV19DT1VOVF9PRkZTRVQJCTE2CisjZGVmaW5lCUkyQ19USU1JTkcxX1hNSVRfQ09VTlRfTUFTSwkJMHgzZmYKKyNkZWZpbmUJSTJDX1RJTUlORzFfWE1JVF9DT1VOVF9PRkZTRVQJCTAKKworI2RlZmluZQlJMkNfVElNSU5HMl9CVVNfRlJFRV9NQVNLCQkoMHgzZmYgPDwgMTYpCisjZGVmaW5lCUkyQ19USU1JTkcyX0JVU19GUkVFX09GRlNFVAkJMTYKKyNkZWZpbmUJSTJDX1RJTUlORzJfTEVBRElOX0NPVU5UX01BU0sJCTB4M2ZmCisjZGVmaW5lCUkyQ19USU1JTkcyX0xFQURJTl9DT1VOVF9PRkZTRVQJCTAKKworI2RlZmluZQlJMkNfQ1RSTDFfUkRfUVVFVUVfSVJRCQkJKDEgPDwgMzApCisjZGVmaW5lCUkyQ19DVFJMMV9XUl9RVUVVRV9JUlEJCQkoMSA8PCAyOSkKKyNkZWZpbmUJSTJDX0NUUkwxX0NMUl9HT1RfQV9OQUsJCQkoMSA8PCAyOCkKKyNkZWZpbmUJSTJDX0NUUkwxX0FDS19NT0RFCQkJKDEgPDwgMjcpCisjZGVmaW5lCUkyQ19DVFJMMV9GT1JDRV9EQVRBX0lETEUJCSgxIDw8IDI2KQorI2RlZmluZQlJMkNfQ1RSTDFfRk9SQ0VfQ0xLX0lETEUJCSgxIDw8IDI1KQorI2RlZmluZQlJMkNfQ1RSTDFfQkNBU1RfU0xBVkVfRU4JCSgxIDw8IDI0KQorI2RlZmluZQlJMkNfQ1RSTDFfU0xBVkVfQUREUkVTU19CWVRFX01BU0sJKDB4ZmYgPDwgMTYpCisjZGVmaW5lCUkyQ19DVFJMMV9TTEFWRV9BRERSRVNTX0JZVEVfT0ZGU0VUCTE2CisjZGVmaW5lCUkyQ19DVFJMMV9CVVNfRlJFRV9JUlFfRU4JCSgxIDw8IDE1KQorI2RlZmluZQlJMkNfQ1RSTDFfREFUQV9FTkdJTkVfQ01QTFRfSVJRX0VOCSgxIDw8IDE0KQorI2RlZmluZQlJMkNfQ1RSTDFfTk9fU0xBVkVfQUNLX0lSUV9FTgkJKDEgPDwgMTMpCisjZGVmaW5lCUkyQ19DVFJMMV9PVkVSU0laRV9YRkVSX1RFUk1fSVJRX0VOCSgxIDw8IDEyKQorI2RlZmluZQlJMkNfQ1RSTDFfRUFSTFlfVEVSTV9JUlFfRU4JCSgxIDw8IDExKQorI2RlZmluZQlJMkNfQ1RSTDFfTUFTVEVSX0xPU1NfSVJRX0VOCQkoMSA8PCAxMCkKKyNkZWZpbmUJSTJDX0NUUkwxX1NMQVZFX1NUT1BfSVJRX0VOCQkoMSA8PCA5KQorI2RlZmluZQlJMkNfQ1RSTDFfU0xBVkVfSVJRX0VOCQkJKDEgPDwgOCkKKyNkZWZpbmUJSTJDX0NUUkwxX0JVU19GUkVFX0lSUQkJCSgxIDw8IDcpCisjZGVmaW5lCUkyQ19DVFJMMV9EQVRBX0VOR0lORV9DTVBMVF9JUlEJCSgxIDw8IDYpCisjZGVmaW5lCUkyQ19DVFJMMV9OT19TTEFWRV9BQ0tfSVJRCQkoMSA8PCA1KQorI2RlZmluZQlJMkNfQ1RSTDFfT1ZFUlNJWkVfWEZFUl9URVJNX0lSUQkoMSA8PCA0KQorI2RlZmluZQlJMkNfQ1RSTDFfRUFSTFlfVEVSTV9JUlEJCSgxIDw8IDMpCisjZGVmaW5lCUkyQ19DVFJMMV9NQVNURVJfTE9TU19JUlEJCSgxIDw8IDIpCisjZGVmaW5lCUkyQ19DVFJMMV9TTEFWRV9TVE9QX0lSUQkJKDEgPDwgMSkKKyNkZWZpbmUJSTJDX0NUUkwxX1NMQVZFX0lSUQkJCSgxIDw8IDApCisKKyNkZWZpbmUJSTJDX1NUQVRfTUFTVEVSX1BSRVNFTlQJCQkoMSA8PCAzMSkKKyNkZWZpbmUJSTJDX1NUQVRfU0xBVkVfUFJFU0VOVAkJCSgxIDw8IDMwKQorI2RlZmluZQlJMkNfU1RBVF9BTllfRU5BQkxFRF9JUlEJCSgxIDw8IDI5KQorI2RlZmluZQlJMkNfU1RBVF9HT1RfQV9OQUsJCQkoMSA8PCAyOCkKKyNkZWZpbmUJSTJDX1NUQVRfUkNWRF9TTEFWRV9BRERSX01BU0sJCSgweGZmIDw8IDE2KQorI2RlZmluZQlJMkNfU1RBVF9SQ1ZEX1NMQVZFX0FERFJfT0ZGU0VUCQkxNgorI2RlZmluZQlJMkNfU1RBVF9TTEFWRV9BRERSX0VRX1pFUk8JCSgxIDw8IDE1KQorI2RlZmluZQlJMkNfU1RBVF9TTEFWRV9GT1VORAkJCSgxIDw8IDE0KQorI2RlZmluZQlJMkNfU1RBVF9TTEFWRV9TRUFSQ0hJTkcJCSgxIDw8IDEzKQorI2RlZmluZQlJMkNfU1RBVF9EQVRBX0VOR0lOR19ETUFfV0FJVAkJKDEgPDwgMTIpCisjZGVmaW5lCUkyQ19TVEFUX0JVU19CVVNZCQkJKDEgPDwgMTEpCisjZGVmaW5lCUkyQ19TVEFUX0NMS19HRU5fQlVTWQkJCSgxIDw8IDEwKQorI2RlZmluZQlJMkNfU1RBVF9EQVRBX0VOR0lORV9CVVNZCQkoMSA8PCA5KQorI2RlZmluZQlJMkNfU1RBVF9TTEFWRV9CVVNZCQkJKDEgPDwgOCkKKyNkZWZpbmUJSTJDX1NUQVRfQlVTX0ZSRUVfSVJRX1NVTU1BUlkJCSgxIDw8IDcpCisjZGVmaW5lCUkyQ19TVEFUX0RBVEFfRU5HSU5FX0NNUExUX0lSUV9TVU1NQVJZCSgxIDw8IDYpCisjZGVmaW5lCUkyQ19TVEFUX05PX1NMQVZFX0FDS19JUlFfU1VNTUFSWQkoMSA8PCA1KQorI2RlZmluZQlJMkNfU1RBVF9PVkVSU0laRV9YRkVSX1RFUk1fSVJRX1NVTU1BUlkJKDEgPDwgNCkKKyNkZWZpbmUJSTJDX1NUQVRfRUFSTFlfVEVSTV9JUlFfU1VNTUFSWQkJKDEgPDwgMykKKyNkZWZpbmUJSTJDX1NUQVRfTUFTVEVSX0xPU1NfSVJRX1NVTU1BUlkJKDEgPDwgMikKKyNkZWZpbmUJSTJDX1NUQVRfU0xBVkVfU1RPUF9JUlFfU1VNTUFSWQkJKDEgPDwgMSkKKyNkZWZpbmUJSTJDX1NUQVRfU0xBVkVfSVJRX1NVTU1BUlkJCSgxIDw8IDApCisKKyNkZWZpbmUJSTJDX1FVRVVFQ1RSTF9SRF9USFJFU0hfTUFTSwkJKDB4MWYgPDwgMTYpCisjZGVmaW5lCUkyQ19RVUVVRUNUUkxfUkRfVEhSRVNIX09GRlNFVAkJMTYKKyNkZWZpbmUJSTJDX1FVRVVFQ1RSTF9XUl9USFJFU0hfTUFTSwkJKDB4MWYgPDwgOCkKKyNkZWZpbmUJSTJDX1FVRVVFQ1RSTF9XUl9USFJFU0hfT0ZGU0VUCQk4CisjZGVmaW5lCUkyQ19RVUVVRUNUUkxfUVVFVUVfUlVOCQkJKDEgPDwgNSkKKyNkZWZpbmUJSTJDX1FVRVVFQ1RSTF9SRF9DTEVBUgkJCSgxIDw8IDQpCisjZGVmaW5lCUkyQ19RVUVVRUNUUkxfV1JfQ0xFQVIJCQkoMSA8PCAzKQorI2RlZmluZQlJMkNfUVVFVUVDVFJMX1BJT19RVUVVRV9NT0RFCQkoMSA8PCAyKQorI2RlZmluZQlJMkNfUVVFVUVDVFJMX1JEX1FVRVVFX0lSUV9FTgkJKDEgPDwgMSkKKyNkZWZpbmUJSTJDX1FVRVVFQ1RSTF9XUl9RVUVVRV9JUlFfRU4JCSgxIDw8IDApCisKKyNkZWZpbmUJSTJDX1FVRVVFU1RBVF9SRF9RVUVVRV9GVUxMCQkoMSA8PCAxNCkKKyNkZWZpbmUJSTJDX1FVRVVFU1RBVF9SRF9RVUVVRV9FTVBUWQkJKDEgPDwgMTMpCisjZGVmaW5lCUkyQ19RVUVVRVNUQVRfUkRfUVVFVUVfQ05UX01BU0sJCSgweDFmIDw8IDgpCisjZGVmaW5lCUkyQ19RVUVVRVNUQVRfUkRfUVVFVUVfQ05UX09GRlNFVAk4CisjZGVmaW5lCUkyQ19RVUVVRVNUQVRfV1JfUVVFVUVfRlVMTAkJKDEgPDwgNikKKyNkZWZpbmUJSTJDX1FVRVVFU1RBVF9XUl9RVUVVRV9FTVBUWQkJKDEgPDwgNSkKKyNkZWZpbmUJSTJDX1FVRVVFU1RBVF9XUl9RVUVVRV9DTlRfTUFTSwkJMHgxZgorI2RlZmluZQlJMkNfUVVFVUVTVEFUX1dSX1FVRVVFX0NOVF9PRkZTRVQJMAorCisjZGVmaW5lCUkyQ19RVUVVRUNNRF9QUkVBQ0sJCQkoMSA8PCAyNykKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX0FDS05PV0xFREdFCQkoMSA8PCAyNikKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX1NFTkRfTkFLX09OX0xBU1QJCSgxIDw8IDI1KQorI2RlZmluZQlJMkNfUVVFVUVDTURfTVVMVElfTUFTVEVSCQkoMSA8PCAyMykKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX0NMT0NLX0hFTEQJCQkoMSA8PCAyMikKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX1JFVEFJTl9DTE9DSwkJKDEgPDwgMjEpCisjZGVmaW5lCUkyQ19RVUVVRUNNRF9QT1NUX1NFTkRfU1RPUAkJKDEgPDwgMjApCisjZGVmaW5lCUkyQ19RVUVVRUNNRF9QUkVfU0VORF9TVEFSVAkJKDEgPDwgMTkpCisjZGVmaW5lCUkyQ19RVUVVRUNNRF9TTEFWRV9BRERSRVNTX0VOQUJMRQkoMSA8PCAxOCkKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX01BU1RFUl9NT0RFCQkoMSA8PCAxNykKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX0RJUkVDVElPTgkJCSgxIDw8IDE2KQorI2RlZmluZQlJMkNfUVVFVUVDTURfWEZFUl9DT1VOVF9NQVNLCQkweGZmZmYKKyNkZWZpbmUJSTJDX1FVRVVFQ01EX1hGRVJfQ09VTlRfT0ZGU0VUCQkwCisKKyNkZWZpbmUJSTJDX1FVRVVFREFUQV9EQVRBX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCUkyQ19RVUVVRURBVEFfREFUQV9PRkZTRVQJCTAKKworI2RlZmluZQlJMkNfREFUQV9EQVRBX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCUkyQ19EQVRBX0RBVEFfT0ZGU0VUCQkJMAorCisjZGVmaW5lCUkyQ19ERUJVRzBfRE1BUkVRCQkJKDEgPDwgMzEpCisjZGVmaW5lCUkyQ19ERUJVRzBfRE1BRU5EQ01ECQkJKDEgPDwgMzApCisjZGVmaW5lCUkyQ19ERUJVRzBfRE1BS0lDSwkJCSgxIDw8IDI5KQorI2RlZmluZQlJMkNfREVCVUcwX0RNQVRFUk1JTkFURQkJCSgxIDw8IDI4KQorI2RlZmluZQlJMkNfREVCVUcwX1NUQVRFX1ZBTFVFX01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCUkyQ19ERUJVRzBfU1RBVEVfVkFMVUVfT0ZGU0VUCQkyNgorI2RlZmluZQlJMkNfREVCVUcwX0RNQV9TVEFURV9NQVNLCQkoMHgzZmYgPDwgMTYpCisjZGVmaW5lCUkyQ19ERUJVRzBfRE1BX1NUQVRFX09GRlNFVAkJMTYKKyNkZWZpbmUJSTJDX0RFQlVHMF9TVEFSVF9UT0dHTEUJCQkoMSA8PCAxNSkKKyNkZWZpbmUJSTJDX0RFQlVHMF9TVE9QX1RPR0dMRQkJCSgxIDw8IDE0KQorI2RlZmluZQlJMkNfREVCVUcwX0dSQUJfVE9HR0xFCQkJKDEgPDwgMTMpCisjZGVmaW5lCUkyQ19ERUJVRzBfQ0hBTkdFX1RPR0dMRQkJKDEgPDwgMTIpCisjZGVmaW5lCUkyQ19ERUJVRzBfU1RBVEVfTEFUQ0gJCQkoMSA8PCAxMSkKKyNkZWZpbmUJSTJDX0RFQlVHMF9TTEFWRV9IT0xEX0NMSwkJKDEgPDwgMTApCisjZGVmaW5lCUkyQ19ERUJVRzBfU1RBVEVfU1RBVEVfTUFTSwkJMHgzZmYKKyNkZWZpbmUJSTJDX0RFQlVHMF9TVEFURV9TVEFURV9PRkZTRVQJCTAKKworI2RlZmluZQlJMkNfREVCVUcxX0kyQ19DTEtfSU4JCQkoMSA8PCAzMSkKKyNkZWZpbmUJSTJDX0RFQlVHMV9JMkNfREFUQV9JTgkJCSgxIDw8IDMwKQorI2RlZmluZQlJMkNfREVCVUcxX0RNQV9CWVRFX0VOQUJMRVNfTUFTSwkoMHhmIDw8IDI0KQorI2RlZmluZQlJMkNfREVCVUcxX0RNQV9CWVRFX0VOQUJMRVNfT0ZGU0VUCTI0CisjZGVmaW5lCUkyQ19ERUJVRzFfQ0xLX0dFTl9TVEFURV9NQVNLCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJSTJDX0RFQlVHMV9DTEtfR0VOX1NUQVRFX09GRlNFVAkJMTYKKyNkZWZpbmUJSTJDX0RFQlVHMV9MU1RfTU9ERV9NQVNLCQkoMHgzIDw8IDkpCisjZGVmaW5lCUkyQ19ERUJVRzFfTFNUX01PREVfT0ZGU0VUCQk5CisjZGVmaW5lCUkyQ19ERUJVRzFfTE9DQUxfU0xBVkVfVEVTVAkJKDEgPDwgOCkKKyNkZWZpbmUJSTJDX0RFQlVHMV9GT1JDRV9DTEtfT04JCQkoMSA8PCA0KQorI2RlZmluZQlJMkNfREVCVUcxX0ZPUkNFX0FCUl9MT1NTCQkoMSA8PCAzKQorI2RlZmluZQlJMkNfREVCVUcxX0ZPUkNFX1JDVl9BQ0sJCSgxIDw8IDIpCisjZGVmaW5lCUkyQ19ERUJVRzFfRk9SQ0VfSTJDX0RBVEFfT0UJCSgxIDw8IDEpCisjZGVmaW5lCUkyQ19ERUJVRzFfRk9SQ0VfSTJDX0NMS19PRQkJKDEgPDwgMCkKKworI2RlZmluZQlJMkNfVkVSU0lPTl9NQUpPUl9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCUkyQ19WRVJTSU9OX01BSk9SX09GRlNFVAkJMjQKKyNkZWZpbmUJSTJDX1ZFUlNJT05fTUlOT1JfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlJMkNfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCTE2CisjZGVmaW5lCUkyQ19WRVJTSU9OX1NURVBfTUFTSwkJCTB4ZmZmZgorI2RlZmluZQlJMkNfVkVSU0lPTl9TVEVQX09GRlNFVAkJCTAKKworI2VuZGlmCS8qIF9fTVgyOF9SRUdTX0kyQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLW9jb3RwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1vY290cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmZkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1vY290cC5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBPQ09UUCBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIEJhc2VkIG9uIGNvZGUgZnJvbSBMVElCOgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTVgyOF9SRUdTX09DT1RQX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19PQ09UUF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisKKyNpZm5kZWYJX19BU1NFTUJMWV9fCitzdHJ1Y3QgbXgyOF9vY290cF9yZWdzIHsKKwlteDI4X3JlZyhod19vY290cF9jdHJsKQkJLyogMHgwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfZGF0YSkJCS8qIDB4MTAgKi8KKwlteDI4X3JlZyhod19vY290cF9jdXN0MCkJLyogMHgyMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2N1c3QxKQkvKiAweDMwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfY3VzdDIpCS8qIDB4NDAgKi8KKwlteDI4X3JlZyhod19vY290cF9jdXN0MykJLyogMHg1MCAqLworCW14MjhfcmVnKGh3X29jb3RwX2NyeXB0bzApCS8qIDB4NjAgKi8KKwlteDI4X3JlZyhod19vY290cF9jcnlwdG8xKQkvKiAweDcwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfY3J5cHRvMikJLyogMHg4MCAqLworCW14MjhfcmVnKGh3X29jb3RwX2NyeXB0bzMpCS8qIDB4OTAgKi8KKwlteDI4X3JlZyhod19vY290cF9od2NhcDApCS8qIDB4YTAgKi8KKwlteDI4X3JlZyhod19vY290cF9od2NhcDEpCS8qIDB4YjAgKi8KKwlteDI4X3JlZyhod19vY290cF9od2NhcDIpCS8qIDB4YzAgKi8KKwlteDI4X3JlZyhod19vY290cF9od2NhcDMpCS8qIDB4ZDAgKi8KKwlteDI4X3JlZyhod19vY290cF9od2NhcDQpCS8qIDB4ZTAgKi8KKwlteDI4X3JlZyhod19vY290cF9od2NhcDUpCS8qIDB4ZjAgKi8KKwlteDI4X3JlZyhod19vY290cF9zd2NhcCkJLyogMHgxMDAgKi8KKwlteDI4X3JlZyhod19vY290cF9jdXN0Y2FwKQkvKiAweDExMCAqLworCW14MjhfcmVnKGh3X29jb3RwX2xvY2spCQkvKiAweDEyMCAqLworCW14MjhfcmVnKGh3X29jb3RwX29wczApCQkvKiAweDEzMCAqLworCW14MjhfcmVnKGh3X29jb3RwX29wczEpCQkvKiAweDE0MCAqLworCW14MjhfcmVnKGh3X29jb3RwX29wczIpCQkvKiAweDE1MCAqLworCW14MjhfcmVnKGh3X29jb3RwX29wczMpCQkvKiAweDE2MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3VuMCkJCS8qIDB4MTcwICovCisJbXgyOF9yZWcoaHdfb2NvdHBfdW4xKQkJLyogMHgxODAgKi8KKwlteDI4X3JlZyhod19vY290cF91bjIpCQkvKiAweDE5MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3JvbTApCQkvKiAweDFhMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3JvbTEpCQkvKiAweDFiMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3JvbTIpCQkvKiAweDFjMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3JvbTMpCQkvKiAweDFkMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3JvbTQpCQkvKiAweDFlMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3JvbTUpCQkvKiAweDFmMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3JvbTYpCQkvKiAweDIwMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3JvbTcpCQkvKiAweDIxMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3NyazApCQkvKiAweDIyMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3NyazEpCQkvKiAweDIzMCAqLworCW14MjhfcmVnKGh3X29jb3RwX3NyazIpCQkvKiAweDI0MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3NyazMpCQkvKiAweDI1MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3NyazQpCQkvKiAweDI2MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3NyazUpCQkvKiAweDI3MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3NyazYpCQkvKiAweDI4MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3NyazcpCQkvKiAweDI5MCAqLworCW14MjhfcmVnKGh3X29jb3RwX3ZlcnNpb24pCS8qIDB4MmEwICovCit9OworI2VuZGlmCisKKyNkZWZpbmUJT0NPVFBfQ1RSTF9XUl9VTkxPQ0tfTUFTSwkJKDB4ZmZmZiA8PCAxNikKKyNkZWZpbmUJT0NPVFBfQ1RSTF9XUl9VTkxPQ0tfT0ZGU0VUCQkxNgorI2RlZmluZQlPQ09UUF9DVFJMX1dSX1VOTE9DS19LRVkJCSgweDNlNzcgPDwgMTYpCisjZGVmaW5lCU9DT1RQX0NUUkxfUkVMT0FEX1NIQURPV1MJCSgxIDw8IDEzKQorI2RlZmluZQlPQ09UUF9DVFJMX1JEX0JBTktfT1BFTgkJCSgxIDw8IDEyKQorI2RlZmluZQlPQ09UUF9DVFJMX0VSUk9SCQkJKDEgPDwgOSkKKyNkZWZpbmUJT0NPVFBfQ1RSTF9CVVNZCQkJCSgxIDw8IDgpCisjZGVmaW5lCU9DT1RQX0NUUkxfQUREUl9NQVNLCQkJMHgzZgorI2RlZmluZQlPQ09UUF9DVFJMX0FERFJfT0ZGU0VUCQkJMAorCisjZGVmaW5lCU9DT1RQX0RBVEFfREFUQV9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlPQ09UUF9EQVRBX0RBVEFfT0ZGU0VUCQkJMAorCisjZGVmaW5lCU9DT1RQX0NVU1RfQklUU19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlPQ09UUF9DVVNUX0JJVFNfT0ZGU0VUCQkJMAorCisjZGVmaW5lCU9DT1RQX0NSWVBUT19CSVRTX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCU9DT1RQX0NSWVBUT19CSVRTX09GRlNFVAkJMAorCisjZGVmaW5lCU9DT1RQX0hXQ0FQX0JJVFNfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJT0NPVFBfSFdDQVBfQklUU19PRkZTRVQJCQkwCisKKyNkZWZpbmUJT0NPVFBfU1dDQVBfQklUU19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlPQ09UUF9TV0NBUF9CSVRTX09GRlNFVAkJCTAKKworI2RlZmluZQlPQ09UUF9DVVNUQ0FQX1JUQ19YVEFMXzMyNzY4X1BSRVNFTlQJKDEgPDwgMikKKyNkZWZpbmUJT0NPVFBfQ1VTVENBUF9SVENfWFRBTF8zMjAwMF9QUkVTRU5UCSgxIDw8IDEpCisKKyNkZWZpbmUJT0NPVFBfTE9DS19ST003CQkJCSgxIDw8IDMxKQorI2RlZmluZQlPQ09UUF9MT0NLX1JPTTYJCQkJKDEgPDwgMzApCisjZGVmaW5lCU9DT1RQX0xPQ0tfUk9NNQkJCQkoMSA8PCAyOSkKKyNkZWZpbmUJT0NPVFBfTE9DS19ST000CQkJCSgxIDw8IDI4KQorI2RlZmluZQlPQ09UUF9MT0NLX1JPTTMJCQkJKDEgPDwgMjcpCisjZGVmaW5lCU9DT1RQX0xPQ0tfUk9NMgkJCQkoMSA8PCAyNikKKyNkZWZpbmUJT0NPVFBfTE9DS19ST00xCQkJCSgxIDw8IDI1KQorI2RlZmluZQlPQ09UUF9MT0NLX1JPTTAJCQkJKDEgPDwgMjQpCisjZGVmaW5lCU9DT1RQX0xPQ0tfSFdTV19TSEFET1dfQUxUCQkoMSA8PCAyMykKKyNkZWZpbmUJT0NPVFBfTE9DS19DUllQVE9EQ1BfQUxUCQkoMSA8PCAyMikKKyNkZWZpbmUJT0NPVFBfTE9DS19DUllQVE9LRVlfQUxUCQkoMSA8PCAyMSkKKyNkZWZpbmUJT0NPVFBfTE9DS19QSU4JCQkJKDEgPDwgMjApCisjZGVmaW5lCU9DT1RQX0xPQ0tfT1BTCQkJCSgxIDw8IDE5KQorI2RlZmluZQlPQ09UUF9MT0NLX1VOMgkJCQkoMSA8PCAxOCkKKyNkZWZpbmUJT0NPVFBfTE9DS19VTjEJCQkJKDEgPDwgMTcpCisjZGVmaW5lCU9DT1RQX0xPQ0tfVU4wCQkJCSgxIDw8IDE2KQorI2RlZmluZQlPQ09UUF9MT0NLX1NSSwkJCQkoMSA8PCAxNSkKKyNkZWZpbmUJT0NPVFBfTE9DS19VTkFMTE9DQVRFRF9NQVNLCQkoMHg3IDw8IDEyKQorI2RlZmluZQlPQ09UUF9MT0NLX1VOQUxMT0NBVEVEX09GRlNFVAkJMTIKKyNkZWZpbmUJT0NPVFBfTE9DS19TUktfU0hBRE9XCQkJKDEgPDwgMTEpCisjZGVmaW5lCU9DT1RQX0xPQ0tfUk9NX1NIQURPVwkJCSgxIDw8IDEwKQorI2RlZmluZQlPQ09UUF9MT0NLX0NVU1RDQVAJCQkoMSA8PCA5KQorI2RlZmluZQlPQ09UUF9MT0NLX0hXU1cJCQkJKDEgPDwgOCkKKyNkZWZpbmUJT0NPVFBfTE9DS19DVVNUQ0FQX1NIQURPVwkJKDEgPDwgNykKKyNkZWZpbmUJT0NPVFBfTE9DS19IV1NXX1NIQURPVwkJCSgxIDw8IDYpCisjZGVmaW5lCU9DT1RQX0xPQ0tfQ1JZUFRPRENQCQkJKDEgPDwgNSkKKyNkZWZpbmUJT0NPVFBfTE9DS19DUllQVE9LRVkJCQkoMSA8PCA0KQorI2RlZmluZQlPQ09UUF9MT0NLX0NVU1QzCQkJKDEgPDwgMykKKyNkZWZpbmUJT0NPVFBfTE9DS19DVVNUMgkJCSgxIDw8IDIpCisjZGVmaW5lCU9DT1RQX0xPQ0tfQ1VTVDEJCQkoMSA8PCAxKQorI2RlZmluZQlPQ09UUF9MT0NLX0NVU1QwCQkJKDEgPDwgMCkKKworI2RlZmluZQlPQ09UUF9PUFNfQklUU19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlPQ09UUF9PUFNfQklUU19PRkZTRVQJCQkwCisKKyNkZWZpbmUJT0NPVFBfVU5fQklUU19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlPQ09UUF9VTl9CSVRTX09GRlNFVAkJCTAKKworI2RlZmluZQlPQ09UUF9ST01fQk9PVF9NT0RFX01BU0sJCSgweGZmIDw8IDI0KQorI2RlZmluZQlPQ09UUF9ST01fQk9PVF9NT0RFX09GRlNFVAkJMjQKKyNkZWZpbmUJT0NPVFBfUk9NX1NEX01NQ19NT0RFX01BU0sJCSgweDMgPDwgMjIpCisjZGVmaW5lCU9DT1RQX1JPTV9TRF9NTUNfTU9ERV9PRkZTRVQJCTIyCisjZGVmaW5lCU9DT1RQX1JPTV9TRF9QT1dFUl9HQVRFX0dQSU9fTUFTSwkoMHgzIDw8IDIwKQorI2RlZmluZQlPQ09UUF9ST01fU0RfUE9XRVJfR0FURV9HUElPX09GRlNFVAkyMAorI2RlZmluZQlPQ09UUF9ST01fU0RfUE9XRVJfVVBfREVMQVlfTUFTSwkoMHgzZiA8PCAxNCkKKyNkZWZpbmUJT0NPVFBfUk9NX1NEX1BPV0VSX1VQX0RFTEFZX09GRlNFVAkxNAorI2RlZmluZQlPQ09UUF9ST01fU0RfQlVTX1dJRFRIX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCU9DT1RQX1JPTV9TRF9CVVNfV0lEVEhfT0ZGU0VUCQkxMgorI2RlZmluZQlPQ09UUF9ST01fU1NQX1NDS19JTkRFWF9NQVNLCQkoMHhmIDw8IDgpCisjZGVmaW5lCU9DT1RQX1JPTV9TU1BfU0NLX0lOREVYX09GRlNFVAkJOAorI2RlZmluZQlPQ09UUF9ST01fRU1NQ19VU0VfRERSCQkJKDEgPDwgNykKKyNkZWZpbmUJT0NPVFBfUk9NX0RJU0FCTEVfU1BJX05PUl9GQVNUX1JFQUQJKDEgPDwgNikKKyNkZWZpbmUJT0NPVFBfUk9NX0VOQUJMRV9VU0JfQk9PVF9TRVJJQUxfTlVNCSgxIDw8IDUpCisjZGVmaW5lCU9DT1RQX1JPTV9FTkFCTEVfVU5FTkNSWVBURURfQk9PVAkoMSA8PCA0KQorI2RlZmluZQlPQ09UUF9ST01fU0RfTUJSX0JPT1QJCQkoMSA8PCAzKQorCisjZGVmaW5lCU9DT1RQX1NSS19CSVRTX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCU9DT1RQX1NSS19CSVRTX09GRlNFVAkJCTAKKworI2RlZmluZQlPQ09UUF9WRVJTSU9OX01BSk9SX01BU0sJCSgweGZmIDw8IDI0KQorI2RlZmluZQlPQ09UUF9WRVJTSU9OX01BSk9SX09GRlNFVAkJMjQKKyNkZWZpbmUJT0NPVFBfVkVSU0lPTl9NSU5PUl9NQVNLCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJT0NPVFBfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCTE2CisjZGVmaW5lCU9DT1RQX1ZFUlNJT05fU1RFUF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCU9DT1RQX1ZFUlNJT05fU1RFUF9PRkZTRVQJCTAKKworI2VuZGlmIC8qIF9fTVgyOF9SRUdTX09DT1RQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtcGluY3RybC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtcGluY3RybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzM5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1waW5jdHJsLmgKQEAgLTAsMCArMSwxMjg0IEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBQSU5DVFJMIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfUElOQ1RSTF9IX18KKyNkZWZpbmUgX19NWDI4X1JFR1NfUElOQ1RSTF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisKKyNpZm5kZWYJX19BU1NFTUJMWV9fCitzdHJ1Y3QgbXgyOF9waW5jdHJsX3JlZ3MgeworCW14MjhfcmVnKGh3X3BpbmN0cmxfY3RybCkJCS8qIDB4MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQxWzYwXTsKKworCW14MjhfcmVnKGh3X3BpbmN0cmxfbXV4c2VsMCkJCS8qIDB4MTAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWwxKQkJLyogMHgxMTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDIpCQkvKiAweDEyMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfbXV4c2VsMykJCS8qIDB4MTMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWw0KQkJLyogMHgxNDAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDUpCQkvKiAweDE1MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfbXV4c2VsNikJCS8qIDB4MTYwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWw3KQkJLyogMHgxNzAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX211eHNlbDgpCQkvKiAweDE4MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfbXV4c2VsOSkJCS8qIDB4MTkwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWwxMCkJCS8qIDB4MWEwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWwxMSkJCS8qIDB4MWIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWwxMikJCS8qIDB4MWMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9tdXhzZWwxMykJCS8qIDB4MWQwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZDJbNzJdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTApCQkvKiAweDMwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUxKQkJLyogMHgzMTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMikJCS8qIDB4MzIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTMpCQkvKiAweDMzMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmU0KQkJLyogMHgzNDAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlNSkJCS8qIDB4MzUwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTYpCQkvKiAweDM2MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmU3KQkJLyogMHgzNzAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlOCkJCS8qIDB4MzgwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTkpCQkvKiAweDM5MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUxMCkJCS8qIDB4M2EwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTExKQkJLyogMHgzYjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMTIpCQkvKiAweDNjMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUxMykJCS8qIDB4M2QwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTE0KQkJLyogMHgzZTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMTUpCQkvKiAweDNmMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUxNikJCS8qIDB4NDAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kcml2ZTE3KQkJLyogMHg0MTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RyaXZlMTgpCQkvKiAweDQyMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZHJpdmUxOSkJCS8qIDB4NDMwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZDNbMTEyXTsKKworCW14MjhfcmVnKGh3X3BpbmN0cmxfcHVsbDApCQkvKiAweDYwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcHVsbDEpCQkvKiAweDYxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcHVsbDIpCQkvKiAweDYyMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcHVsbDMpCQkvKiAweDYzMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcHVsbDQpCQkvKiAweDY0MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcHVsbDUpCQkvKiAweDY1MCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcHVsbDYpCQkvKiAweDY2MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQ0WzM2XTsKKworCW14MjhfcmVnKGh3X3BpbmN0cmxfZG91dDApCQkvKiAweDcwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZG91dDEpCQkvKiAweDcxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZG91dDIpCQkvKiAweDcyMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZG91dDMpCQkvKiAweDczMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZG91dDQpCQkvKiAweDc0MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQ1WzEwOF07CisKKwlteDI4X3JlZyhod19waW5jdHJsX2RpbjApCQkvKiAweDkwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZGluMSkJCS8qIDB4OTEwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kaW4yKQkJLyogMHg5MjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RpbjMpCQkvKiAweDkzMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZGluNCkJCS8qIDB4OTQwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZDZbMTA4XTsKKworCW14MjhfcmVnKGh3X3BpbmN0cmxfZG9lMCkJCS8qIDB4YjAwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb2UxKQkJLyogMHhiMTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2RvZTIpCQkvKiAweGIyMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfZG9lMykJCS8qIDB4YjMwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9kb2U0KQkJLyogMHhiNDAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkN1szMDBdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9waW4yaXJxMCkJCS8qIDB4MTAwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcGluMmlycTEpCQkvKiAweDEwMTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX3BpbjJpcnEyKQkJLyogMHgxMDIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9waW4yaXJxMykJCS8qIDB4MTAzMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfcGluMmlycTQpCQkvKiAweDEwNDAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkOFs0NF07CisKKwlteDI4X3JlZyhod19waW5jdHJsX2lycWVuMCkJCS8qIDB4MTEwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxZW4xKQkJLyogMHgxMTEwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFlbjIpCQkvKiAweDExMjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycWVuMykJCS8qIDB4MTEzMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxZW40KQkJLyogMHgxMTQwICovCisKKwl1aW50MzJfdAlyZXNlcnZlZDlbNDRdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFsZXZlbDApCQkvKiAweDEyMDAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycWxldmVsMSkJCS8qIDB4MTIxMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxbGV2ZWwyKQkJLyogMHgxMjIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFsZXZlbDMpCQkvKiAweDEyMzAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycWxldmVsNCkJCS8qIDB4MTI0MCAqLworCisJdWludDMyX3QJcmVzZXJ2ZWQxMFs0NF07CisKKwlteDI4X3JlZyhod19waW5jdHJsX2lycXBvbDApCQkvKiAweDEzMDAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycXBvbDEpCQkvKiAweDEzMTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycXBvbDIpCQkvKiAweDEzMjAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycXBvbDMpCQkvKiAweDEzMzAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycXBvbDQpCQkvKiAweDEzNDAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkMTFbNDRdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFzdGF0MCkJCS8qIDB4MTQwMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxc3RhdDEpCQkvKiAweDE0MTAgKi8KKwlteDI4X3JlZyhod19waW5jdHJsX2lycXN0YXQyKQkJLyogMHgxNDIwICovCisJbXgyOF9yZWcoaHdfcGluY3RybF9pcnFzdGF0MykJCS8qIDB4MTQzMCAqLworCW14MjhfcmVnKGh3X3BpbmN0cmxfaXJxc3RhdDQpCQkvKiAweDE0NDAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkMTJbMzgwXTsKKworCW14MjhfcmVnKGh3X3BpbmN0cmxfZW1pX29kdF9jdHJsKQkvKiAweDFhNDAgKi8KKworCXVpbnQzMl90CXJlc2VydmVkMTNbNzZdOworCisJbXgyOF9yZWcoaHdfcGluY3RybF9lbWlfZHNfY3RybCkJLyogMHgxYjgwICovCit9OworI2VuZGlmCisKKyNkZWZpbmUJUElOQ1RSTF9DVFJMX1NGVFJTVAkJCQkoMSA8PCAzMSkKKyNkZWZpbmUJUElOQ1RSTF9DVFJMX0NMS0dBVEUJCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfQ1RSTF9QUkVTRU5UNAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9DVFJMX1BSRVNFTlQzCQkJCSgxIDw8IDIzKQorI2RlZmluZQlQSU5DVFJMX0NUUkxfUFJFU0VOVDIJCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfQ1RSTF9QUkVTRU5UMQkJCQkoMSA8PCAyMSkKKyNkZWZpbmUJUElOQ1RSTF9DVFJMX1BSRVNFTlQwCQkJCSgxIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0NUUkxfSVJRT1VUNAkJCQkoMSA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0NUUkxfSVJRT1VUMwkJCQkoMSA8PCAzKQorI2RlZmluZQlQSU5DVFJMX0NUUkxfSVJRT1VUMgkJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0NUUkxfSVJRT1VUMQkJCQkoMSA8PCAxKQorI2RlZmluZQlQSU5DVFJMX0NUUkxfSVJRT1VUMAkJCQkoMSA8PCAwKQorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wN19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDdfT0ZGU0VUCQkxNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDZfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjA2X09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjA1X01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wNV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wNF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wNF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjAzX01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjAzX09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDJfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDBfQkFOSzBfUElOMDJfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wMV9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMF9CQU5LMF9QSU4wMV9PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjAwX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwwX0JBTkswX1BJTjAwX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yOF9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjhfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjdfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjI3X09GRlNFVAkJMjIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjI2X01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yNl9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yNV9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjVfT0ZGU0VUCQkxOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjRfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjI0X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjIzX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yM19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4yMl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjJfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMjFfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjIxX09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjIwX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjIwX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMTlfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMTlfT0ZGU0VUCQk2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4xOF9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMV9CQU5LMF9QSU4xOF9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjE3X01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxX0JBTkswX1BJTjE3X09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMTZfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDFfQkFOSzBfUElOMTZfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjE1X01BU0sJCSgweDMgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4xNV9PRkZTRVQJCTMwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4xNF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMTRfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMTNfTUFTSwkJKDB4MyA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjEzX09GRlNFVAkJMjYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjEyX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4xMl9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4xMV9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMTFfT0ZGU0VUCQkyMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMTBfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjEwX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjA5X01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wOV9PRkZTRVQJCTE4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wOF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDhfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDdfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjA3X09GRlNFVAkJMTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjA2X01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wNl9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wNV9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDVfT0ZGU0VUCQkxMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDRfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDRfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wM19NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wM19PRkZTRVQJCTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjAyX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwyX0JBTksxX1BJTjAyX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDFfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDJfQkFOSzFfUElOMDFfT0ZGU0VUCQkyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wMF9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMl9CQU5LMV9QSU4wMF9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMzFfTUFTSwkJKDB4MyA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjMxX09GRlNFVAkJMzAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjMwX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4zMF9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yOV9NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjlfT0ZGU0VUCQkyNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjhfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjI4X09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjI3X01BU0sJCSgweDMgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yN19PRkZTRVQJCTIyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yNl9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjZfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjVfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjI1X09GRlNFVAkJMTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjI0X01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yNF9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yM19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjNfT0ZGU0VUCQkxNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMjJfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjIyX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjIxX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yMV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yMF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4yMF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjE5X01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjE5X09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMThfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDNfQkFOSzFfUElOMThfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4xN19NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMM19CQU5LMV9QSU4xN19PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjE2X01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwzX0JBTksxX1BJTjE2X09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4xNV9NQVNLCQkoMHgzIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMTVfT0ZGU0VUCQkzMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMTRfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjE0X09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjEzX01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4xM19PRkZTRVQJCTI2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4xMl9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMTJfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMTBfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjEwX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjA5X01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wOV9PRkZTRVQJCTE4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wOF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDhfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDdfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjA3X09GRlNFVAkJMTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjA2X01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wNl9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wNV9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDVfT0ZGU0VUCQkxMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDRfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDRfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wM19NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wM19PRkZTRVQJCTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjAyX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw0X0JBTksyX1BJTjAyX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDFfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDRfQkFOSzJfUElOMDFfT0ZGU0VUCQkyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wMF9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNF9CQU5LMl9QSU4wMF9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMjdfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjI3X09GRlNFVAkJMjIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjI2X01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4yNl9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4yNV9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMjVfT0ZGU0VUCQkxOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMjRfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjI0X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjIxX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4yMV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4yMF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4yMF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjE5X01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjE5X09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMThfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDVfQkFOSzJfUElOMThfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4xN19NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNV9CQU5LMl9QSU4xN19PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjE2X01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw1X0JBTksyX1BJTjE2X09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4xNV9NQVNLCQkoMHgzIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMTVfT0ZGU0VUCQkzMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMTRfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjE0X09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjEzX01BU0sJCSgweDMgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4xM19PRkZTRVQJCTI2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4xMl9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMTJfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMTFfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjExX09GRlNFVAkJMjIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjEwX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4xMF9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wOV9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDlfT0ZGU0VUCQkxOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDhfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjA4X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjA3X01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wN19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wNl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDZfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDVfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjA1X09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjA0X01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjA0X09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDNfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDNfT0ZGU0VUCQk2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wMl9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMNl9CQU5LM19QSU4wMl9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjAxX01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw2X0JBTkszX1BJTjAxX09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDBfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDZfQkFOSzNfUElOMDBfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjMwX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4zMF9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yOV9NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjlfT0ZGU0VUCQkyNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjhfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjI4X09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjI3X01BU0sJCSgweDMgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yN19PRkZTRVQJCTIyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yNl9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjZfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjVfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjI1X09GRlNFVAkJMTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjI0X01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yNF9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yM19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjNfT0ZGU0VUCQkxNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMjJfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjIyX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjIxX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yMV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yMF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4yMF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjE4X01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw3X0JBTkszX1BJTjE4X09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMTdfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDdfQkFOSzNfUElOMTdfT0ZGU0VUCQkyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4xNl9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMN19CQU5LM19QSU4xNl9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMTVfTUFTSwkJKDB4MyA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjE1X09GRlNFVAkJMzAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjE0X01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4xNF9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4xM19NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMTNfT0ZGU0VUCQkyNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMTJfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjEyX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjExX01BU0sJCSgweDMgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4xMV9PRkZTRVQJCTIyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4xMF9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMTBfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDlfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA5X09GRlNFVAkJMTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA4X01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wOF9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wN19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDdfT0ZGU0VUCQkxNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDZfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA2X09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjA1X01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wNV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wNF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wNF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjAzX01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjAzX09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDJfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDhfQkFOSzRfUElOMDJfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wMV9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOF9CQU5LNF9QSU4wMV9PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjAwX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw4X0JBTks0X1BJTjAwX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOV9CQU5LNF9QSU4yMF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMOV9CQU5LNF9QSU4yMF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw5X0JBTks0X1BJTjE2X01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUw5X0JBTks0X1BJTjE2X09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMTVfTUFTSwkJKDB4MyA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xNV9PRkZTRVQJCTMwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMTRfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xNF9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMTNfTUFTSwkJKDB4MyA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xM19PRkZTRVQJCTI2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMTJfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xMl9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMTFfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xMV9PRkZTRVQJCTIyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMTBfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4xMF9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDlfTUFTSwkJKDB4MyA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wOV9PRkZTRVQJCTE4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDhfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wOF9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDdfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wN19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDZfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wNl9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDVfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wNV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDRfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjA0X09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjAzX01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wM19PRkZTRVQJCTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wMl9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDJfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTBfQkFOSzVfUElOMDFfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjAxX09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEwX0JBTks1X1BJTjAwX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMF9CQU5LNV9QSU4wMF9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjI2X01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjZfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjIzX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjNfT0ZGU0VUCQkxNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjIyX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjJfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjIxX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMjFfT0ZGU0VUCQkxMAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjIwX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4yMF9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4xOV9NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMTlfT0ZGU0VUCQk2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMThfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjE4X09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDExX0JBTks1X1BJTjE3X01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4xN19PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMV9CQU5LNV9QSU4xNl9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTFfQkFOSzVfUElOMTZfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4xNF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjE0X09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4xM19NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjEzX09GRlNFVAkJMjYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4xMl9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjEyX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4xMV9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjExX09GRlNFVAkJMjIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4xMF9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjEwX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wOV9NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA5X09GRlNFVAkJMTgKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wOF9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA4X09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wN19NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA3X09GRlNFVAkJMTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wNl9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA2X09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wNV9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjA1X09GRlNFVAkJMTAKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wNF9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDRfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDNfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjAzX09GRlNFVAkJNgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjAyX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wMl9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxMl9CQU5LNl9QSU4wMV9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDFfT0ZGU0VUCQkyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTJfQkFOSzZfUElOMDBfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEyX0JBTks2X1BJTjAwX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMjRfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yNF9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMjNfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yM19PRkZTRVQJCTE0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMjJfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yMl9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMjFfTUFTSwkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4yMV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMjBfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjIwX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjE5X01BU0sJCSgweDMgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4xOV9PRkZTRVQJCTYKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4xOF9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMThfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfTVVYU0VMMTNfQkFOSzZfUElOMTdfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjE3X09GRlNFVAkJMgorI2RlZmluZQlQSU5DVFJMX01VWFNFTDEzX0JBTks2X1BJTjE2X01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9NVVhTRUwxM19CQU5LNl9QSU4xNl9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wN19WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA3X01BX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA3X01BX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDZfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wNl9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wNl9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA1X1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDVfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDVfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wNF9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA0X01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjA0X01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDNfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wM19NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wM19NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjAyX1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDJfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wMl9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDFfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjAxX01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTBfQkFOSzBfUElOMDFfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjAwX1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMF9CQU5LMF9QSU4wMF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUwX0JBTkswX1BJTjAwX01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjIzX1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjNfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjNfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4yMl9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjIyX01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjIyX01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjFfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4yMV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4yMV9NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjIwX1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjBfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMjBfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4xOV9WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjE5X01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjE5X01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMThfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4xOF9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjE4X01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4xN19WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMTdfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMl9CQU5LMF9QSU4xN19NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMTZfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUyX0JBTkswX1BJTjE2X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTJfQkFOSzBfUElOMTZfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjhfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yOF9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yOF9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI3X1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjdfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjdfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yNl9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI2X01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjZfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI1X1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yNV9NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUzX0JBTkswX1BJTjI1X01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yNF9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTNfQkFOSzBfUElOMjRfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFM19CQU5LMF9QSU4yNF9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wN19WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA3X01BX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA3X01BX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDZfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wNl9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wNl9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA1X1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDVfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDVfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wNF9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA0X01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjA0X01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDNfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wM19NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wM19NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjAyX1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDJfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wMl9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDFfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjAxX01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTRfQkFOSzFfUElOMDFfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjAwX1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNF9CQU5LMV9QSU4wMF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU0X0JBTksxX1BJTjAwX01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjE1X1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTVfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTVfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xNF9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjE0X01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjE0X01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTNfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xM19NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xM19NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjEyX1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTJfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTJfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xMV9WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjExX01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjExX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMTBfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4xMF9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjEwX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4wOV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMDlfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNV9CQU5LMV9QSU4wOV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMDhfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU1X0JBTksxX1BJTjA4X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTVfQkFOSzFfUElOMDhfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMjNfVgkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yM19NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yM19NQV9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjIyX1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMjJfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMjJfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yMV9WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjIxX01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjIxX01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMjBfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yMF9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4yMF9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjE5X1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMTlfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMTlfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4xOF9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjE4X01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMThfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjE3X1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4xN19NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU2X0JBTksxX1BJTjE3X01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4xNl9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTZfQkFOSzFfUElOMTZfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFNl9CQU5LMV9QSU4xNl9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4zMV9WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjMxX01BX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjMxX01BX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMzBfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4zMF9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4zMF9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI5X1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjlfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjlfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yOF9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI4X01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI4X01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjdfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yN19NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yN19NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI2X1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjZfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yNl9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjVfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI1X01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTdfQkFOSzFfUElOMjVfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI0X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFN19CQU5LMV9QSU4yNF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU3X0JBTksxX1BJTjI0X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjA3X1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDdfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDdfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wNl9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjA2X01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjA2X01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDVfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wNV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wNV9NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjA0X1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDRfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDRfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wM19WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjAzX01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjAzX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDJfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wMl9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjAyX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wMV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDFfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOF9CQU5LMl9QSU4wMV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDBfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU4X0JBTksyX1BJTjAwX01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRThfQkFOSzJfUElOMDBfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTVfVgkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xNV9NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xNV9NQV9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjE0X1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTRfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTRfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xM19WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjEzX01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjEzX01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTJfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xMl9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xMl9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjEwX1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMTBfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4xMF9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMDlfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjA5X01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTlfQkFOSzJfUElOMDlfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjA4X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFOV9CQU5LMl9QSU4wOF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkU5X0JBTksyX1BJTjA4X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4yMV9WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4yMV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMjFfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMjBfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMjBfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjIwX01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE5X1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE5X01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4xOV9NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4xOF9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4xOF9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4xOF9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE3X1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMTdfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTBfQkFOSzJfUElOMTdfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMF9CQU5LMl9QSU4xNl9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE2X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEwX0JBTksyX1BJTjE2X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yN19WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yN19NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTFfQkFOSzJfUElOMjdfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTFfQkFOSzJfUElOMjZfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTFfQkFOSzJfUElOMjZfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTFfQkFOSzJfUElOMjZfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yNV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTExX0JBTksyX1BJTjI1X01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTExX0JBTksyX1BJTjI1X01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTFfQkFOSzJfUElOMjRfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yNF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMV9CQU5LMl9QSU4yNF9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDdfVgkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDdfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjA3X01BX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjA2X1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjA2X01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wNl9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wNV9WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wNV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDVfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDRfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDRfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjA0X01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAzX1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAzX01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wM19NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wMl9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wMl9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wMl9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAxX1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDFfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTJfQkFOSzNfUElOMDFfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxMl9CQU5LM19QSU4wMF9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAwX01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEyX0JBTkszX1BJTjAwX01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xNV9WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xNV9NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTVfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTRfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTRfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjE0X01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjEzX1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjEzX01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xM19NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xMl9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4xMl9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTJfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTFfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMTFfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjExX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjEwX1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjEwX01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjEwX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMDlfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4wOV9NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxM19CQU5LM19QSU4wOV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTEzX0JBTkszX1BJTjA4X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMDhfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTNfQkFOSzNfUElOMDhfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIzX1YJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIzX01BX01BU0sJCSgweDMgPDwgMjgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4yM19NQV9PRkZTRVQJCTI4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4yMl9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4yMl9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMjJfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMjFfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMjFfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIxX01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIwX1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjIwX01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4yMF9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4xOF9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4xOF9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4xOF9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjE3X1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMTdfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTRfQkFOSzNfUElOMTdfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNF9CQU5LM19QSU4xNl9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjE2X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE0X0JBTkszX1BJTjE2X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4zMF9WCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4zMF9NQV9NQVNLCQkoMHgzIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMzBfTUFfT0ZGU0VUCQkyNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjlfVgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjlfTUFfTUFTSwkJKDB4MyA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI5X01BX09GRlNFVAkJMjAKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI4X1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI4X01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yOF9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yN19WCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yN19NQV9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjdfTUFfT0ZGU0VUCQkxMgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjZfVgkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjZfTUFfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjZfTUFfT0ZGU0VUCQk4CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yNV9WCQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI1X01BX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE1X0JBTkszX1BJTjI1X01BX09GRlNFVAkJNAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTVfQkFOSzNfUElOMjRfVgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yNF9NQV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNV9CQU5LM19QSU4yNF9NQV9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDdfVgkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDdfTUFfTUFTSwkJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjA3X01BX09GRlNFVAkJMjgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjA2X1YJCQkoMSA8PCAyNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjA2X01BX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wNl9NQV9PRkZTRVQJCTI0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wNV9WCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wNV9NQV9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDVfTUFfT0ZGU0VUCQkyMAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDRfVgkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDRfTUFfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjA0X01BX09GRlNFVAkJMTYKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAzX1YJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAzX01BX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wM19NQV9PRkZTRVQJCTEyCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wMl9WCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wMl9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wMl9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAxX1YJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDFfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTZfQkFOSzRfUElOMDFfTUFfT0ZGU0VUCQk0CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxNl9CQU5LNF9QSU4wMF9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAwX01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE2X0JBTks0X1BJTjAwX01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xNV9WCQkJKDEgPDwgMzApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xNV9NQV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTVfTUFfT0ZGU0VUCQkyOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTRfVgkJCSgxIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTRfTUFfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjE0X01BX09GRlNFVAkJMjQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjEzX1YJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjEzX01BX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xM19NQV9PRkZTRVQJCTIwCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xMl9WCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4xMl9NQV9NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTJfTUFfT0ZGU0VUCQkxNgorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTFfVgkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMTFfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjExX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjEwX1YJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjEwX01BX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjEwX01BX09GRlNFVAkJOAorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMDlfVgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4wOV9NQV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxN19CQU5LNF9QSU4wOV9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE3X0JBTks0X1BJTjA4X1YJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMDhfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0RSSVZFMTdfQkFOSzRfUElOMDhfTUFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE4X0JBTks0X1BJTjIwX1YJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE4X0JBTks0X1BJTjIwX01BX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxOF9CQU5LNF9QSU4yMF9NQV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRFJJVkUxOF9CQU5LNF9QSU4xNl9WCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE4X0JBTks0X1BJTjE2X01BX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUJUElOQ1RSTF9EUklWRTE4X0JBTks0X1BJTjE2X01BX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMjgJCQkoMSA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4yNwkJCSgxIDw8IDI3KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjI2CQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMjUJCQkoMSA8PCAyNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4yNAkJCSgxIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjIzCQkJKDEgPDwgMjMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMjIJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4yMQkJCSgxIDw8IDIxKQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjIwCQkJKDEgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMTkJCQkoMSA8PCAxOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4xOAkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjE3CQkJKDEgPDwgMTcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMTYJCQkoMSA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4wNwkJCSgxIDw8IDcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMDYJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjA1CQkJKDEgPDwgNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4wNAkJCSgxIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMDMJCQkoMSA8PCAzKQorI2RlZmluZQlQSU5DVFJMX1BVTEwwX0JBTkswX1BJTjAyCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMF9CQU5LMF9QSU4wMQkJCSgxIDw8IDEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDBfQkFOSzBfUElOMDAJCQkoMSA8PCAwKQorCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMzEJCQkoMSA8PCAzMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4zMAkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjI5CQkJKDEgPDwgMjkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMjgJCQkoMSA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4yNwkJCSgxIDw8IDI3KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjI2CQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMjUJCQkoMSA8PCAyNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4yNAkJCSgxIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjIzCQkJKDEgPDwgMjMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMjIJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4yMQkJCSgxIDw8IDIxKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjIwCQkJKDEgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMTkJCQkoMSA8PCAxOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4xOAkJCSgxIDw8IDE4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjE3CQkJKDEgPDwgMTcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMTYJCQkoMSA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4xNQkJCSgxIDw8IDE1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjE0CQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMTMJCQkoMSA8PCAxMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4xMgkJCSgxIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjExCQkJKDEgPDwgMTEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMTAJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4wOQkJCSgxIDw8IDkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMDgJCQkoMSA8PCA4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjA3CQkJKDEgPDwgNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4wNgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMDUJCQkoMSA8PCA1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjA0CQkJKDEgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4wMwkJCSgxIDw8IDMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDFfQkFOSzFfUElOMDIJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwxX0JBTksxX1BJTjAxCQkJKDEgPDwgMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMV9CQU5LMV9QSU4wMAkJCSgxIDw8IDApCisKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4yNwkJCSgxIDw8IDI3KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjI2CQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMjUJCQkoMSA8PCAyNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4yNAkJCSgxIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjIxCQkJKDEgPDwgMjEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMjAJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4xOQkJCSgxIDw8IDE5KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjE4CQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMTcJCQkoMSA8PCAxNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4xNgkJCSgxIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjE1CQkJKDEgPDwgMTUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMTQJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4xMwkJCSgxIDw8IDEzKQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjEyCQkJKDEgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMTAJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4wOQkJCSgxIDw8IDkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMDgJCQkoMSA8PCA4KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjA3CQkJKDEgPDwgNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4wNgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMDUJCQkoMSA8PCA1KQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjA0CQkJKDEgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4wMwkJCSgxIDw8IDMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDJfQkFOSzJfUElOMDIJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX1BVTEwyX0JBTksyX1BJTjAxCQkJKDEgPDwgMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMMl9CQU5LMl9QSU4wMAkJCSgxIDw8IDApCisKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4zMAkJCSgxIDw8IDMwKQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjI5CQkJKDEgPDwgMjkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMjgJCQkoMSA8PCAyOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4yNwkJCSgxIDw8IDI3KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjI2CQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMjUJCQkoMSA8PCAyNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4yNAkJCSgxIDw8IDI0KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjIzCQkJKDEgPDwgMjMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMjIJCQkoMSA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4yMQkJCSgxIDw8IDIxKQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjIwCQkJKDEgPDwgMjApCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMTgJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4xNwkJCSgxIDw8IDE3KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjE2CQkJKDEgPDwgMTYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMTUJCQkoMSA8PCAxNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4xNAkJCSgxIDw8IDE0KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjEzCQkJKDEgPDwgMTMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMTIJCQkoMSA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4xMQkJCSgxIDw8IDExKQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjEwCQkJKDEgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMDkJCQkoMSA8PCA5KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjA4CQkJKDEgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4wNwkJCSgxIDw8IDcpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMDYJCQkoMSA8PCA2KQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjA1CQkJKDEgPDwgNSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4wNAkJCSgxIDw8IDQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMDMJCQkoMSA8PCAzKQorI2RlZmluZQlQSU5DVFJMX1BVTEwzX0JBTkszX1BJTjAyCQkJKDEgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMM19CQU5LM19QSU4wMQkJCSgxIDw8IDEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDNfQkFOSzNfUElOMDAJCQkoMSA8PCAwKQorCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMjAJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4xNgkJCSgxIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjE1CQkJKDEgPDwgMTUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMTQJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4xMwkJCSgxIDw8IDEzKQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjEyCQkJKDEgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMTEJCQkoMSA8PCAxMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4xMAkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjA5CQkJKDEgPDwgOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4wOAkJCSgxIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMDcJCQkoMSA8PCA3KQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjA2CQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4wNQkJCSgxIDw8IDUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMDQJCQkoMSA8PCA0KQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjAzCQkJKDEgPDwgMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNF9CQU5LNF9QSU4wMgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDRfQkFOSzRfUElOMDEJCQkoMSA8PCAxKQorI2RlZmluZQlQSU5DVFJMX1BVTEw0X0JBTks0X1BJTjAwCQkJKDEgPDwgMCkKKworI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjI2CQkJKDEgPDwgMjYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMjMJCQkoMSA8PCAyMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4yMgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjIxCQkJKDEgPDwgMjEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMjAJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4xOQkJCSgxIDw8IDE5KQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjE4CQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMTcJCQkoMSA8PCAxNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4xNgkJCSgxIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjE1CQkJKDEgPDwgMTUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMTQJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4xMwkJCSgxIDw8IDEzKQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjEyCQkJKDEgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMTEJCQkoMSA8PCAxMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4xMAkJCSgxIDw8IDEwKQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjA5CQkJKDEgPDwgOSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4wOAkJCSgxIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMDcJCQkoMSA8PCA3KQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjA2CQkJKDEgPDwgNikKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4wNQkJCSgxIDw8IDUpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMDQJCQkoMSA8PCA0KQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjAzCQkJKDEgPDwgMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNV9CQU5LNV9QSU4wMgkJCSgxIDw8IDIpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDVfQkFOSzVfUElOMDEJCQkoMSA8PCAxKQorI2RlZmluZQlQSU5DVFJMX1BVTEw1X0JBTks1X1BJTjAwCQkJKDEgPDwgMCkKKworI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjI0CQkJKDEgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMjMJCQkoMSA8PCAyMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4yMgkJCSgxIDw8IDIyKQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjIxCQkJKDEgPDwgMjEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMjAJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4xOQkJCSgxIDw8IDE5KQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjE4CQkJKDEgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMTcJCQkoMSA8PCAxNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4xNgkJCSgxIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjE0CQkJKDEgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMTMJCQkoMSA8PCAxMykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4xMgkJCSgxIDw8IDEyKQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjExCQkJKDEgPDwgMTEpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMTAJCQkoMSA8PCAxMCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4wOQkJCSgxIDw8IDkpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMDgJCQkoMSA8PCA4KQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjA3CQkJKDEgPDwgNykKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4wNgkJCSgxIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMDUJCQkoMSA8PCA1KQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjA0CQkJKDEgPDwgNCkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4wMwkJCSgxIDw8IDMpCisjZGVmaW5lCVBJTkNUUkxfUFVMTDZfQkFOSzZfUElOMDIJCQkoMSA8PCAyKQorI2RlZmluZQlQSU5DVFJMX1BVTEw2X0JBTks2X1BJTjAxCQkJKDEgPDwgMSkKKyNkZWZpbmUJUElOQ1RSTF9QVUxMNl9CQU5LNl9QSU4wMAkJCSgxIDw8IDApCisKKyNkZWZpbmUJUElOQ1RSTF9ET1VUMF9ET1VUX01BU0sJCQkJMHgxZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RPVVQwX0RPVVRfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRE9VVDFfRE9VVF9NQVNLCQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ET1VUMV9ET1VUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RPVVQyX0RPVVRfTUFTSwkJCQkweGZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ET1VUMl9ET1VUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RPVVQzX0RPVVRfTUFTSwkJCQkweDdmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfRE9VVDNfRE9VVF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ET1VUNF9ET1VUX01BU0sJCQkJMHgxZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ET1VUNF9ET1VUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RJTjBfRElOX01BU0sJCQkJMHgxZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RJTjBfRElOX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ESU4xX0RJTl9NQVNLCQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ESU4xX0RJTl9PRkZTRVQJCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRElOMl9ESU5fTUFTSwkJCQkweGZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ESU4yX0RJTl9PRkZTRVQJCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRElOM19ESU5fTUFTSwkJCQkweDdmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfRElOM19ESU5fT0ZGU0VUCQkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RJTjRfRElOX01BU0sJCQkJMHgxZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ESU40X0RJTl9PRkZTRVQJCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRE9FMF9ET0VfTUFTSwkJCQkweDFmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfRE9FMF9ET0VfT0ZGU0VUCQkJCTAKKworI2RlZmluZQlQSU5DVFJMX0RPRTFfRE9FX01BU0sJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RPRTFfRE9FX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ET0UyX0RPRV9NQVNLCQkJCTB4ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RPRTJfRE9FX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9ET0UzX0RPRV9NQVNLCQkJCTB4N2ZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9ET0UzX0RPRV9PRkZTRVQJCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfRE9FNF9ET0VfTUFTSwkJCQkweDFmZmZmZgorI2RlZmluZQlQSU5DVFJMX0RPRTRfRE9FX09GRlNFVAkJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRMF9QSU4ySVJRX01BU0sJCQkweDFmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfUElOMklSUTBfUElOMklSUV9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRMV9QSU4ySVJRX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfUElOMklSUTFfUElOMklSUV9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRMl9QSU4ySVJRX01BU0sJCQkweGZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRMl9QSU4ySVJRX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX1BJTjJJUlEzX1BJTjJJUlFfTUFTSwkJCTB4N2ZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRM19QSU4ySVJRX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX1BJTjJJUlE0X1BJTjJJUlFfTUFTSwkJCTB4MWZmZmZmCisjZGVmaW5lCVBJTkNUUkxfUElOMklSUTRfUElOMklSUV9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTjBfSVJRRU5fTUFTSwkJCTB4MWZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTjBfSVJRRU5fT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRRU4xX0lSUUVOX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRRU4xX0lSUUVOX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUUVOMl9JUlFFTl9NQVNLCQkJMHhmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRRU4yX0lSUUVOX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUUVOM19JUlFFTl9NQVNLCQkJMHg3ZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUUVOM19JUlFFTl9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTjRfSVJRRU5fTUFTSwkJCTB4MWZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRRU40X0lSUUVOX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUUxFVkVMMF9JUlFMRVZFTF9NQVNLCQkJMHgxZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUUxFVkVMMF9JUlFMRVZFTF9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUUxFVkVMMV9JUlFMRVZFTF9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUUxFVkVMMV9JUlFMRVZFTF9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUUxFVkVMMl9JUlFMRVZFTF9NQVNLCQkJMHhmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUwyX0lSUUxFVkVMX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUwzX0lSUUxFVkVMX01BU0sJCQkweDdmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUwzX0lSUUxFVkVMX09GRlNFVAkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRTEVWRUw0X0lSUUxFVkVMX01BU0sJCQkweDFmZmZmZgorI2RlZmluZQlQSU5DVFJMX0lSUUxFVkVMNF9JUlFMRVZFTF9PRkZTRVQJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUVBPTDBfSVJRUE9MX01BU0sJCQkweDFmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRUE9MMF9JUlFQT0xfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRUE9MMV9JUlFQT0xfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0wxX0lSUVBPTF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0wyX0lSUVBPTF9NQVNLCQkJMHhmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRUE9MMl9JUlFQT0xfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBJTkNUUkxfSVJRUE9MM19JUlFQT0xfTUFTSwkJCTB4N2ZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0wzX0lSUVBPTF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0w0X0lSUVBPTF9NQVNLCQkJMHgxZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFQT0w0X0lSUVBPTF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUMF9JUlFTVEFUX01BU0sJCQkweDFmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRU1RBVDBfSVJRU1RBVF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUMV9JUlFTVEFUX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRU1RBVDFfSVJRU1RBVF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUMl9JUlFTVEFUX01BU0sJCQkweGZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUMl9JUlFTVEFUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQzX0lSUVNUQVRfTUFTSwkJCTB4N2ZmZmZmZmYKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUM19JUlFTVEFUX09GRlNFVAkJCTAKKworI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQ0X0lSUVNUQVRfTUFTSwkJCTB4MWZmZmZmCisjZGVmaW5lCVBJTkNUUkxfSVJRU1RBVDRfSVJRU1RBVF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfQUREUkVTU19DQUxJQl9NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9BRERSRVNTX0NBTElCX09GRlNFVAkyNgorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9BRERSRVNTX1RMT0FEX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX0FERFJFU1NfVExPQURfT0ZGU0VUCTI0CisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX0NPTlRST0xfQ0FMSUJfTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfQ09OVFJPTF9DQUxJQl9PRkZTRVQJMjIKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfQ09OVFJPTF9UTE9BRF9NQVNLCQkoMHgzIDw8IDIwKQorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9DT05UUk9MX1RMT0FEX09GRlNFVAkyMAorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9EVUFMUEFEX0NBTElCX01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX0RVQUxQQURfQ0FMSUJfT0ZGU0VUCTE4CisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX0RVQUxQQURfVExPQURfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfRFVBTFBBRF9UTE9BRF9PRkZTRVQJMTYKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UzX0NBTElCX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFM19DQUxJQl9PRkZTRVQJMTQKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UzX1RMT0FEX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFM19UTE9BRF9PRkZTRVQJMTIKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UyX0NBTElCX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFMl9DQUxJQl9PRkZTRVQJMTAKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UyX1RMT0FEX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UyX1RMT0FEX09GRlNFVAk4CisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFMV9DQUxJQl9NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFMV9DQUxJQl9PRkZTRVQJNgorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTFfVExPQURfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0VNSV9PRFRfQ1RSTF9TTElDRTFfVExPQURfT0ZGU0VUCTQKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UwX0NBTElCX01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfT0RUX0NUUkxfU0xJQ0UwX0NBTElCX09GRlNFVAkyCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFMF9UTE9BRF9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lCVBJTkNUUkxfRU1JX09EVF9DVFJMX1NMSUNFMF9UTE9BRF9PRkZTRVQJMAorCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfRERSX01PREVfTUFTSwkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9ERFJfTU9ERV9PRkZTRVQJCTE2CisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfRERSX01PREVfbUREUgkJKDB4MCA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9ERFJfTU9ERV9HUElPCQkoMHgxIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX0REUl9NT0RFX0xWRERSMgkJKDB4MiA8PCAxNikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9ERFJfTU9ERV9ERFIyCQkoMHgzIDw8IDE2KQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX0FERFJFU1NfTUFfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9BRERSRVNTX01BX09GRlNFVAkJMTIKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9DT05UUk9MX01BX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfQ09OVFJPTF9NQV9PRkZTRVQJCTEwCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfRFVBTFBBRF9NQV9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lCVBJTkNUUkxfRU1JX0RTX0NUUkxfRFVBTFBBRF9NQV9PRkZTRVQJCTgKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9TTElDRTNfTUFfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX1NMSUNFM19NQV9PRkZTRVQJCTYKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9TTElDRTJfTUFfTUFTSwkJKDB4MyA8PCA0KQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX1NMSUNFMl9NQV9PRkZTRVQJCTQKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9TTElDRTFfTUFfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX1NMSUNFMV9NQV9PRkZTRVQJCTIKKyNkZWZpbmUJUElOQ1RSTF9FTUlfRFNfQ1RSTF9TTElDRTBfTUFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZQlQSU5DVFJMX0VNSV9EU19DVFJMX1NMSUNFMF9NQV9PRkZTRVQJCTAKKworI2VuZGlmIC8qIF9fTVgyOF9SRUdTX1BJTkNUUkxfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1wb3dlci5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtcG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGE2M2FkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtcG93ZXIuaApAQCAtMCwwICsxLDQxMyBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggUG93ZXIgQ29udHJvbGxlciBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTVgyOF9SRUdTX1BPV0VSX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19QT1dFUl9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY29tbW9uLmg+CisKKyNpZm5kZWYJX19BU1NFTUJMWV9fCitzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzIHsKKwlteDI4X3JlZyhod19wb3dlcl9jdHJsKQorCW14MjhfcmVnKGh3X3Bvd2VyXzV2Y3RybCkKKwlteDI4X3JlZyhod19wb3dlcl9taW5wd3IpCisJbXgyOF9yZWcoaHdfcG93ZXJfY2hhcmdlKQorCXVpbnQzMl90CWh3X3Bvd2VyX3ZkZGRjdHJsOworCXVpbnQzMl90CXJlc2VydmVkX3ZkZGRbM107CisJdWludDMyX3QJaHdfcG93ZXJfdmRkYWN0cmw7CisJdWludDMyX3QJcmVzZXJ2ZWRfdmRkYVszXTsKKwl1aW50MzJfdAlod19wb3dlcl92ZGRpb2N0cmw7CisJdWludDMyX3QJcmVzZXJ2ZWRfdmRkaW9bM107CisJdWludDMyX3QJaHdfcG93ZXJfdmRkbWVtY3RybDsKKwl1aW50MzJfdAlyZXNlcnZlZF92ZGRtZW1bM107CisJdWludDMyX3QJaHdfcG93ZXJfZGNkYzRwMjsKKwl1aW50MzJfdAlyZXNlcnZlZF9kY2RjNHAyWzNdOworCXVpbnQzMl90CWh3X3Bvd2VyX21pc2M7CisJdWludDMyX3QJcmVzZXJ2ZWRfbWlzY1szXTsKKwl1aW50MzJfdAlod19wb3dlcl9kY2xpbWl0czsKKwl1aW50MzJfdAlyZXNlcnZlZF9kY2xpbWl0c1szXTsKKwlteDI4X3JlZyhod19wb3dlcl9sb29wY3RybCkKKwl1aW50MzJfdAlod19wb3dlcl9zdHM7CisJdWludDMyX3QJcmVzZXJ2ZWRfc3RzWzNdOworCW14MjhfcmVnKGh3X3Bvd2VyX3NwZWVkKQorCXVpbnQzMl90CWh3X3Bvd2VyX2JhdHRtb25pdG9yOworCXVpbnQzMl90CXJlc2VydmVkX2JhdHRtb25pdG9yWzNdOworCisJdWludDMyX3QJcmVzZXJ2ZWRbNF07CisKKwlteDI4X3JlZyhod19wb3dlcl9yZXNldCkKKwlteDI4X3JlZyhod19wb3dlcl9kZWJ1ZykKKwlteDI4X3JlZyhod19wb3dlcl90aGVybWFsKQorCW14MjhfcmVnKGh3X3Bvd2VyX3VzYjFjdHJsKQorCW14MjhfcmVnKGh3X3Bvd2VyX3NwZWNpYWwpCisJbXgyOF9yZWcoaHdfcG93ZXJfdmVyc2lvbikKKwlteDI4X3JlZyhod19wb3dlcl9hbmFjbGtjdHJsKQorCW14MjhfcmVnKGh3X3Bvd2VyX3JlZmN0cmwpCit9OworI2VuZGlmCisKKyNkZWZpbmUJUE9XRVJfQ1RSTF9QU1dJVENIX01JRF9UUkFOCQkJKDEgPDwgMjcpCisjZGVmaW5lCVBPV0VSX0NUUkxfRENEQzRQMl9CT19JUlEJCQkoMSA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9FTklSUV9EQ0RDNFAyX0JPCQkJKDEgPDwgMjMpCisjZGVmaW5lCVBPV0VSX0NUUkxfVkRENVZfRFJPT1BfSVJRCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBPV0VSX0NUUkxfRU5JUlFfVkRENVZfRFJPT1AJCQkoMSA8PCAyMSkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9QU1dJVENIX0lSUQkJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9QU1dJVENIX0lSUV9TUkMJCQkoMSA8PCAxOSkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9QT0xBUklUWV9QU1dJVENICQkJKDEgPDwgMTgpCisjZGVmaW5lCVBPV0VSX0NUUkxfRU5JUlFfUFNXSVRDSAkJCSgxIDw8IDE3KQorI2RlZmluZQlQT1dFUl9DVFJMX1BPTEFSSVRZX0RDX09LCQkJKDEgPDwgMTYpCisjZGVmaW5lCVBPV0VSX0NUUkxfRENfT0tfSVJRCQkJCSgxIDw8IDE1KQorI2RlZmluZQlQT1dFUl9DVFJMX0VOSVJRX0RDX09LCQkJCSgxIDw8IDE0KQorI2RlZmluZQlQT1dFUl9DVFJMX0JBVFRfQk9fSVJRCQkJCSgxIDw8IDEzKQorI2RlZmluZQlQT1dFUl9DVFJMX0VOSVJRX0JBVFRfQk8JCQkoMSA8PCAxMikKKyNkZWZpbmUJUE9XRVJfQ1RSTF9WRERJT19CT19JUlEJCQkJKDEgPDwgMTEpCisjZGVmaW5lCVBPV0VSX0NUUkxfRU5JUlFfVkRESU9fQk8JCQkoMSA8PCAxMCkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9WRERBX0JPX0lSUQkJCQkoMSA8PCA5KQorI2RlZmluZQlQT1dFUl9DVFJMX0VOSVJRX1ZEREFfQk8JCQkoMSA8PCA4KQorI2RlZmluZQlQT1dFUl9DVFJMX1ZERERfQk9fSVJRCQkJCSgxIDw8IDcpCisjZGVmaW5lCVBPV0VSX0NUUkxfRU5JUlFfVkRERF9CTwkJCSgxIDw8IDYpCisjZGVmaW5lCVBPV0VSX0NUUkxfUE9MQVJJVFlfVkJVU1ZBTElECQkJKDEgPDwgNSkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9WQlVTX1ZBTElEX0lSUQkJCSgxIDw8IDQpCisjZGVmaW5lCVBPV0VSX0NUUkxfRU5JUlFfVkJVU19WQUxJRAkJCSgxIDw8IDMpCisjZGVmaW5lCVBPV0VSX0NUUkxfUE9MQVJJVFlfVkRENVZfR1RfVkRESU8JCSgxIDw8IDIpCisjZGVmaW5lCVBPV0VSX0NUUkxfVkRENVZfR1RfVkRESU9fSVJRCQkJKDEgPDwgMSkKKyNkZWZpbmUJUE9XRVJfQ1RSTF9FTklSUV9WREQ1Vl9HVF9WRERJTwkJCSgxIDw8IDApCisKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1ZCVVNEUk9PUF9UUlNIX01BU0sJCSgweDMgPDwgMzApCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTRFJPT1BfVFJTSF9PRkZTRVQJCTMwCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTRFJPT1BfVFJTSF80VjMJCQkoMHgwIDw8IDMwKQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU0RST09QX1RSU0hfNFY0CQkJKDB4MSA8PCAzMCkKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1ZCVVNEUk9PUF9UUlNIXzRWNQkJCSgweDIgPDwgMzApCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9WQlVTRFJPT1BfVFJTSF80VjcJCQkoMHgzIDw8IDMwKQorI2RlZmluZQlQT1dFUl81VkNUUkxfSEVBRFJPT01fQURKX01BU0sJCQkoMHg3IDw8IDI0KQorI2RlZmluZQlQT1dFUl81VkNUUkxfSEVBRFJPT01fQURKX09GRlNFVAkJMjQKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1BXRF9DSEFSR0VfNFAyX01BU0sJCSgweDMgPDwgMjApCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9QV0RfQ0hBUkdFXzRQMl9PRkZTRVQJCTIwCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9NQVNLCQkoMHgzZiA8PCAxMikKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX09GRlNFVAkJMTIKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1ZCVVNWQUxJRF9UUlNIX01BU0sJCSgweDcgPDwgOCkKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1ZCVVNWQUxJRF9UUlNIX09GRlNFVAkJOAorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfMlY5CQkJKDB4MCA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfNFYwCQkJKDB4MSA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfNFYxCQkJKDB4MiA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfNFYyCQkJKDB4MyA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfNFYzCQkJKDB4NCA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfNFY0CQkJKDB4NSA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfNFY1CQkJKDB4NiA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEX1RSU0hfNFY2CQkJKDB4NyA8PCA4KQorI2RlZmluZQlQT1dFUl81VkNUUkxfUFdETl81VkJSTk9VVAkJCSgxIDw8IDcpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9FTkFCTEVfTElOUkVHX0lMSU1JVAkJKDEgPDwgNikKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX0RDRENfWEZFUgkJCQkoMSA8PCA1KQorI2RlZmluZQlQT1dFUl81VkNUUkxfVkJVU1ZBTElEXzVWREVURUNUCQkJKDEgPDwgNCkKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1ZCVVNWQUxJRF9UT19CCQkJKDEgPDwgMykKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX0lMSU1JVF9FUV9aRVJPCQkJKDEgPDwgMikKKyNkZWZpbmUJUE9XRVJfNVZDVFJMX1BXUlVQX1ZCVVNfQ01QUwkJCSgxIDw8IDEpCisjZGVmaW5lCVBPV0VSXzVWQ1RSTF9FTkFCTEVfRENEQwkJCSgxIDw8IDApCisKKyNkZWZpbmUJUE9XRVJfTUlOUFdSX0xPV1BXUl80UDIJCQkJKDEgPDwgMTQpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9QV0RfQk8JCQkJKDEgPDwgMTIpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9VU0VfVkREWFRBTF9WQkcJCQkoMSA8PCAxMSkKKyNkZWZpbmUJUE9XRVJfTUlOUFdSX1BXRF9BTkFfQ01QUwkJCSgxIDw8IDEwKQorI2RlZmluZQlQT1dFUl9NSU5QV1JfRU5BQkxFX09TQwkJCQkoMSA8PCA5KQorI2RlZmluZQlQT1dFUl9NSU5QV1JfU0VMRUNUX09TQwkJCQkoMSA8PCA4KQorI2RlZmluZQlQT1dFUl9NSU5QV1JfRkJHX09GRgkJCQkoMSA8PCA3KQorI2RlZmluZQlQT1dFUl9NSU5QV1JfRE9VQkxFX0ZFVFMJCQkoMSA8PCA2KQorI2RlZmluZQlQT1dFUl9NSU5QV1JfSEFMRkZFVFMJCQkJKDEgPDwgNSkKKyNkZWZpbmUJUE9XRVJfTUlOUFdSX0xFU1NBTkFfSQkJCQkoMSA8PCA0KQorI2RlZmluZQlQT1dFUl9NSU5QV1JfUFdEX1hUQUwyNAkJCQkoMSA8PCAzKQorI2RlZmluZQlQT1dFUl9NSU5QV1JfRENfU1RPUENMSwkJCQkoMSA8PCAyKQorI2RlZmluZQlQT1dFUl9NSU5QV1JfRU5fRENfUEZNCQkJCSgxIDw8IDEpCisjZGVmaW5lCVBPV0VSX01JTlBXUl9EQ19IQUxGQ0xLCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0FESl9WT0xUX01BU0sJCQkoMHg3IDw8IDI0KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQURKX1ZPTFRfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0FESl9WT0xUX00wMjVQCQkJKDB4MSA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0FESl9WT0xUX1AwNTBQCQkJKDB4MiA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0FESl9WT0xUX00wNzVQCQkJKDB4MyA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0FESl9WT0xUX1AwMjVQCQkJKDB4NCA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0FESl9WT0xUX00wNTBQCQkJKDB4NSA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0FESl9WT0xUX1AwNzVQCQkJKDB4NiA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0FESl9WT0xUX00xMDBQCQkJKDB4NyA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0VOQUJMRV9MT0FECQkJKDEgPDwgMjIpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9FTkFCTEVfRkFVTFRfREVURUNUCQkoMSA8PCAyMCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0NIUkdfU1RTX09GRgkJCSgxIDw8IDE5KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfTElJT05fNFAxCQkJCSgxIDw8IDE4KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfUFdEX0JBVFRDSFJHCQkJKDEgPDwgMTYpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9FTkFCTEVfQ0hBUkdFUl9VU0IxCQkoMSA8PCAxMykKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0VOQUJMRV9DSEFSR0VSX1VTQjAJCSgxIDw8IDEyKQorI2RlZmluZQlQT1dFUl9DSEFSR0VfU1RPUF9JTElNSVRfTUFTSwkJCSgweGYgPDwgOCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX1NUT1BfSUxJTUlUX09GRlNFVAkJCTgKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX1NUT1BfSUxJTUlUXzEwTUEJCQkoMHgxIDw8IDgpCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9TVE9QX0lMSU1JVF8yME1BCQkJKDB4MiA8PCA4KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfU1RPUF9JTElNSVRfNTBNQQkJCSgweDQgPDwgOCkKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX1NUT1BfSUxJTUlUXzEwME1BCQkJKDB4OCA8PCA4KQorI2RlZmluZQlQT1dFUl9DSEFSR0VfQkFUVENIUkdfSV9NQVNLCQkJMHgzZgorI2RlZmluZQlQT1dFUl9DSEFSR0VfQkFUVENIUkdfSV9PRkZTRVQJCQkwCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JXzEwTUEJCQkweDAxCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JXzIwTUEJCQkweDAyCisjZGVmaW5lCVBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JXzUwTUEJCQkweDA0CisjZGVmaW5lCVBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JXzEwME1BCQkJMHgwOAorI2RlZmluZQlQT1dFUl9DSEFSR0VfQkFUVENIUkdfSV8yMDBNQQkJCTB4MTAKKyNkZWZpbmUJUE9XRVJfQ0hBUkdFX0JBVFRDSFJHX0lfNDAwTUEJCQkweDIwCisKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfQURKVE5fTUFTSwkJCSgweGYgPDwgMjgpCisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX0FESlROX09GRlNFVAkJCTI4CisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX1BXRE5fQlJOT1VUCQkJKDEgPDwgMjMpCisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX0RJU0FCTEVfU1RFUFBJTkcJCQkoMSA8PCAyMikKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfRU5BQkxFX0xJTlJFRwkJCSgxIDw8IDIxKQorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9ESVNBQkxFX0ZFVAkJCSgxIDw8IDIwKQorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfT0ZGU0VUCQkxNgorI2RlZmluZQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzBTVEVQUwkJKDB4MCA8PCAxNikKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQUJPVkUJKDB4MSA8PCAxNikKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQkVMT1cJKDB4MiA8PCAxNikKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF8yU1RFUFNfQkVMT1cJKDB4MyA8PCAxNikKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfQk9fT0ZGU0VUX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX0JPX09GRlNFVF9PRkZTRVQJCQk4CisjZGVmaW5lCVBPV0VSX1ZERERDVFJMX1RSR19NQVNLCQkJCTB4MWYKKyNkZWZpbmUJUE9XRVJfVkRERENUUkxfVFJHX09GRlNFVAkJCTAKKworI2RlZmluZQlQT1dFUl9WRERBQ1RSTF9QV0ROX0JSTk9VVAkJCSgxIDw8IDE5KQorI2RlZmluZQlQT1dFUl9WRERBQ1RSTF9ESVNBQkxFX1NURVBQSU5HCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX0VOQUJMRV9MSU5SRUcJCQkoMSA8PCAxNykKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfRElTQUJMRV9GRVQJCQkoMSA8PCAxNikKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfTElOUkVHX09GRlNFVF9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZQlQT1dFUl9WRERBQ1RSTF9MSU5SRUdfT0ZGU0VUX09GRlNFVAkJMTIKKyNkZWZpbmUJUE9XRVJfVkREQUNUUkxfTElOUkVHX09GRlNFVF8wU1RFUFMJCSgweDAgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX0xJTlJFR19PRkZTRVRfMVNURVBTX0FCT1ZFCSgweDEgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX0xJTlJFR19PRkZTRVRfMVNURVBTX0JFTE9XCSgweDIgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX0xJTlJFR19PRkZTRVRfMlNURVBTX0JFTE9XCSgweDMgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX0JPX09GRlNFVF9NQVNLCQkJKDB4NyA8PCA4KQorI2RlZmluZQlQT1dFUl9WRERBQ1RSTF9CT19PRkZTRVRfT0ZGU0VUCQkJOAorI2RlZmluZQlQT1dFUl9WRERBQ1RSTF9UUkdfTUFTSwkJCQkweDFmCisjZGVmaW5lCVBPV0VSX1ZEREFDVFJMX1RSR19PRkZTRVQJCQkwCisKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0FESlROX01BU0sJCQkoMHhmIDw8IDIwKQorI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfQURKVE5fT0ZGU0VUCQkJMjAKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX1BXRE5fQlJOT1VUCQkJKDEgPDwgMTgpCisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9ESVNBQkxFX1NURVBQSU5HCQkoMSA8PCAxNykKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0RJU0FCTEVfRkVUCQkJKDEgPDwgMTYpCisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9MSU5SRUdfT0ZGU0VUX09GRlNFVAkJMTIKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0xJTlJFR19PRkZTRVRfMFNURVBTCQkoMHgwIDw8IDEyKQorI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQUJPVkUJKDB4MSA8PCAxMikKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX0xJTlJFR19PRkZTRVRfMVNURVBTX0JFTE9XCSgweDIgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9MSU5SRUdfT0ZGU0VUXzJTVEVQU19CRUxPVwkoMHgzIDw8IDEyKQorI2RlZmluZQlQT1dFUl9WRERJT0NUUkxfQk9fT0ZGU0VUX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9CT19PRkZTRVRfT0ZGU0VUCQk4CisjZGVmaW5lCVBPV0VSX1ZERElPQ1RSTF9UUkdfTUFTSwkJCTB4MWYKKyNkZWZpbmUJUE9XRVJfVkRESU9DVFJMX1RSR19PRkZTRVQJCQkwCisKKyNkZWZpbmUJUE9XRVJfVkRETUVNQ1RSTF9QVUxMRE9XTl9BQ1RJVkUJCSgxIDw8IDEwKQorI2RlZmluZQlQT1dFUl9WRERNRU1DVFJMX0VOQUJMRV9JTElNSVQJCQkoMSA8PCA5KQorI2RlZmluZQlQT1dFUl9WRERNRU1DVFJMX0VOQUJMRV9MSU5SRUcJCQkoMSA8PCA4KQorI2RlZmluZQlQT1dFUl9WRERNRU1DVFJMX0JPX09GRlNFVF9NQVNLCQkJKDB4NyA8PCA1KQorI2RlZmluZQlQT1dFUl9WRERNRU1DVFJMX0JPX09GRlNFVF9PRkZTRVQJCTUKKyNkZWZpbmUJUE9XRVJfVkRETUVNQ1RSTF9UUkdfTUFTSwkJCTB4MWYKKyNkZWZpbmUJUE9XRVJfVkRETUVNQ1RSTF9UUkdfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRFJPUE9VVF9DVFJMX01BU0sJCQkoMHhmIDw8IDI4KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF9PRkZTRVQJCTI4CisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRFJPUE9VVF9DVFJMXzIwME1WCQkoMHgzIDw8IDMwKQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF8xMDBNVgkJKDB4MiA8PCAzMCkKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9EUk9QT1VUX0NUUkxfNTBNVgkJCSgweDEgPDwgMzApCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRFJPUE9VVF9DVFJMXzI1TVYJCQkoMHgwIDw8IDMwKQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF9TUkNfNFAyCQkoMHgwIDw8IDI4KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF9TUkNfNFAyX0xUX0JBVFQJKDB4MSA8PCAyOCkKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9EUk9QT1VUX0NUUkxfU1JDX1NFTAkJKDB4MiA8PCAyOCkKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9JU1RFQUxfVEhSRVNIX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfSVNURUFMX1RIUkVTSF9PRkZTRVQJCTI0CisjZGVmaW5lCVBPV0VSX0RDREM0UDJfRU5BQkxFXzRQMgkJCSgxIDw8IDIzKQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0VOQUJMRV9EQ0RDCQkJKDEgPDwgMjIpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfSFlTVF9ESVIJCQkJKDEgPDwgMjEpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfSFlTVF9USFJFU0gJCQkoMSA8PCAyMCkKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9UUkdfTUFTSwkJCQkoMHg3IDw8IDE2KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX1RSR19PRkZTRVQJCQkxNgorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX1RSR180VjIJCQkJKDB4MCA8PCAxNikKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9UUkdfNFYxCQkJCSgweDEgPDwgMTYpCisjZGVmaW5lCVBPV0VSX0RDREM0UDJfVFJHXzRWMAkJCQkoMHgyIDw8IDE2KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX1RSR18zVjkJCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9UUkdfQkFUVAkJCQkoMHg0IDw8IDE2KQorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0JPX01BU0sJCQkJKDB4MWYgPDwgOCkKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9CT19PRkZTRVQJCQkJOAorI2RlZmluZQlQT1dFUl9EQ0RDNFAyX0NNUFRSSVBfTUFTSwkJCTB4MWYKKyNkZWZpbmUJUE9XRVJfRENEQzRQMl9DTVBUUklQX09GRlNFVAkJCTAKKworI2RlZmluZQlQT1dFUl9NSVNDX0ZSRVFTRUxfTUFTSwkJCQkoMHg3IDw8IDQpCisjZGVmaW5lCVBPV0VSX01JU0NfRlJFUVNFTF9PRkZTRVQJCQk0CisjZGVmaW5lCVBPV0VSX01JU0NfRlJFUVNFTF8yME1IWgkJCSgweDEgPDwgNCkKKyNkZWZpbmUJUE9XRVJfTUlTQ19GUkVRU0VMXzI0TUhaCQkJKDB4MiA8PCA0KQorI2RlZmluZQlQT1dFUl9NSVNDX0ZSRVFTRUxfMTlNSFoJCQkoMHgzIDw8IDQpCisjZGVmaW5lCVBPV0VSX01JU0NfRlJFUVNFTF8xNE1IWgkJCSgweDQgPDwgNCkKKyNkZWZpbmUJUE9XRVJfTUlTQ19GUkVRU0VMXzE4TUhaCQkJKDB4NSA8PCA0KQorI2RlZmluZQlQT1dFUl9NSVNDX0ZSRVFTRUxfMjFNSFoJCQkoMHg2IDw8IDQpCisjZGVmaW5lCVBPV0VSX01JU0NfRlJFUVNFTF8xN01IWgkJCSgweDcgPDwgNCkKKyNkZWZpbmUJUE9XRVJfTUlTQ19ESVNBQkxFX0ZFVF9CT19MT0dJQwkJCSgxIDw8IDMpCisjZGVmaW5lCVBPV0VSX01JU0NfREVMQVlfVElNSU5HCQkJCSgxIDw8IDIpCisjZGVmaW5lCVBPV0VSX01JU0NfVEVTVAkJCQkJKDEgPDwgMSkKKyNkZWZpbmUJUE9XRVJfTUlTQ19TRUxfUExMQ0xLCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJUE9XRVJfRENMSU1JVFNfUE9TTElNSVRfQlVDS19NQVNLCQkoMHg3ZiA8PCA4KQorI2RlZmluZQlQT1dFUl9EQ0xJTUlUU19QT1NMSU1JVF9CVUNLX09GRlNFVAkJOAorI2RlZmluZQlQT1dFUl9EQ0xJTUlUU19ORUdMSU1JVF9NQVNLCQkJMHg3ZgorI2RlZmluZQlQT1dFUl9EQ0xJTUlUU19ORVRMSU1JVF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfVE9HR0xFX0RJRgkJCSgxIDw8IDIwKQorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9IWVNUX1NJR04JCQkoMSA8PCAxOSkKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRU5fQ01fSFlTVAkJCSgxIDw8IDE4KQorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9FTl9ERl9IWVNUCQkJKDEgPDwgMTcpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0NNX0hZU1RfVEhSRVNICQkJKDEgPDwgMTYpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0RGX0hZU1RfVEhSRVNICQkJKDEgPDwgMTUpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX1JDU0NBTEVfVEhSRVNICQkJKDEgPDwgMTQpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0VOX1JDU0NBTEVfTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0VOX1JDU0NBTEVfT0ZGU0VUCQkxMgorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9FTl9SQ1NDQUxFX0RJUwkJCSgweDAgPDwgMTIpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0VOX1JDU0NBTEVfMlgJCQkoMHgxIDw8IDEyKQorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9FTl9SQ1NDQUxFXzRYCQkJKDB4MiA8PCAxMikKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRU5fUkNTQ0FMRV84WAkJCSgweDMgPDwgMTIpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0RDX0ZGX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0RDX0ZGX09GRlNFVAkJCTgKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRENfUl9NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9EQ19SX09GRlNFVAkJCTQKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRENfQ19NQVNLCQkJMHgzCisjZGVmaW5lCVBPV0VSX0xPT1BDVFJMX0RDX0NfT0ZGU0VUCQkJMAorI2RlZmluZQlQT1dFUl9MT09QQ1RSTF9EQ19DX01BWAkJCQkweDAKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRENfQ18yWAkJCQkweDEKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRENfQ180WAkJCQkweDIKKyNkZWZpbmUJUE9XRVJfTE9PUENUUkxfRENfQ19NSU4JCQkJMHgzCisKKyNkZWZpbmUJUE9XRVJfU1RTX1BXUlVQX1NPVVJDRV9NQVNLCQkJKDB4M2YgPDwgMjQpCisjZGVmaW5lCVBPV0VSX1NUU19QV1JVUF9TT1VSQ0VfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJUE9XRVJfU1RTX1BXUlVQX1NPVVJDRV81VgkJCSgweDIwIDw8IDI0KQorI2RlZmluZQlQT1dFUl9TVFNfUFdSVVBfU09VUkNFX1JUQwkJCSgweDEwIDw8IDI0KQorI2RlZmluZQlQT1dFUl9TVFNfUFdSVVBfU09VUkNFX1BTV0lUQ0hfSElHSAkJKDB4MDIgPDwgMjQpCisjZGVmaW5lCVBPV0VSX1NUU19QV1JVUF9TT1VSQ0VfUFNXSVRDSF9NSUQJCSgweDAxIDw8IDI0KQorI2RlZmluZQlQT1dFUl9TVFNfUFNXSVRDSF9NQVNLCQkJCSgweDMgPDwgMjApCisjZGVmaW5lCVBPV0VSX1NUU19QU1dJVENIX09GRlNFVAkJCTIwCisjZGVmaW5lCVBPV0VSX1NUU19USEVSTUFMX1dBUk5JTkcJCQkoMSA8PCAxOSkKKyNkZWZpbmUJUE9XRVJfU1RTX1ZERE1FTV9CTwkJCQkoMSA8PCAxOCkKKyNkZWZpbmUJUE9XRVJfU1RTX0FWQUxJRDBfU1RBVFVTCQkJKDEgPDwgMTcpCisjZGVmaW5lCVBPV0VSX1NUU19CVkFMSUQwX1NUQVRVUwkJCSgxIDw8IDE2KQorI2RlZmluZQlQT1dFUl9TVFNfVkJVU1ZBTElEMF9TVEFUVVMJCQkoMSA8PCAxNSkKKyNkZWZpbmUJUE9XRVJfU1RTX1NFU1NFTkQwX1NUQVRVUwkJCSgxIDw8IDE0KQorI2RlZmluZQlQT1dFUl9TVFNfQkFUVF9CTwkJCQkoMSA8PCAxMykKKyNkZWZpbmUJUE9XRVJfU1RTX1ZERDVWX0ZBVUxUCQkJCSgxIDw8IDEyKQorI2RlZmluZQlQT1dFUl9TVFNfQ0hSR1NUUwkJCQkoMSA8PCAxMSkKKyNkZWZpbmUJUE9XRVJfU1RTX0RDRENfNFAyX0JPCQkJCSgxIDw8IDEwKQorI2RlZmluZQlQT1dFUl9TVFNfRENfT0sJCQkJCSgxIDw8IDkpCisjZGVmaW5lCVBPV0VSX1NUU19WRERJT19CTwkJCQkoMSA8PCA4KQorI2RlZmluZQlQT1dFUl9TVFNfVkREQV9CTwkJCQkoMSA8PCA3KQorI2RlZmluZQlQT1dFUl9TVFNfVkRERF9CTwkJCQkoMSA8PCA2KQorI2RlZmluZQlQT1dFUl9TVFNfVkRENVZfR1RfVkRESU8JCQkoMSA8PCA1KQorI2RlZmluZQlQT1dFUl9TVFNfVkRENVZfRFJPT1AJCQkJKDEgPDwgNCkKKyNkZWZpbmUJUE9XRVJfU1RTX0FWQUxJRDAJCQkJKDEgPDwgMykKKyNkZWZpbmUJUE9XRVJfU1RTX0JWQUxJRDAJCQkJKDEgPDwgMikKKyNkZWZpbmUJUE9XRVJfU1RTX1ZCVVNWQUxJRDAJCQkJKDEgPDwgMSkKKyNkZWZpbmUJUE9XRVJfU1RTX1NFU1NFTkQwCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJUE9XRVJfU1BFRURfU1RBVFVTX01BU0sJCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZQlQT1dFUl9TUEVFRF9TVEFUVVNfT0ZGU0VUCQkJOAorI2RlZmluZQlQT1dFUl9TUEVFRF9TVEFUVVNfU0VMX01BU0sJCQkoMHgzIDw8IDYpCisjZGVmaW5lCVBPV0VSX1NQRUVEX1NUQVRVU19TRUxfT0ZGU0VUCQkJNgorI2RlZmluZQlQT1dFUl9TUEVFRF9TVEFUVVNfU0VMX0RDRENfU1RBVAkJKDB4MCA8PCA2KQorI2RlZmluZQlQT1dFUl9TUEVFRF9TVEFUVVNfU0VMX0NPUkVfU1RBVAkJKDB4MSA8PCA2KQorI2RlZmluZQlQT1dFUl9TUEVFRF9TVEFUVVNfU0VMX0FSTV9TVEFUCQkJKDB4MiA8PCA2KQorI2RlZmluZQlQT1dFUl9TUEVFRF9DVFJMX01BU0sJCQkJMHgzCisjZGVmaW5lCVBPV0VSX1NQRUVEX0NUUkxfT0ZGU0VUCQkJCTAKKyNkZWZpbmUJUE9XRVJfU1BFRURfQ1RSTF9TU19PRkYJCQkJMHgwCisjZGVmaW5lCVBPV0VSX1NQRUVEX0NUUkxfU1NfT04JCQkJMHgxCisjZGVmaW5lCVBPV0VSX1NQRUVEX0NUUkxfU1NfRU5BQkxFCQkJMHgzCisKKyNkZWZpbmUJUE9XRVJfQkFUVE1PTklUT1JfQkFUVF9WQUxfTUFTSwkJCSgweDNmZiA8PCAxNikKKyNkZWZpbmUJUE9XRVJfQkFUVE1PTklUT1JfQkFUVF9WQUxfT0ZGU0VUCQkxNgorI2RlZmluZQlQT1dFUl9CQVRUTU9OSVRPUl9QV0ROX0JBVFRCUk5PVVRfNVZERVRFQ1RfRU4JKDEgPDwgMTEpCisjZGVmaW5lCVBPV0VSX0JBVFRNT05JVE9SX0VOX0JBVEFESgkJCSgxIDw8IDEwKQorI2RlZmluZQlQT1dFUl9CQVRUTU9OSVRPUl9QV0ROX0JBVFRCUk5PVVQJCSgxIDw8IDkpCisjZGVmaW5lCVBPV0VSX0JBVFRNT05JVE9SX0JSV05PVVRfUFdECQkJKDEgPDwgOCkKKyNkZWZpbmUJUE9XRVJfQkFUVE1PTklUT1JfQlJXTk9VVF9MVkxfTUFTSwkJMHgxZgorI2RlZmluZQlQT1dFUl9CQVRUTU9OSVRPUl9CUldOT1VUX0xWTF9PRkZTRVQJCTAKKworI2RlZmluZQlQT1dFUl9SRVNFVF9VTkxPQ0tfTUFTSwkJCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZQlQT1dFUl9SRVNFVF9VTkxPQ0tfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJUE9XRVJfUkVTRVRfVU5MT0NLX0tFWQkJCQkoMHgzZTc3IDw8IDE2KQorI2RlZmluZQlQT1dFUl9SRVNFVF9GQVNURkFMTF9QU1dJVENIX09GRgkJKDEgPDwgMikKKyNkZWZpbmUJUE9XRVJfUkVTRVRfUFdEX09GRgkJCQkoMSA8PCAxKQorI2RlZmluZQlQT1dFUl9SRVNFVF9QV0QJCQkJCSgxIDw8IDApCisKKyNkZWZpbmUJUE9XRVJfREVCVUdfVkJVU1ZBTElEUElPTE9DSwkJCSgxIDw8IDMpCisjZGVmaW5lCVBPV0VSX0RFQlVHX0FWQUxJRFBJT0xPQ0sJCQkoMSA8PCAyKQorI2RlZmluZQlQT1dFUl9ERUJVR19CVkFMSURQSU9MT0NLCQkJKDEgPDwgMSkKKyNkZWZpbmUJUE9XRVJfREVCVUdfU0VTU0VORFBJT0xPQ0sJCQkoMSA8PCAwKQorCisjZGVmaW5lCVBPV0VSX1RIRVJNQUxfVEVTVAkJCQkoMSA8PCA4KQorI2RlZmluZQlQT1dFUl9USEVSTUFMX1BXRAkJCQkoMSA8PCA3KQorI2RlZmluZQlQT1dFUl9USEVSTUFMX0xPV19QT1dFUgkJCQkoMSA8PCA2KQorI2RlZmluZQlQT1dFUl9USEVSTUFMX09GRlNFVF9BREpfTUFTSwkJCSgweDMgPDwgNCkKKyNkZWZpbmUJUE9XRVJfVEhFUk1BTF9PRkZTRVRfQURKX09GRlNFVAkJCTQKKyNkZWZpbmUJUE9XRVJfVEhFUk1BTF9PRkZTRVRfQURKX0VOQUJMRQkJCSgxIDw8IDMpCisjZGVmaW5lCVBPV0VSX1RIRVJNQUxfVEVNUF9USFJFU0hPTERfTUFTSwkJMHg3CisjZGVmaW5lCVBPV0VSX1RIRVJNQUxfVEVNUF9USFJFU0hPTERfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUE9XRVJfVVNCMUNUUkxfQVZBTElEMQkJCQkoMSA8PCAzKQorI2RlZmluZQlQT1dFUl9VU0IxQ1RSTF9CVkFMSUQxCQkJCSgxIDw8IDIpCisjZGVmaW5lCVBPV0VSX1VTQjFDVFJMX1ZCVVNWQUxJRDEJCQkoMSA8PCAxKQorI2RlZmluZQlQT1dFUl9VU0IxQ1RSTF9TRVNTRU5EMQkJCQkoMSA8PCAwKQorCisjZGVmaW5lCVBPV0VSX1NQRUNJQUxfVEVTVF9NQVNLCQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUE9XRVJfU1BFQ0lBTF9URVNUX09GRlNFVAkJCTAKKworI2RlZmluZQlQT1dFUl9WRVJTSU9OX01BSk9SX01BU0sJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfVkVSU0lPTl9NQUpPUl9PRkZTRVQJCQkyNAorI2RlZmluZQlQT1dFUl9WRVJTSU9OX01JTk9SX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJUE9XRVJfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCQkxNgorI2RlZmluZQlQT1dFUl9WRVJTSU9OX1NURVBfTUFTSwkJCQkweGZmZmYKKyNkZWZpbmUJUE9XRVJfVkVSU0lPTl9TVEVQX09GRlNFVAkJCTAKKworI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX0NMS0dBVEVfMAkJCSgxIDw8IDMxKQorI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX09VVERJVl9NQVNLCQkJKDB4NyA8PCAyOCkKKyNkZWZpbmUJUE9XRVJfQU5BQ0xLQ1RSTF9PVVRESVZfT0ZGU0VUCQkJMjgKKyNkZWZpbmUJUE9XRVJfQU5BQ0xLQ1RSTF9JTlZFUlRfT1VUQ0xLCQkJKDEgPDwgMjcpCisjZGVmaW5lCVBPV0VSX0FOQUNMS0NUUkxfQ0xLR0FURV9JCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBPV0VSX0FOQUNMS0NUUkxfRElUSEVSX09GRgkJCSgxIDw8IDEwKQorI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX1NMT1dfRElUSEVSCQkJKDEgPDwgOSkKKyNkZWZpbmUJUE9XRVJfQU5BQ0xLQ1RSTF9JTlZFUlRfSU5DTEsJCQkoMSA8PCA4KQorI2RlZmluZQlQT1dFUl9BTkFDTEtDVFJMX0lOQ0xLX1NISUZUX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUJUE9XRVJfQU5BQ0xLQ1RSTF9JTkNMS19TSElGVF9PRkZTRVQJCTQKKyNkZWZpbmUJUE9XRVJfQU5BQ0xLQ1RSTF9JTkRJVl9NQVNLCQkJMHg3CisjZGVmaW5lCVBPV0VSX0FOQUNMS0NUUkxfSU5ESVZfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfRkFTVFNFVFRMSU5HCQkJKDEgPDwgMjYpCisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfUkFJU0VfUkVGCQkJCSgxIDw8IDI1KQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX1hUQUxfQkdSX0JJQVMJCQkoMSA8PCAyNCkKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9WQkdfQURKX01BU0sJCQkoMHg3IDw8IDIwKQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX1ZCR19BREpfT0ZGU0VUCQkJMjAKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9MT1dfUFdSCQkJCSgxIDw8IDE5KQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX0JJQVNfQ1RSTF9NQVNLCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9CSUFTX0NUUkxfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9WRERYVEFMX1RPX1ZEREQJCQkoMSA8PCAxNCkKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9BREpfQU5BCQkJCSgxIDw8IDEzKQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX0FESl9WQUcJCQkJKDEgPDwgMTIpCisjZGVmaW5lCVBPV0VSX1JFRkNUUkxfQU5BX1JFRlZBTF9NQVNLCQkJKDB4ZiA8PCA4KQorI2RlZmluZQlQT1dFUl9SRUZDVFJMX0FOQV9SRUZWQUxfT0ZGU0VUCQkJOAorI2RlZmluZQlQT1dFUl9SRUZDVFJMX1ZBR19WQUxfTUFTSwkJCSgweGYgPDwgNCkKKyNkZWZpbmUJUE9XRVJfUkVGQ1RSTF9WQUdfVkFMX09GRlNFVAkJCTQKKworI2VuZGlmCS8qIF9fTVgyOF9SRUdTX1BPV0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtcnRjLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJmZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtcnRjLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFJUQyBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTVgyOF9SRUdTX1JUQ19IX18KKyNkZWZpbmUgX19NWDI4X1JFR1NfUlRDX0hfXworCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0cnVjdCBteDI4X3J0Y19yZWdzIHsKKwlteDI4X3JlZyhod19ydGNfY3RybCkKKwlteDI4X3JlZyhod19ydGNfc3RhdCkKKwlteDI4X3JlZyhod19ydGNfbWlsbGlzZWNvbmRzKQorCW14MjhfcmVnKGh3X3J0Y19zZWNvbmRzKQorCW14MjhfcmVnKGh3X3J0Y19ydGNfYWxhcm0pCisJbXgyOF9yZWcoaHdfcnRjX3dhdGNoZG9nKQorCW14MjhfcmVnKGh3X3J0Y19wZXJzaXN0ZW50MCkKKwlteDI4X3JlZyhod19ydGNfcGVyc2lzdGVudDEpCisJbXgyOF9yZWcoaHdfcnRjX3BlcnNpc3RlbnQyKQorCW14MjhfcmVnKGh3X3J0Y19wZXJzaXN0ZW50MykKKwlteDI4X3JlZyhod19ydGNfcGVyc2lzdGVudDQpCisJbXgyOF9yZWcoaHdfcnRjX3BlcnNpc3RlbnQ1KQorCW14MjhfcmVnKGh3X3J0Y19kZWJ1ZykKKwlteDI4X3JlZyhod19ydGNfdmVyc2lvbikKK307CisjZW5kaWYKKworI2RlZmluZQlSVENfQ1RSTF9TRlRSU1QJCQkJKDEgPDwgMzEpCisjZGVmaW5lCVJUQ19DVFJMX0NMS0dBVEUJCQkoMSA8PCAzMCkKKyNkZWZpbmUJUlRDX0NUUkxfU1VQUFJFU1NfQ09QWTJBTkFMT0cJCSgxIDw8IDYpCisjZGVmaW5lCVJUQ19DVFJMX0ZPUkNFX1VQREFURQkJCSgxIDw8IDUpCisjZGVmaW5lCVJUQ19DVFJMX1dBVENIRE9HRU4JCQkoMSA8PCA0KQorI2RlZmluZQlSVENfQ1RSTF9PTkVNU0VDX0lSUQkJCSgxIDw8IDMpCisjZGVmaW5lCVJUQ19DVFJMX0FMQVJNX0lSUQkJCSgxIDw8IDIpCisjZGVmaW5lCVJUQ19DVFJMX09ORU1TRUNfSVJRX0VOCQkJKDEgPDwgMSkKKyNkZWZpbmUJUlRDX0NUUkxfQUxBUk1fSVJRX0VOCQkJKDEgPDwgMCkKKworI2RlZmluZQlSVENfU1RBVF9SVENfUFJFU0VOVAkJCSgxIDw8IDMxKQorI2RlZmluZQlSVENfU1RBVF9BTEFSTV9QUkVTRU5UCQkJKDEgPDwgMzApCisjZGVmaW5lCVJUQ19TVEFUX1dBVENIRE9HX1BSRVNFTlQJCSgxIDw8IDI5KQorI2RlZmluZQlSVENfU1RBVF9YVEFMMzIwMDBfUFJFU0VOVAkJKDEgPDwgMjgpCisjZGVmaW5lCVJUQ19TVEFUX1hUQUwzMjc2OF9QUkVTRU5UCQkoMSA8PCAyNykKKyNkZWZpbmUJUlRDX1NUQVRfU1RBTEVfUkVHU19NQVNLCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJUlRDX1NUQVRfU1RBTEVfUkVHU19PRkZTRVQJCTE2CisjZGVmaW5lCVJUQ19TVEFUX05FV19SRUdTX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZQlSVENfU1RBVF9ORVdfUkVHU19PRkZTRVQJCTgKKworI2RlZmluZQlSVENfTUlMTElTRUNPTkRTX0NPVU5UX01BU0sJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUlRDX01JTExJU0VDT05EU19DT1VOVF9PRkZTRVQJCTAKKworI2RlZmluZQlSVENfU0VDT05EU19DT1VOVF9NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlSVENfU0VDT05EU19DT1VOVF9PRkZTRVQJCTAKKworI2RlZmluZQlSVENfQUxBUk1fVkFMVUVfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUlRDX0FMQVJNX1ZBTFVFX09GRlNFVAkJCTAKKworI2RlZmluZQlSVENfV0FUQ0hET0dfQ09VTlRfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUlRDX1dBVENIRE9HX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BREpfUE9TTElNSVRCVUNLX01BU0sJKDB4ZiA8PCAyOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FESl9QT1NMSU1JVEJVQ0tfT0ZGU0VUCTI4CisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BREpfUE9TTElNSVRCVUNLXzJWODMJKDB4MCA8PCAyOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FESl9QT1NMSU1JVEJVQ0tfMlY3OAkoMHgxIDw8IDI4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfQURKX1BPU0xJTUlUQlVDS18yVjczCSgweDIgPDwgMjgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BREpfUE9TTElNSVRCVUNLXzJWNjgJKDB4MyA8PCAyOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FESl9QT1NMSU1JVEJVQ0tfMlY2MgkoMHg0IDw8IDI4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfQURKX1BPU0xJTUlUQlVDS18yVjU3CSgweDUgPDwgMjgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BREpfUE9TTElNSVRCVUNLXzJWNTIJKDB4NiA8PCAyOCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FESl9QT1NMSU1JVEJVQ0tfMlY0OAkoMHg3IDw8IDI4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfRVhURVJOQUxfUkVTRVQJCSgxIDw8IDIxKQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfVEhFUk1BTF9SRVNFVAkJKDEgPDwgMjApCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9FTkFCTEVfTFJBRENfUFdSVVAJKDEgPDwgMTgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BVVRPX1JFU1RBUlQJCSgxIDw8IDE3KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfRElTQUJMRV9QU1dJVENICQkoMSA8PCAxNikKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0xPV0VSQklBU19NQVNLCQkoMHhmIDw8IDE0KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfTE9XRVJCSUFTX09GRlNFVAkxNAorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfTE9XRVJCSUFTX05PTUlOQUwJKDB4MCA8PCAxNCkKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0xPV0VSQklBU19NMjVQCQkoMHgxIDw8IDE0KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfTE9XRVJCSUFTX001MFAJCSgweDMgPDwgMTQpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9ESVNBQkxFX1hUQUxPSwkJKDEgPDwgMTMpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9NU0VDX1JFU19NQVNLCQkoMHgxZiA8PCA4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfTVNFQ19SRVNfT0ZGU0VUCQk4CisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9NU0VDX1JFU18xTVMJCSgweDAxIDw8IDgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9NU0VDX1JFU18yTVMJCSgweDAyIDw8IDgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9NU0VDX1JFU180TVMJCSgweDA0IDw8IDgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9NU0VDX1JFU184TVMJCSgweDA4IDw8IDgpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9NU0VDX1JFU18xNk1TCQkoMHgxMCA8PCA4KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfQUxBUk1fV0FLRQkJKDEgPDwgNykKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX1hUQUwzMl9GUkVRCQkoMSA8PCA2KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfWFRBTDMyS0haX1BXUlVQCQkoMSA8PCA1KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfWFRBTDI0S0haX1BXUlVQCQkoMSA8PCA0KQorI2RlZmluZQlSVENfUEVSU0lTVEVOVDBfTENLX1NFQ1MJCSgxIDw8IDMpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9BTEFSTV9FTgkJKDEgPDwgMikKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQwX0FMQVJNX1dBS0VfRU4JCSgxIDw8IDEpCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMF9DTE9DS1NPVVJDRQkJKDEgPDwgMCkKKworI2RlZmluZQlSVENfUEVSU0lTVEVOVDFfR0VORVJBTF9NQVNLCQkweGZmZmZmZmZmCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMV9HRU5FUkFMX09GRlNFVAkJMAorI2RlZmluZQlSVENfUEVSU0lTVEVOVDFfR0VORVJBTF9PVEdfQUxUX1JPTEUJMHgwMDgwCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMV9HRU5FUkFMX09UR19ITlAJCTB4MDEwMAorI2RlZmluZQlSVENfUEVSU0lTVEVOVDFfR0VORVJBTF9VU0JfTFBNCQkweDAyMDAKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQxX0dFTkVSQUxfU0tJUF9DSEVDS0RJU0sJMHgwNDAwCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMV9HRU5FUkFMX1VTQl9CT09UX1BMQVlFUgkweDA4MDAKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQxX0dFTkVSQUxfRU5VTV81MDBNQV8yWAkweDEwMDAKKworI2RlZmluZQlSVENfUEVSU0lTVEVOVDJfR0VORVJBTF9NQVNLCQkweGZmZmZmZmZmCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UMl9HRU5FUkFMX09GRlNFVAkJMAorCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UM19HRU5FUkFMX01BU0sJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQzX0dFTkVSQUxfT0ZGU0VUCQkwCisKKyNkZWZpbmUJUlRDX1BFUlNJU1RFTlQ0X0dFTkVSQUxfTUFTSwkJMHhmZmZmZmZmZgorI2RlZmluZQlSVENfUEVSU0lTVEVOVDRfR0VORVJBTF9PRkZTRVQJCTAKKworI2RlZmluZQlSVENfUEVSU0lTVEVOVDVfR0VORVJBTF9NQVNLCQkweGZmZmZmZmZmCisjZGVmaW5lCVJUQ19QRVJTSVNURU5UNV9HRU5FUkFMX09GRlNFVAkJMAorCisjZGVmaW5lCVJUQ19ERUJVR19XQVRDSERPR19SRVNFVF9NQVNLCQkoMSA8PCAxKQorI2RlZmluZQlSVENfREVCVUdfV0FUQ0hET0dfUkVTRVQJCSgxIDw8IDApCisKKyNkZWZpbmUJUlRDX1ZFUlNJT05fTUFKT1JfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlSVENfVkVSU0lPTl9NQUpPUl9PRkZTRVQJCTI0CisjZGVmaW5lCVJUQ19WRVJTSU9OX01JTk9SX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJUlRDX1ZFUlNJT05fTUlOT1JfT0ZGU0VUCQkxNgorI2RlZmluZQlSVENfVkVSU0lPTl9TVEVQX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJUlRDX1ZFUlNJT05fU1RFUF9PRkZTRVQJCQkwCisKKyNlbmRpZgkvKiBfX01YMjhfUkVHU19SVENfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1zc3AuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXNzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMzg3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy1zc3AuaApAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggU1NQIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfU1NQX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19TU1BfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNvbW1vbi5oPgorCisjaWZuZGVmCV9fQVNTRU1CTFlfXworc3RydWN0IG14Mjhfc3NwX3JlZ3MgeworCW14MjhfcmVnKGh3X3NzcF9jdHJsMCkKKwlteDI4X3JlZyhod19zc3BfY21kMCkKKwlteDI4X3JlZyhod19zc3BfY21kMSkKKwlteDI4X3JlZyhod19zc3BfeGZlcl9zaXplKQorCW14MjhfcmVnKGh3X3NzcF9ibG9ja19zaXplKQorCW14MjhfcmVnKGh3X3NzcF9jb21wcmVmKQorCW14MjhfcmVnKGh3X3NzcF9jb21wbWFzaykKKwlteDI4X3JlZyhod19zc3BfdGltaW5nKQorCW14MjhfcmVnKGh3X3NzcF9jdHJsMSkKKwlteDI4X3JlZyhod19zc3BfZGF0YSkKKwlteDI4X3JlZyhod19zc3Bfc2RyZXNwMCkKKwlteDI4X3JlZyhod19zc3Bfc2RyZXNwMSkKKwlteDI4X3JlZyhod19zc3Bfc2RyZXNwMikKKwlteDI4X3JlZyhod19zc3Bfc2RyZXNwMykKKwlteDI4X3JlZyhod19zc3BfZGRyX2N0cmwpCisJbXgyOF9yZWcoaHdfc3NwX2RsbF9jdHJsKQorCW14MjhfcmVnKGh3X3NzcF9zdGF0dXMpCisJbXgyOF9yZWcoaHdfc3NwX2RsbF9zdHMpCisJbXgyOF9yZWcoaHdfc3NwX2RlYnVnKQorCW14MjhfcmVnKGh3X3NzcF92ZXJzaW9uKQorfTsKKyNlbmRpZgorCisjZGVmaW5lCVNTUF9DVFJMMF9TRlRSU1QJCQkoMSA8PCAzMSkKKyNkZWZpbmUJU1NQX0NUUkwwX0NMS0dBVEUJCQkoMSA8PCAzMCkKKyNkZWZpbmUJU1NQX0NUUkwwX1JVTgkJCQkoMSA8PCAyOSkKKyNkZWZpbmUJU1NQX0NUUkwwX1NESU9fSVJRX0NIRUNLCQkoMSA8PCAyOCkKKyNkZWZpbmUJU1NQX0NUUkwwX0xPQ0tfQ1MJCQkoMSA8PCAyNykKKyNkZWZpbmUJU1NQX0NUUkwwX0lHTk9SRV9DUkMJCQkoMSA8PCAyNikKKyNkZWZpbmUJU1NQX0NUUkwwX1JFQUQJCQkJKDEgPDwgMjUpCisjZGVmaW5lCVNTUF9DVFJMMF9EQVRBX1hGRVIJCQkoMSA8PCAyNCkKKyNkZWZpbmUJU1NQX0NUUkwwX0JVU19XSURUSF9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZQlTU1BfQ1RSTDBfQlVTX1dJRFRIX09GRlNFVAkJMjIKKyNkZWZpbmUJU1NQX0NUUkwwX0JVU19XSURUSF9PTkVfQklUCQkoMHgwIDw8IDIyKQorI2RlZmluZQlTU1BfQ1RSTDBfQlVTX1dJRFRIX0ZPVVJfQklUCQkoMHgxIDw8IDIyKQorI2RlZmluZQlTU1BfQ1RSTDBfQlVTX1dJRFRIX0VJR0hUX0JJVAkJKDB4MiA8PCAyMikKKyNkZWZpbmUJU1NQX0NUUkwwX1dBSVRfRk9SX0lSUQkJCSgxIDw8IDIxKQorI2RlZmluZQlTU1BfQ1RSTDBfV0FJVF9GT1JfQ01ECQkJKDEgPDwgMjApCisjZGVmaW5lCVNTUF9DVFJMMF9MT05HX1JFU1AJCQkoMSA8PCAxOSkKKyNkZWZpbmUJU1NQX0NUUkwwX0NIRUNLX1JFU1AJCQkoMSA8PCAxOCkKKyNkZWZpbmUJU1NQX0NUUkwwX0dFVF9SRVNQCQkJKDEgPDwgMTcpCisjZGVmaW5lCVNTUF9DVFJMMF9FTkFCTEUJCQkoMSA8PCAxNikKKworI2RlZmluZQlTU1BfQ01EMF9TT0ZUX1RFUk1JTkFURQkJCSgxIDw8IDI2KQorI2RlZmluZQlTU1BfQ01EMF9EQkxfREFUQV9SQVRFX0VOCQkoMSA8PCAyNSkKKyNkZWZpbmUJU1NQX0NNRDBfUFJJTV9CT09UX09QX0VOCQkoMSA8PCAyNCkKKyNkZWZpbmUJU1NQX0NNRDBfQk9PVF9BQ0tfRU4JCQkoMSA8PCAyMykKKyNkZWZpbmUJU1NQX0NNRDBfU0xPV19DTEtJTkdfRU4JCQkoMSA8PCAyMikKKyNkZWZpbmUJU1NQX0NNRDBfQ09OVF9DTEtJTkdfRU4JCQkoMSA8PCAyMSkKKyNkZWZpbmUJU1NQX0NNRDBfQVBQRU5EXzhDWUMJCQkoMSA8PCAyMCkKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01BU0sJCQkweGZmCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9PRkZTRVQJCQkwCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfR09fSURMRV9TVEFURQkJMHgwMAorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFTkRfT1BfQ09ORAkJMHgwMQorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0FMTF9TRU5EX0NJRAkJMHgwMgorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFVF9SRUxBVElWRV9BRERSCTB4MDMKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19TRVRfRFNSCQkweDA0CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfUkVTRVJWRURfNQkJMHgwNQorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NXSVRDSAkJCTB4MDYKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19TRUxFQ1RfREVTRUxFQ1RfQ0FSRAkweDA3CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfU0VORF9FWFRfQ1NECQkweDA4CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfU0VORF9DU0QJCTB4MDkKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19TRU5EX0NJRAkJMHgwYQorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1JFQURfREFUX1VOVElMX1NUT1AJMHgwYgorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NUT1BfVFJBTlNNSVNTSU9OCTB4MGMKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19TRU5EX1NUQVRVUwkJMHgwZAorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0JVU1RFU1RfUgkJMHgwZQorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0dPX0lOQUNUSVZFX1NUQVRFCTB4MGYKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19TRVRfQkxPQ0tMRU4JCTB4MTAKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19SRUFEX1NJTkdMRV9CTE9DSwkweDExCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfUkVBRF9NVUxUSVBMRV9CTE9DSwkweDEyCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfQlVTVEVTVF9XCQkweDEzCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfV1JJVEVfREFUX1VOVElMX1NUT1AJMHgxNAorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFVF9CTE9DS19DT1VOVAkweDE3CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfV1JJVEVfQkxPQ0sJCTB4MTgKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19XUklURV9NVUxUSVBMRV9CTE9DSwkweDE5CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfUFJPR1JBTV9DSUQJCTB4MWEKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19QUk9HUkFNX0NTRAkJMHgxYgorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX1NFVF9XUklURV9QUk9UCQkweDFjCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9NTUNfQ0xSX1dSSVRFX1BST1QJCTB4MWQKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19TRU5EX1dSSVRFX1BST1QJMHgxZQorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0VSQVNFX0dST1VQX1NUQVJUCTB4MjMKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19FUkFTRV9HUk9VUF9FTkQJMHgyNAorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0VSQVNFCQkJMHgyNgorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0ZBU1RfSU8JCTB4MjcKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19HT19JUlFfU1RBVEUJCTB4MjgKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19MT0NLX1VOTE9DSwkJMHgyYQorI2RlZmluZQlTU1BfQ01EMF9DTURfTU1DX0FQUF9DTUQJCTB4MzcKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX01NQ19HRU5fQ01ECQkweDM4CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9HT19JRExFX1NUQVRFCQkweDAwCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9BTExfU0VORF9DSUQJCTB4MDIKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NFTkRfUkVMQVRJVkVfQUREUgkweDAzCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9TRVRfRFNSCQkJMHgwNAorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfSU9fU0VORF9PUF9DT05ECQkweDA1CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9TRUxFQ1RfREVTRUxFQ1RfQ0FSRAkweDA3CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9TRU5EX0NTRAkJMHgwOQorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfU0VORF9DSUQJCTB4MGEKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NUT1BfVFJBTlNNSVNTSU9OCTB4MGMKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NFTkRfU1RBVFVTCQkweDBkCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9HT19JTkFDVElWRV9TVEFURQkweDBmCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9TRVRfQkxPQ0tMRU4JCTB4MTAKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1JFQURfU0lOR0xFX0JMT0NLCTB4MTEKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1JFQURfTVVMVElQTEVfQkxPQ0sJMHgxMgorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfV1JJVEVfQkxPQ0sJCTB4MTgKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1dSSVRFX01VTFRJUExFX0JMT0NLCTB4MTkKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1BST0dSQU1fQ1NECQkweDFiCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9TRVRfV1JJVEVfUFJPVAkJMHgxYworI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfQ0xSX1dSSVRFX1BST1QJCTB4MWQKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX1NFTkRfV1JJVEVfUFJPVAkJMHgxZQorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfRVJBU0VfV1JfQkxLX1NUQVJUCTB4MjAKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0VSQVNFX1dSX0JMS19FTkQJMHgyMQorI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfRVJBU0VfR1JPVVBfU1RBUlQJMHgyMworI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfRVJBU0VfR1JPVVBfRU5ECQkweDI0CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9FUkFTRQkJCTB4MjYKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0xPQ0tfVU5MT0NLCQkweDJhCisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9JT19SV19ESVJFQ1QJCTB4MzQKKyNkZWZpbmUJU1NQX0NNRDBfQ01EX1NEX0lPX1JXX0VYVEVOREVECQkweDM1CisjZGVmaW5lCVNTUF9DTUQwX0NNRF9TRF9BUFBfQ01ECQkJMHgzNworI2RlZmluZQlTU1BfQ01EMF9DTURfU0RfR0VOX0NNRAkJCTB4MzgKKworI2RlZmluZQlTU1BfQ01EMV9DTURfQVJHX01BU0sJCQkweGZmZmZmZmZmCisjZGVmaW5lCVNTUF9DTUQxX0NNRF9BUkdfT0ZGU0VUCQkJMAorCisjZGVmaW5lCVNTUF9YRkVSX1NJWkVfWEZFUl9DT1VOVF9NQVNLCQkweGZmZmZmZmZmCisjZGVmaW5lCVNTUF9YRkVSX1NJWkVfWEZFUl9DT1VOVF9PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfQkxPQ0tfU0laRV9CTE9DS19DT1VOVF9NQVNLCQkoMHhmZmZmZmYgPDwgNCkKKyNkZWZpbmUJU1NQX0JMT0NLX1NJWkVfQkxPQ0tfQ09VTlRfT0ZGU0VUCTQKKyNkZWZpbmUJU1NQX0JMT0NLX1NJWkVfQkxPQ0tfU0laRV9NQVNLCQkweGYKKyNkZWZpbmUJU1NQX0JMT0NLX1NJWkVfQkxPQ0tfU0laRV9PRkZTRVQJMAorCisjZGVmaW5lCVNTUF9DT01QUkVGX1JFRkVSRU5DRV9NQVNLCQkweGZmZmZmZmZmCisjZGVmaW5lCVNTUF9DT01QUkVGX1JFRkVSRU5DRV9PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfQ09NUE1BU0tfTUFTS19NQVNLCQkJMHhmZmZmZmZmZgorI2RlZmluZQlTU1BfQ09NUE1BU0tfTUFTS19PRkZTRVQJCTAKKworI2RlZmluZQlTU1BfVElNSU5HX1RJTUVPVVRfTUFTSwkJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lCVNTUF9USU1JTkdfVElNRU9VVF9PRkZTRVQJCTE2CisjZGVmaW5lCVNTUF9USU1JTkdfQ0xPQ0tfRElWSURFX01BU0sJCSgweGZmIDw8IDgpCisjZGVmaW5lCVNTUF9USU1JTkdfQ0xPQ0tfRElWSURFX09GRlNFVAkJOAorI2RlZmluZQlTU1BfVElNSU5HX0NMT0NLX1JBVEVfTUFTSwkJMHhmZgorI2RlZmluZQlTU1BfVElNSU5HX0NMT0NLX1JBVEVfT0ZGU0VUCQkwCisKKyNkZWZpbmUJU1NQX0NUUkwxX1NESU9fSVJRCQkJKDEgPDwgMzEpCisjZGVmaW5lCVNTUF9DVFJMMV9TRElPX0lSUV9FTgkJCSgxIDw8IDMwKQorI2RlZmluZQlTU1BfQ1RSTDFfUkVTUF9FUlJfSVJRCQkJKDEgPDwgMjkpCisjZGVmaW5lCVNTUF9DVFJMMV9SRVNQX0VSUl9JUlFfRU4JCSgxIDw8IDI4KQorI2RlZmluZQlTU1BfQ1RSTDFfUkVTUF9USU1FT1VUX0lSUQkJKDEgPDwgMjcpCisjZGVmaW5lCVNTUF9DVFJMMV9SRVNQX1RJTUVPVVRfSVJRX0VOCQkoMSA8PCAyNikKKyNkZWZpbmUJU1NQX0NUUkwxX0RBVEFfVElNRU9VVF9JUlEJCSgxIDw8IDI1KQorI2RlZmluZQlTU1BfQ1RSTDFfREFUQV9USU1FT1VUX0lSUV9FTgkJKDEgPDwgMjQpCisjZGVmaW5lCVNTUF9DVFJMMV9EQVRBX0NSQ19JUlEJCQkoMSA8PCAyMykKKyNkZWZpbmUJU1NQX0NUUkwxX0RBVEFfQ1JDX0lSUV9FTgkJKDEgPDwgMjIpCisjZGVmaW5lCVNTUF9DVFJMMV9GSUZPX1VOREVSUlVOX0lSUQkJKDEgPDwgMjEpCisjZGVmaW5lCVNTUF9DVFJMMV9GSUZPX1VOREVSUlVOX0VOCQkoMSA8PCAyMCkKKyNkZWZpbmUJU1NQX0NUUkwxX0NFQVRBX0NDU19FUlJfSVJRCQkoMSA8PCAxOSkKKyNkZWZpbmUJU1NQX0NUUkwxX0NFQVRBX0NDU19FUlJfSVJRX0VOCQkoMSA8PCAxOCkKKyNkZWZpbmUJU1NQX0NUUkwxX1JFQ1ZfVElNRU9VVF9JUlEJCSgxIDw8IDE3KQorI2RlZmluZQlTU1BfQ1RSTDFfUkVDVl9USU1FT1VUX0lSUV9FTgkJKDEgPDwgMTYpCisjZGVmaW5lCVNTUF9DVFJMMV9GSUZPX09WRVJSVU5fSVJRCQkoMSA8PCAxNSkKKyNkZWZpbmUJU1NQX0NUUkwxX0ZJRk9fT1ZFUlJVTl9JUlFfRU4JCSgxIDw8IDE0KQorI2RlZmluZQlTU1BfQ1RSTDFfRE1BX0VOQUJMRQkJCSgxIDw8IDEzKQorI2RlZmluZQlTU1BfQ1RSTDFfQ0VBVEFfQ0NTX0VSUl9FTgkJKDEgPDwgMTIpCisjZGVmaW5lCVNTUF9DVFJMMV9TTEFWRV9PVVRfRElTQUJMRQkJKDEgPDwgMTEpCisjZGVmaW5lCVNTUF9DVFJMMV9QSEFTRQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUJU1NQX0NUUkwxX1BPTEFSSVRZCQkJKDEgPDwgOSkKKyNkZWZpbmUJU1NQX0NUUkwxX1NMQVZFX01PREUJCQkoMSA8PCA4KQorI2RlZmluZQlTU1BfQ1RSTDFfV09SRF9MRU5HVEhfTUFTSwkJKDB4ZiA8PCA0KQorI2RlZmluZQlTU1BfQ1RSTDFfV09SRF9MRU5HVEhfT0ZGU0VUCQk0CisjZGVmaW5lCVNTUF9DVFJMMV9XT1JEX0xFTkdUSF9SRVNFUlZFRDAJCSgweDAgPDwgNCkKKyNkZWZpbmUJU1NQX0NUUkwxX1dPUkRfTEVOR1RIX1JFU0VSVkVEMQkJKDB4MSA8PCA0KQorI2RlZmluZQlTU1BfQ1RSTDFfV09SRF9MRU5HVEhfUkVTRVJWRUQyCQkoMHgyIDw8IDQpCisjZGVmaW5lCVNTUF9DVFJMMV9XT1JEX0xFTkdUSF9GT1VSX0JJVFMJCSgweDMgPDwgNCkKKyNkZWZpbmUJU1NQX0NUUkwxX1dPUkRfTEVOR1RIX0VJR0hUX0JJVFMJKDB4NyA8PCA0KQorI2RlZmluZQlTU1BfQ1RSTDFfV09SRF9MRU5HVEhfU0lYVEVFTl9CSVRTCSgweGYgPDwgNCkKKyNkZWZpbmUJU1NQX0NUUkwxX1NTUF9NT0RFX01BU0sJCQkweGYKKyNkZWZpbmUJU1NQX0NUUkwxX1NTUF9NT0RFX09GRlNFVAkJMAorI2RlZmluZQlTU1BfQ1RSTDFfU1NQX01PREVfU1BJCQkJMHgwCisjZGVmaW5lCVNTUF9DVFJMMV9TU1BfTU9ERV9TU0kJCQkweDEKKyNkZWZpbmUJU1NQX0NUUkwxX1NTUF9NT0RFX1NEX01NQwkJMHgzCisjZGVmaW5lCVNTUF9DVFJMMV9TU1BfTU9ERV9NUwkJCTB4NAorCisjZGVmaW5lCVNTUF9EQVRBX0RBVEFfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJU1NQX0RBVEFfREFUQV9PRkZTRVQJCQkwCisKKyNkZWZpbmUJU1NQX1NEUkVTUDBfUkVTUDBfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJU1NQX1NEUkVTUDBfUkVTUDBfT0ZGU0VUCQkwCisKKyNkZWZpbmUJU1NQX1NEUkVTUDFfUkVTUDFfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJU1NQX1NEUkVTUDFfUkVTUDFfT0ZGU0VUCQkwCisKKyNkZWZpbmUJU1NQX1NEUkVTUDJfUkVTUDJfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJU1NQX1NEUkVTUDJfUkVTUDJfT0ZGU0VUCQkwCisKKyNkZWZpbmUJU1NQX1NEUkVTUDNfUkVTUDNfTUFTSwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJU1NQX1NEUkVTUDNfUkVTUDNfT0ZGU0VUCQkwCisKKyNkZWZpbmUJU1NQX0REUl9DVFJMX0RNQV9CVVJTVF9UWVBFX01BU0sJKDB4MyA8PCAzMCkKKyNkZWZpbmUJU1NQX0REUl9DVFJMX0RNQV9CVVJTVF9UWVBFX09GRlNFVAkzMAorI2RlZmluZQlTU1BfRERSX0NUUkxfTklCQkxFX1BPUwkJCSgxIDw8IDEpCisjZGVmaW5lCVNTUF9ERFJfQ1RSTF9UWENMS19ERUxBWV9UWVBFCQkoMSA8PCAwKQorCisjZGVmaW5lCVNTUF9ETExfQ1RSTF9SRUZfVVBEQVRFX0lOVF9NQVNLCSgweGYgPDwgMjgpCisjZGVmaW5lCVNTUF9ETExfQ1RSTF9SRUZfVVBEQVRFX0lOVF9PRkZTRVQJMjgKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1NMVl9VUERBVEVfSU5UX01BU0sJKDB4ZmYgPDwgMjApCisjZGVmaW5lCVNTUF9ETExfQ1RSTF9TTFZfVVBEQVRFX0lOVF9PRkZTRVQJMjAKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1NMVl9PVkVSUklERV9WQUxfTUFTSwkoMHgzZiA8PCAxMCkKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1NMVl9PVkVSUklERV9WQUxfT0ZGU0VUCTEwCisjZGVmaW5lCVNTUF9ETExfQ1RSTF9TTFZfT1ZFUlJJREUJCSgxIDw8IDkpCisjZGVmaW5lCVNTUF9ETExfQ1RSTF9HQVRFX1VQREFURQkJKDEgPDwgNykKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1NMVl9ETFlfVEFSR0VUX01BU0sJKDB4ZiA8PCAzKQorI2RlZmluZQlTU1BfRExMX0NUUkxfU0xWX0RMWV9UQVJHRVRfT0ZGU0VUCTMKKyNkZWZpbmUJU1NQX0RMTF9DVFJMX1NMVl9GT1JDRV9VUEQJCSgxIDw8IDIpCisjZGVmaW5lCVNTUF9ETExfQ1RSTF9SRVNFVAkJCSgxIDw8IDEpCisjZGVmaW5lCVNTUF9ETExfQ1RSTF9FTkFCTEUJCQkoMSA8PCAwKQorCisjZGVmaW5lCVNTUF9TVEFUVVNfUFJFU0VOVAkJCSgxIDw8IDMxKQorI2RlZmluZQlTU1BfU1RBVFVTX01TX1BSRVNFTlQJCQkoMSA8PCAzMCkKKyNkZWZpbmUJU1NQX1NUQVRVU19TRF9QUkVTRU5UCQkJKDEgPDwgMjkpCisjZGVmaW5lCVNTUF9TVEFUVVNfQ0FSRF9ERVRFQ1QJCQkoMSA8PCAyOCkKKyNkZWZpbmUJU1NQX1NUQVRVU19ETUFCVVJTVAkJCSgxIDw8IDIyKQorI2RlZmluZQlTU1BfU1RBVFVTX0RNQVNFTlNFCQkJKDEgPDwgMjEpCisjZGVmaW5lCVNTUF9TVEFUVVNfRE1BVEVSTQkJCSgxIDw8IDIwKQorI2RlZmluZQlTU1BfU1RBVFVTX0RNQVJFUQkJCSgxIDw8IDE5KQorI2RlZmluZQlTU1BfU1RBVFVTX0RNQUVORAkJCSgxIDw8IDE4KQorI2RlZmluZQlTU1BfU1RBVFVTX1NESU9fSVJRCQkJKDEgPDwgMTcpCisjZGVmaW5lCVNTUF9TVEFUVVNfUkVTUF9DUkNfRVJSCQkJKDEgPDwgMTYpCisjZGVmaW5lCVNTUF9TVEFUVVNfUkVTUF9FUlIJCQkoMSA8PCAxNSkKKyNkZWZpbmUJU1NQX1NUQVRVU19SRVNQX1RJTUVPVVQJCQkoMSA8PCAxNCkKKyNkZWZpbmUJU1NQX1NUQVRVU19EQVRBX0NSQ19FUlIJCQkoMSA8PCAxMykKKyNkZWZpbmUJU1NQX1NUQVRVU19USU1FT1VUCQkJKDEgPDwgMTIpCisjZGVmaW5lCVNTUF9TVEFUVVNfUkVDVl9USU1FT1VUX1NUQVQJCSgxIDw8IDExKQorI2RlZmluZQlTU1BfU1RBVFVTX0NFQVRBX0NDU19FUlIJCSgxIDw8IDEwKQorI2RlZmluZQlTU1BfU1RBVFVTX0ZJRk9fT1ZSRkxXCQkJKDEgPDwgOSkKKyNkZWZpbmUJU1NQX1NUQVRVU19GSUZPX0ZVTEwJCQkoMSA8PCA4KQorI2RlZmluZQlTU1BfU1RBVFVTX0ZJRk9fRU1QVFkJCQkoMSA8PCA1KQorI2RlZmluZQlTU1BfU1RBVFVTX0ZJRk9fVU5EUkZMVwkJCSgxIDw8IDQpCisjZGVmaW5lCVNTUF9TVEFUVVNfQ01EX0JVU1kJCQkoMSA8PCAzKQorI2RlZmluZQlTU1BfU1RBVFVTX0RBVEFfQlVTWQkJCSgxIDw8IDIpCisjZGVmaW5lCVNTUF9TVEFUVVNfQlVTWQkJCQkoMSA8PCAwKQorCisjZGVmaW5lCVNTUF9ETExfU1RTX1JFRl9TRUxfTUFTSwkJKDB4M2YgPDwgOCkKKyNkZWZpbmUJU1NQX0RMTF9TVFNfUkVGX1NFTF9PRkZTRVQJCTgKKyNkZWZpbmUJU1NQX0RMTF9TVFNfU0xWX1NFTF9NQVNLCQkoMHgzZiA8PCAyKQorI2RlZmluZQlTU1BfRExMX1NUU19TTFZfU0VMX09GRlNFVAkJMgorI2RlZmluZQlTU1BfRExMX1NUU19SRUZfTE9DSwkJCSgxIDw8IDEpCisjZGVmaW5lCVNTUF9ETExfU1RTX1NMVl9MT0NLCQkJKDEgPDwgMCkKKworI2RlZmluZQlTU1BfREVCVUdfREFUQUNSQ19FUlJfTUFTSwkJKDB4ZiA8PCAyOCkKKyNkZWZpbmUJU1NQX0RFQlVHX0RBVEFDUkNfRVJSX09GRlNFVAkJMjgKKyNkZWZpbmUJU1NQX0RFQlVHX0RBVEFfU1RBTEwJCQkoMSA8PCAyNykKKyNkZWZpbmUJU1NQX0RFQlVHX0RBVF9TTV9NQVNLCQkJKDB4NyA8PCAyNCkKKyNkZWZpbmUJU1NQX0RFQlVHX0RBVF9TTV9PRkZTRVQJCQkyNAorI2RlZmluZQlTU1BfREVCVUdfREFUX1NNX0RTTV9JRExFCQkoMHgwIDw8IDI0KQorI2RlZmluZQlTU1BfREVCVUdfREFUX1NNX0RTTV9XT1JECQkoMHgyIDw8IDI0KQorI2RlZmluZQlTU1BfREVCVUdfREFUX1NNX0RTTV9DUkMxCQkoMHgzIDw8IDI0KQorI2RlZmluZQlTU1BfREVCVUdfREFUX1NNX0RTTV9DUkMyCQkoMHg0IDw8IDI0KQorI2RlZmluZQlTU1BfREVCVUdfREFUX1NNX0RTTV9FTkQJCSgweDUgPDwgMjQpCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01BU0sJCQkoMHhmIDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9PRkZTRVQJCTIwCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfSURMRQkJKDB4MCA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19DS09OCQkoMHgxIDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX0JTMQkJKDB4MiA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19UUEMJCSgweDMgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfQlMyCQkoMHg0IDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX0hEU0hLCQkoMHg1IDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX0JTMwkJKDB4NiA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19SVwkJKDB4NyA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX01TVEtfU01fTVNUS19DUkMxCQkoMHg4IDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX0NSQzIJCSgweDkgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfQlMwCQkoMHhhIDw8IDIwKQorI2RlZmluZQlTU1BfREVCVUdfTVNUS19TTV9NU1RLX0VORDEJCSgweGIgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfRU5EMlcJCSgweGMgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfRU5EMlIJCSgweGQgPDwgMjApCisjZGVmaW5lCVNTUF9ERUJVR19NU1RLX1NNX01TVEtfRE9ORQkJKDB4ZSA8PCAyMCkKKyNkZWZpbmUJU1NQX0RFQlVHX0NNRF9PRQkJCSgxIDw8IDE5KQorI2RlZmluZQlTU1BfREVCVUdfRE1BX1NNX01BU0sJCQkoMHg3IDw8IDE2KQorI2RlZmluZQlTU1BfREVCVUdfRE1BX1NNX09GRlNFVAkJCTE2CisjZGVmaW5lCVNTUF9ERUJVR19ETUFfU01fRE1BX0lETEUJCSgweDAgPDwgMTYpCisjZGVmaW5lCVNTUF9ERUJVR19ETUFfU01fRE1BX0RNQVJFUQkJKDB4MSA8PCAxNikKKyNkZWZpbmUJU1NQX0RFQlVHX0RNQV9TTV9ETUFfRE1BQUNLCQkoMHgyIDw8IDE2KQorI2RlZmluZQlTU1BfREVCVUdfRE1BX1NNX0RNQV9TVEFMTAkJKDB4MyA8PCAxNikKKyNkZWZpbmUJU1NQX0RFQlVHX0RNQV9TTV9ETUFfQlVTWQkJKDB4NCA8PCAxNikKKyNkZWZpbmUJU1NQX0RFQlVHX0RNQV9TTV9ETUFfRE9ORQkJKDB4NSA8PCAxNikKKyNkZWZpbmUJU1NQX0RFQlVHX0RNQV9TTV9ETUFfQ09VTlQJCSgweDYgPDwgMTYpCisjZGVmaW5lCVNTUF9ERUJVR19NTUNfU01fTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lCVNTUF9ERUJVR19NTUNfU01fT0ZGU0VUCQkJMTIKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfSURMRQkJKDB4MCA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfQ01ECQkoMHgxIDw8IDEyKQorI2RlZmluZQlTU1BfREVCVUdfTU1DX1NNX01NQ19UUkMJCSgweDIgPDwgMTIpCisjZGVmaW5lCVNTUF9ERUJVR19NTUNfU01fTU1DX1JFU1AJCSgweDMgPDwgMTIpCisjZGVmaW5lCVNTUF9ERUJVR19NTUNfU01fTU1DX1JQUlgJCSgweDQgPDwgMTIpCisjZGVmaW5lCVNTUF9ERUJVR19NTUNfU01fTU1DX1RYCQkJKDB4NSA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfQ1RPSwkJKDB4NiA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfUlgJCQkoMHg3IDw8IDEyKQorI2RlZmluZQlTU1BfREVCVUdfTU1DX1NNX01NQ19DQ1MJCSgweDggPDwgMTIpCisjZGVmaW5lCVNTUF9ERUJVR19NTUNfU01fTU1DX1BVUAkJKDB4OSA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX01NQ19TTV9NTUNfV0FJVAkJKDB4YSA8PCAxMikKKyNkZWZpbmUJU1NQX0RFQlVHX0NNRF9TTV9NQVNLCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJU1NQX0RFQlVHX0NNRF9TTV9PRkZTRVQJCQkxMAorI2RlZmluZQlTU1BfREVCVUdfQ01EX1NNX0NTTV9JRExFCQkoMHgwIDw8IDEwKQorI2RlZmluZQlTU1BfREVCVUdfQ01EX1NNX0NTTV9JTkRFWAkJKDB4MSA8PCAxMCkKKyNkZWZpbmUJU1NQX0RFQlVHX0NNRF9TTV9DU01fQVJHCQkoMHgyIDw8IDEwKQorI2RlZmluZQlTU1BfREVCVUdfQ01EX1NNX0NTTV9DUkMJCSgweDMgPDwgMTApCisjZGVmaW5lCVNTUF9ERUJVR19TU1BfQ01ECQkJKDEgPDwgOSkKKyNkZWZpbmUJU1NQX0RFQlVHX1NTUF9SRVNQCQkJKDEgPDwgOCkKKyNkZWZpbmUJU1NQX0RFQlVHX1NTUF9SWERfTUFTSwkJCTB4ZmYKKyNkZWZpbmUJU1NQX0RFQlVHX1NTUF9SWERfT0ZGU0VUCQkwCisKKyNkZWZpbmUJU1NQX1ZFUlNJT05fTUFKT1JfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZQlTU1BfVkVSU0lPTl9NQUpPUl9PRkZTRVQJCTI0CisjZGVmaW5lCVNTUF9WRVJTSU9OX01JTk9SX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJU1NQX1ZFUlNJT05fTUlOT1JfT0ZGU0VUCQkxNgorI2RlZmluZQlTU1BfVkVSU0lPTl9TVEVQX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJU1NQX1ZFUlNJT05fU1RFUF9PRkZTRVQJCQkwCisKKyNlbmRpZiAvKiBfX01YMjhfUkVHU19TU1BfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy10aW1yb3QuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXRpbXJvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTQxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy10aW1yb3QuaApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggVElNUk9UIFJlZ2lzdGVyIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIExUSUI6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NWDI4X1JFR1NfVElNUk9UX0hfXworI2RlZmluZSBfX01YMjhfUkVHU19USU1ST1RfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNvbW1vbi5oPgorCisjaWZuZGVmCV9fQVNTRU1CTFlfXworc3RydWN0IG14MjhfdGltcm90X3JlZ3MgeworCW14MjhfcmVnKGh3X3RpbXJvdF9yb3RjdHJsKQorCW14MjhfcmVnKGh3X3RpbXJvdF9yb3Rjb3VudCkKKwlteDI4X3JlZyhod190aW1yb3RfdGltY3RybDApCisJbXgyOF9yZWcoaHdfdGltcm90X3J1bm5pbmdfY291bnQwKQorCW14MjhfcmVnKGh3X3RpbXJvdF9maXhlZF9jb3VudDApCisJbXgyOF9yZWcoaHdfdGltcm90X21hdGNoX2NvdW50MCkKKwlteDI4X3JlZyhod190aW1yb3RfdGltY3RybDEpCisJbXgyOF9yZWcoaHdfdGltcm90X3J1bm5pbmdfY291bnQxKQorCW14MjhfcmVnKGh3X3RpbXJvdF9maXhlZF9jb3VudDEpCisJbXgyOF9yZWcoaHdfdGltcm90X21hdGNoX2NvdW50MSkKKwlteDI4X3JlZyhod190aW1yb3RfdGltY3RybDIpCisJbXgyOF9yZWcoaHdfdGltcm90X3J1bm5pbmdfY291bnQyKQorCW14MjhfcmVnKGh3X3RpbXJvdF9maXhlZF9jb3VudDIpCisJbXgyOF9yZWcoaHdfdGltcm90X21hdGNoX2NvdW50MikKKwlteDI4X3JlZyhod190aW1yb3RfdGltY3RybDMpCisJbXgyOF9yZWcoaHdfdGltcm90X3J1bm5pbmdfY291bnQzKQorCW14MjhfcmVnKGh3X3RpbXJvdF9maXhlZF9jb3VudDMpCisJbXgyOF9yZWcoaHdfdGltcm90X21hdGNoX2NvdW50MykKKwlteDI4X3JlZyhod190aW1yb3RfdmVyc2lvbikKK307CisjZW5kaWYKKworI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRlRSU1QJCQkJKDEgPDwgMzEpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX0NMS0dBVEUJCQkJKDEgPDwgMzApCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1JPVEFSWV9QUkVTRU5UCQkJKDEgPDwgMjkpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1RJTTNfUFJFU0VOVAkJCSgxIDw8IDI4KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9USU0yX1BSRVNFTlQJCQkoMSA8PCAyNykKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfVElNMV9QUkVTRU5UCQkJKDEgPDwgMjYpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1RJTTBfUFJFU0VOVAkJCSgxIDw8IDI1KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TVEFURV9NQVNLCQkJKDB4NyA8PCAyMikKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU1RBVEVfT0ZGU0VUCQkJMjIKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfRElWSURFUl9NQVNLCQkJKDB4M2YgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX0RJVklERVJfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfUkVMQVRJVkUJCQkJKDEgPDwgMTIpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX09WRVJTQU1QTEVfTUFTSwkJCSgweDMgPDwgMTApCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX09WRVJTQU1QTEVfT0ZGU0VUCQkxMAorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9PVkVSU0FNUExFXzhYCQkJKDB4MCA8PCAxMCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfT1ZFUlNBTVBMRV80WAkJCSgweDEgPDwgMTApCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX09WRVJTQU1QTEVfMlgJCQkoMHgyIDw8IDEwKQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9PVkVSU0FNUExFXzFYCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfUE9MQVJJVFlfQgkJCSgxIDw8IDkpCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1BPTEFSSVRZX0EJCQkoMSA8PCA4KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQl9PRkZTRVQJCQk0CisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9CX05FVkVSX1RJQ0sJCSgweDAgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUFdNMAkJCSgweDEgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUFdNMQkJCSgweDIgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUFdNMgkJCSgweDMgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUFdNMwkJCSgweDQgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUFdNNAkJCSgweDUgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUFdNNQkJCSgweDYgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUFdNNgkJCSgweDcgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUFdNNwkJCSgweDggPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUk9UQVJZQQkJCSgweDkgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0JfUk9UQVJZQgkJCSgweGEgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0FfTUFTSwkJCTB4ZgorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9PRkZTRVQJCQkwCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX05FVkVSX1RJQ0sJCTB4MAorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9QV00wCQkJMHgxCisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX1BXTTEJCQkweDIKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0FfUFdNMgkJCTB4MworI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9QV00zCQkJMHg0CisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX1BXTTQJCQkweDUKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0FfUFdNNQkJCTB4NgorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9QV002CQkJMHg3CisjZGVmaW5lCVRJTVJPVF9ST1RDVFJMX1NFTEVDVF9BX1BXTTcJCQkweDgKKyNkZWZpbmUJVElNUk9UX1JPVENUUkxfU0VMRUNUX0FfUk9UQVJZQQkJCTB4OQorI2RlZmluZQlUSU1ST1RfUk9UQ1RSTF9TRUxFQ1RfQV9ST1RBUllCCQkJMHhhCisKKyNkZWZpbmUJVElNUk9UX1JPVENPVU5UX1VQRE9XTl9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCVRJTVJPVF9ST1RDT1VOVF9VUERPV05fT0ZGU0VUCQkJMAorCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9JUlEJCQkJKDEgPDwgMTUpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9JUlFfRU4JCQkJKDEgPDwgMTQpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9NQVRDSF9NT0RFCQkJKDEgPDwgMTEpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9QT0xBUklUWQkJCSgxIDw8IDgpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9VUERBVEUJCQkJKDEgPDwgNykKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1JFTE9BRAkJCQkoMSA8PCA2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fUFJFU0NBTEVfTUFTSwkJCSgweDMgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1BSRVNDQUxFX09GRlNFVAkJCTQKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1BSRVNDQUxFX0RJVl9CWV8xCQkoMHgwIDw8IDQpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9QUkVTQ0FMRV9ESVZfQllfMgkJKDB4MSA8PCA0KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fUFJFU0NBTEVfRElWX0JZXzQJCSgweDIgPDwgNCkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1BSRVNDQUxFX0RJVl9CWV84CQkoMHgzIDw8IDQpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfTUFTSwkJCTB4ZgorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX09GRlNFVAkJCTAKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9ORVZFUl9USUNLCQkweDAKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9QV00wCQkJMHgxCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfUFdNMQkJCTB4MgorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX1BXTTIJCQkweDMKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9QV00zCQkJMHg0CisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfUFdNNAkJCTB4NQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX1BXTTUJCQkweDYKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9QV002CQkJMHg3CisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfUFdNNwkJCTB4OAorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUX1JPVEFSWUEJCQkweDkKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF9ST1RBUllCCQkJMHhhCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfMzJLSFpfWFRBTAkJMHhiCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfOEtIWl9YVEFMCQkweGMKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkxuX1NFTEVDVF80S0haX1hUQUwJCTB4ZAorI2RlZmluZQlUSU1ST1RfVElNQ1RSTG5fU0VMRUNUXzFLSFpfWFRBTAkJMHhlCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMbl9TRUxFQ1RfVElDS19BTFdBWVMJCTB4ZgorCisjZGVmaW5lCVRJTVJPVF9SVU5OSU5HX0NPVU5Ubl9SVU5OSU5HX0NPVU5UX01BU0sJMHhmZmZmZmZmZgorI2RlZmluZQlUSU1ST1RfUlVOTklOR19DT1VOVG5fUlVOTklOR19DT1VOVF9PRkZTRVQJMAorCisjZGVmaW5lCVRJTVJPVF9GSVhFRF9DT1VOVG5fRklYRURfQ09VTlRfTUFTSwkJMHhmZmZmZmZmZgorI2RlZmluZQlUSU1ST1RfRklYRURfQ09VTlRuX0ZJWEVEX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCVRJTVJPVF9NQVRDSF9DT1VOVG5fTUFUQ0hfQ09VTlRfTUFTSwkJMHhmZmZmZmZmZgorI2RlZmluZQlUSU1ST1RfTUFUQ0hfQ09VTlRuX01BVENIX0NPVU5UX09GRlNFVAkJMAorCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9NQVNLCQkoMHhmIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfT0ZGU0VUCQkxNgorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfTkVWRVJfVElDSwkJKDB4MCA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMX1BXTTAJCSgweDEgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9QV00xCQkoMHgyIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfUFdNMgkJKDB4MyA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMX1BXTTMJCSgweDQgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9QV000CQkoMHg1IDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfUFdNNQkJKDB4NiA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMX1BXTTYJCSgweDcgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF9QV003CQkoMHg4IDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfUk9UQVJZQQkJKDB4OSA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1RJTUNUUkwzX1RFU1RfU0lHTkFMX1JPVEFSWUIJCSgweGEgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19URVNUX1NJR05BTF8zMktIWl9YVEFMCQkoMHhiIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfOEtIWl9YVEFMCQkoMHhjIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfNEtIWl9YVEFMCQkoMHhkIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfMUtIWl9YVEFMCQkoMHhlIDw8IDE2KQorI2RlZmluZQlUSU1ST1RfVElNQ1RSTDNfVEVTVF9TSUdOQUxfVElDS19BTFdBWVMJCSgweGYgPDwgMTYpCisjZGVmaW5lCVRJTVJPVF9USU1DVFJMM19EVVRZX0NZQ0xFCQkJKDEgPDwgOSkKKworI2RlZmluZQlUSU1ST1RfVkVSU0lPTl9NQUpPUl9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCVRJTVJPVF9WRVJTSU9OX01BSk9SX09GRlNFVAkJCTI0CisjZGVmaW5lCVRJTVJPVF9WRVJTSU9OX01JTk9SX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUJVElNUk9UX1ZFUlNJT05fTUlOT1JfT0ZGU0VUCQkJMTYKKyNkZWZpbmUJVElNUk9UX1ZFUlNJT05fU1RFUF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lCVRJTVJPVF9WRVJTSU9OX1NURVBfT0ZGU0VUCQkJMAorCisjZW5kaWYgLyogX19NWDI4X1JFR1NfVElNUk9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtdXNiLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy11c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTYxZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDI4L3JlZ3MtdXNiLmgKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFVTQiBPVEcgUmVnaXN0ZXIgRGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1JFR1NfVVNCX0hfXworI2RlZmluZSBfX1JFR1NfVVNCX0hfXworCitzdHJ1Y3QgbXgyOF91c2JfcmVncyB7CisJdWludDMyX3QJCWh3X3VzYmN0cmxfaWQ7CQkJLyogMHgwMDAgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9od2dlbmVyYWw7CQkvKiAweDAwNCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2h3aG9zdDsJCS8qIDB4MDA4ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfaHdkZXZpY2U7CQkvKiAweDAwYyAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2h3dHhidWY7CQkvKiAweDAxMCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2h3cnhidWY7CQkvKiAweDAxNCAqLworCisJdWludDMyX3QJCXJlc2VydmVkMVsyNl07CisKKwl1aW50MzJfdAkJaHdfdXNiY3RybF9ncHRpbWVyMGxkOwkJLyogMHgwODAgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9ncHRpbWVyMGN0cmw7CS8qIDB4MDg0ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfZ3B0aW1lcjFsZDsJCS8qIDB4MDg4ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfZ3B0aW1lcjFjdHJsOwkvKiAweDA4YyAqLworCXVpbnQzMl90CQlod191c2JjdHJsX3NidXNjZmc7CQkvKiAweDA5MCAqLworCisJdWludDMyX3QJCXJlc2VydmVkMlsyN107CisKKwl1aW50MzJfdAkJaHdfdXNiY3RybF9jYXBsZW5ndGg7CQkvKiAweDEwMCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2hjc3BhcmFtczsJCS8qIDB4MTA0ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfaGNjcGFyYW1zOwkJLyogMHgxMDggKi8KKworCXVpbnQzMl90CQlyZXNlcnZlZDNbNV07CisKKwl1aW50MzJfdAkJaHdfdXNiY3RybF9kY2l2ZXJzaW9uOwkJLyogMHgxMjAgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9kY2NwYXJhbXM7CQkvKiAweDEyNCAqLworCisJdWludDMyX3QJCXJlc2VydmVkNFs2XTsKKworCXVpbnQzMl90CQlod191c2JjdHJsX3VzYmNtZDsJCS8qIDB4MTQwICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfdXNic3RzOwkJLyogMHgxNDQgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF91c2JpbnRyOwkJLyogMHgxNDggKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9mcmluZGV4OwkJLyogMHgxNGMgKi8KKworCXVpbnQzMl90CQlyZXNlcnZlZDU7CisKKwl1bmlvbiB7CisJCXVpbnQzMl90CWh3X3VzYmN0cmxfcGVyaW9kaWNsaXN0YmFzZTsJLyogMHgxNTQgKi8KKwkJdWludDMyX3QJaHdfdXNiY3RybF9kZXZpY2VhZGRyOwkJLyogMHgxNTQgKi8KKwl9OworCXVuaW9uIHsKKwkJdWludDMyX3QJaHdfdXNiY3RybF9hc3luY2xpc3RhZGRyOwkvKiAweDE1OCAqLworCQl1aW50MzJfdAlod191c2JjdHJsX2VuZHBvaW50bGlzdGFkZHI7CS8qIDB4MTU4ICovCisJfTsKKworCXVpbnQzMl90CQlod191c2JjdHJsX3R0Y3RybDsJCS8qIDB4MTVjICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfYnVyc3RzaXplOwkJLyogMHgxNjAgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF90eGZpbGx0dW5pbmc7CS8qIDB4MTY0ICovCisKKwl1aW50MzJfdAkJcmVzZXJ2ZWQ2OworCisJdWludDMyX3QJCWh3X3VzYmN0cmxfaWNfdXNiOwkJLyogMHgxNmMgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF91bHBpOwkJLyogMHgxNzAgKi8KKworCXVpbnQzMl90CQlyZXNlcnZlZDc7CisKKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdG5hazsJCS8qIDB4MTc4ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfZW5kcHRuYWtlbjsJCS8qIDB4MTdjICovCisKKwl1aW50MzJfdAkJcmVzZXJ2ZWQ4OworCisJdWludDMyX3QJCWh3X3VzYmN0cmxfcG9ydHNjMTsJCS8qIDB4MTg0ICovCisKKwl1aW50MzJfdAkJcmVzZXJ2ZWQ5WzddOworCisJdWludDMyX3QJCWh3X3VzYmN0cmxfb3Rnc2M7CQkvKiAweDFhNCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX3VzYm1vZGU7CQkvKiAweDFhOCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0c2V0dXBzdGF0OwkvKiAweDFhYyAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0cHJpbWU7CQkvKiAweDFiMCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0Zmx1c2g7CQkvKiAweDFiNCAqLworCXVpbnQzMl90CQlod191c2JjdHJsX2VuZHB0c3RhdDsJCS8qIDB4MWI4ICovCisJdWludDMyX3QJCWh3X3VzYmN0cmxfZW5kcHRjb21wbGV0ZTsJLyogMHgxYmMgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGN0cmwwOwkJLyogMHgxYzAgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGN0cmwxOwkJLyogMHgxYzQgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGN0cmwyOwkJLyogMHgxYzggKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGN0cmwzOwkJLyogMHgxY2MgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGN0cmw0OwkJLyogMHgxZDAgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGN0cmw1OwkJLyogMHgxZDQgKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGN0cmw2OwkJLyogMHgxZDggKi8KKwl1aW50MzJfdAkJaHdfdXNiY3RybF9lbmRwdGN0cmw3OwkJLyogMHgxZGMgKi8KK307CisKKyNkZWZpbmUJQ0xLQ1RSTF9QTEwwQ1RSTDBfTEZSX1NFTF9NQVNLCQkoMHgzIDw8IDI4KQorCisjZGVmaW5lCUhXX1VTQkNUUkxfSURfQ0lWRVJTSU9OX09GRlNFVAkJMjkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9DSVZFUlNJT05fTUFTSwkJKDB4NyA8PCAyOSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9WRVJTSU9OX09GRlNFVAkJMjUKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9WRVJTSU9OX01BU0sJCSgweGYgPDwgMjUpCisjZGVmaW5lCUhXX1VTQkNUUkxfSURfUkVWSVNJT05fT0ZGU0VUCQkyMQorI2RlZmluZQlIV19VU0JDVFJMX0lEX1JFVklTSU9OX01BU0sJCSgweGYgPDwgMjEpCisjZGVmaW5lCUhXX1VTQkNUUkxfSURfVEFHX09GRlNFVAkJMTYKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9UQUdfTUFTSwkJCSgweDFmIDw8IDE2KQorI2RlZmluZQlIV19VU0JDVFJMX0lEX05JRF9PRkZTRVQJCTgKKyNkZWZpbmUJSFdfVVNCQ1RSTF9JRF9OSURfTUFTSwkJCSgweDNmIDw8IDgpCisjZGVmaW5lCUhXX1VTQkNUUkxfSURfSURfT0ZGU0VUCQkJMAorI2RlZmluZQlIV19VU0JDVFJMX0lEX0lEX01BU0sJCQkoMHgzZiA8PCAwKQorCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdHRU5FUkFMX1NNX09GRlNFVAkJOQorI2RlZmluZQlIV19VU0JDVFJMX0hXR0VORVJBTF9TTV9NQVNLCQkoMHgzIDw8IDkpCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdHRU5FUkFMX1BIWU1fT0ZGU0VUCTYKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0dFTkVSQUxfUEhZTV9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdHRU5FUkFMX1BIWVdfT0ZGU0VUCTQKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0dFTkVSQUxfUEhZV19NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdHRU5FUkFMX0JXVAkJKDEgPDwgMykKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0dFTkVSQUxfQ0xLQ19PRkZTRVQJMQorI2RlZmluZQlIV19VU0JDVFJMX0hXR0VORVJBTF9DTEtDX01BU0sJCSgweDMgPDwgMSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0dFTkVSQUxfUlQJCQkoMSA8PCAwKQorCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdIT1NUX1RUUEVSX09GRlNFVAkJMjQKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0hPU1RfVFRQRVJfTUFTSwkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdIT1NUX1RUQVNZX09GRlNFVAkJMTYKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0hPU1RfVFRBU1lfTUFTSwkJKDB4ZmYgPDwgMTkpCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdIT1NUX05QT1JUX09GRlNFVAkJMQorI2RlZmluZQlIV19VU0JDVFJMX0hXSE9TVF9OUE9SVF9NQVNLCQkoMHg3IDw8IDEpCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdIT1NUX0hDCQkJKDEgPDwgMCkKKworI2RlZmluZQlIV19VU0JDVFJMX0hXREVWSUNFX0RFVkVQX09GRlNFVAkxCisjZGVmaW5lCUhXX1VTQkNUUkxfSFdERVZJQ0VfREVWRVBfTUFTSwkJKDB4MWYgPDwgMSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV0RFVklDRV9EQwkJCSgxIDw8IDApCisKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV1RYQlVGX1RYTENSCQkoMSA8PCAzMSkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV1RYQlVGX1RYQ0hBTkFERF9PRkZTRVQJMTYKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV1RYQlVGX1RYQ0hBTkFERF9NQVNLCSgweGZmIDw8IDE2KQorI2RlZmluZQlIV19VU0JDVFJMX0hXVFhCVUZfVFhBRERfT0ZGU0VUCQk4CisjZGVmaW5lCUhXX1VTQkNUUkxfSFdUWEJVRl9UWEFERF9NQVNLCQkoMHhmZiA8PCA4KQorI2RlZmluZQlIV19VU0JDVFJMX0hXVFhCVUZfVFhCVVJTVF9PRkZTRVQJMAorI2RlZmluZQlIV19VU0JDVFJMX0hXVFhCVUZfVFhCVVJTVF9NQVNLCQkweGZmCisKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV1JYQlVGX1JYQUREX09GRlNFVAkJOAorI2RlZmluZQlIV19VU0JDVFJMX0hXUlhCVUZfUlhBRERfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV1JYQlVGX1JYQlVSU1RfT0ZGU0VUCTAKKyNkZWZpbmUJSFdfVVNCQ1RSTF9IV1JYQlVGX1JYQlVSU1RfTUFTSwkJMHhmZgorCisjZGVmaW5lCUhXX1VTQkNUUkxfR1BUSU1FUkxEX0dQVExEX09GRlNFVAkwCisjZGVmaW5lCUhXX1VTQkNUUkxfR1BUSU1FUkxEX0dQVExEX01BU0sJCTB4ZmZmZmZmCisKKyNkZWZpbmUJSFdfVVNCQ1RSTF9HUFRJTUVSQ1RSTF9HUFRSVU4JCSgxIDw8IDMxKQorI2RlZmluZQlIV19VU0JDVFJMX0dQVElNRVJDVFJMX0dQVFJTVAkJKDEgPDwgMzApCisjZGVmaW5lCUhXX1VTQkNUUkxfR1BUSU1FUkNUUkxfR1BUTU9ERQkJKDEgPDwgMjQpCisjZGVmaW5lCUhXX1VTQkNUUkxfR1BUSU1FUkNUUkxfR1BUQ05UX09GRlNFVAkwCisjZGVmaW5lCUhXX1VTQkNUUkxfR1BUSU1FUkNUUkxfR1BUQ05UX01BU0sJMHhmZmZmZmYKKworI2RlZmluZQlIV19VU0JDVFJMX1NCVVNDRkdfQUhCQlVSU1RfT0ZGU0VUCTAKKyNkZWZpbmUJSFdfVVNCQ1RSTF9TQlVTQ0ZHX0FIQkJVUlNUX01BU0sJMHg3CisjZGVmaW5lCUhXX1VTQkNUUkxfU0JVU0NGR19BSEJCVVJTVF9VX0lOQ1IJMHgwCisjZGVmaW5lCUhXX1VTQkNUUkxfU0JVU0NGR19BSEJCVVJTVF9TX0lOQ1I0CTB4MQorI2RlZmluZQlIV19VU0JDVFJMX1NCVVNDRkdfQUhCQlVSU1RfU19JTkNSOAkweDIKKyNkZWZpbmUJSFdfVVNCQ1RSTF9TQlVTQ0ZHX0FIQkJVUlNUX1NfSU5DUjE2CTB4MworI2RlZmluZQlIV19VU0JDVFJMX1NCVVNDRkdfQUhCQlVSU1RfVV9JTkNSNAkweDUKKyNkZWZpbmUJSFdfVVNCQ1RSTF9TQlVTQ0ZHX0FIQkJVUlNUX1VfSU5DUjgJMHg2CisjZGVmaW5lCUhXX1VTQkNUUkxfU0JVU0NGR19BSEJCVVJTVF9VX0lOQ1IxNgkweDcKKworI2VuZGlmCS8qIF9fUkVHU19VU0JfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy11c2JwaHkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9yZWdzLXVzYnBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MjNlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14MjgvcmVncy11c2JwaHkuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggVVNCIFBIWSBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fUkVHU19VU0JQSFlfSF9fCisjZGVmaW5lIF9fUkVHU19VU0JQSFlfSF9fCisKK3N0cnVjdCBteDI4X3VzYnBoeV9yZWdzIHsKKwlteDI4X3JlZyhod191c2JwaHlfcHdkKQorCW14MjhfcmVnKGh3X3VzYnBoeV90eCkKKwlteDI4X3JlZyhod191c2JwaHlfcngpCisJbXgyOF9yZWcoaHdfdXNicGh5X2N0cmwpCisJbXgyOF9yZWcoaHdfdXNicGh5X3N0YXR1cykKKwlteDI4X3JlZyhod191c2JwaHlfZGVidWcpCisJbXgyOF9yZWcoaHdfdXNicGh5X2RlYnVnMF9zdGF0dXMpCisJbXgyOF9yZWcoaHdfdXNicGh5X2RlYnVnMSkKKwlteDI4X3JlZyhod191c2JwaHlfdmVyc2lvbikKKwlteDI4X3JlZyhod191c2JwaHlfaXApCit9OworCisjZGVmaW5lCVVTQlBIWV9QV0RfUlhQV0RSWAkJCQkoMSA8PCAyMCkKKyNkZWZpbmUJVVNCUEhZX1BXRF9SWFBXRERJRkYJCQkJKDEgPDwgMTkpCisjZGVmaW5lCVVTQlBIWV9QV0RfUlhQV0QxUFQxCQkJCSgxIDw8IDE4KQorI2RlZmluZQlVU0JQSFlfUFdEX1JYUFdERU5WCQkJCSgxIDw8IDE3KQorI2RlZmluZQlVU0JQSFlfUFdEX1RYUFdEVjJJCQkJCSgxIDw8IDEyKQorI2RlZmluZQlVU0JQSFlfUFdEX1RYUFdESUJJQVMJCQkJKDEgPDwgMTEpCisjZGVmaW5lCVVTQlBIWV9QV0RfVFhQV0RGUwkJCQkoMSA8PCAxMCkKKworI2RlZmluZQlVU0JQSFlfVFhfVVNCUEhZX1RYX0VER0VDVFJMX09GRlNFVAkJMjYKKyNkZWZpbmUJVVNCUEhZX1RYX1VTQlBIWV9UWF9FREdFQ1RSTF9NQVNLCQkoMHg3IDw8IDI2KQorI2RlZmluZQlVU0JQSFlfVFhfVVNCUEhZX1RYX1NZTkNfSU5WRVJUCQkJKDEgPDwgMjUpCisjZGVmaW5lCVVTQlBIWV9UWF9VU0JQSFlfVFhfU1lOQ19NVVgJCQkoMSA8PCAyNCkKKyNkZWZpbmUJVVNCUEhZX1RYX1RYRU5DQUw0NURQCQkJCSgxIDw8IDIxKQorI2RlZmluZQlVU0JQSFlfVFhfVFhDQUw0NURQX09GRlNFVAkJCTE2CisjZGVmaW5lCVVTQlBIWV9UWF9UWENBTDQ1RFBfTUFTSwkJCSgweGYgPDwgMTYpCisjZGVmaW5lCVVTQlBIWV9UWF9UWEVOQ0FMNDVETQkJCQkoMSA8PCAxMykKKyNkZWZpbmUJVVNCUEhZX1RYX1RYQ0FMNDVETV9PRkZTRVQJCQk4CisjZGVmaW5lCVVTQlBIWV9UWF9UWENBTDQ1RE1fTUFTSwkJCSgweGYgPDwgOCkKKyNkZWZpbmUJVVNCUEhZX1RYX0RfQ0FMX09GRlNFVAkJCQkwCisjZGVmaW5lCVVTQlBIWV9UWF9EX0NBTF9NQVNLCQkJCTB4ZgorCisjZGVmaW5lCVVTQlBIWV9SWF9SWERCWVBBU1MJCQkJKDEgPDwgMjIpCisjZGVmaW5lCVVTQlBIWV9SWF9ESVNDT05BREpfT0ZGU0VUCQkJNAorI2RlZmluZQlVU0JQSFlfUlhfRElTQ09OQURKX01BU0sJCQkoMHg3IDw8IDQpCisjZGVmaW5lCVVTQlBIWV9SWF9FTlZBREpfT0ZGU0VUCQkJCTAKKyNkZWZpbmUJVVNCUEhZX1JYX0VOVkFESl9NQVNLCQkJCTB4NworCisjZGVmaW5lCVVTQlBIWV9DVFJMX1NGVFJTVAkJCQkoMSA8PCAzMSkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfQ0xLR0FURQkJCQkoMSA8PCAzMCkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfVVRNSV9TVVNQRU5ETQkJCSgxIDw8IDI5KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9IT1NUX0ZPUkNFX0xTX1NFMAkJCSgxIDw8IDI4KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTkFVVE9TRVRfVVNCQ0xLUwkJCSgxIDw8IDI2KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTkFVVE9DTFJfVVNCQ0xLR0FURQkJKDEgPDwgMjUpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0ZTRExMX1JTVF9FTgkJCSgxIDw8IDI0KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTlZCVVNDSEdfV0tVUAkJCSgxIDw8IDIzKQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTklEQ0hHX1dLVVAJCQkoMSA8PCAyMikKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5EUERNQ0hHX1dLVVAJCQkoMSA8PCAyMSkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5BVVRPQ0xSX1BIWV9QV0QJCQkoMSA8PCAyMCkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5BVVRPQ0xSX0NMS0dBVEUJCQkoMSA8PCAxOSkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5BVVRPX1BXUk9OX1BMTAkJCSgxIDw8IDE4KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9XQUtFVVBfSVJRCQkJCSgxIDw8IDE3KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTklSUVdBS0VVUAkJCQkoMSA8PCAxNikKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5VVE1JTEVWRUwzCQkJKDEgPDwgMTUpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0VOVVRNSUxFVkVMMgkJCSgxIDw8IDE0KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9EQVRBX09OX0xSQURDCQkJKDEgPDwgMTMpCisjZGVmaW5lCVVTQlBIWV9DVFJMX0RFVlBMVUdJTl9JUlEJCQkoMSA8PCAxMikKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5JUlFERVZQTFVHSU4JCQkoMSA8PCAxMSkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfUkVTVU1FX0lSUQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5JUlFSRVNVTUVERVRFQ1QJCQkoMSA8PCA5KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9SRVNVTUVJUlFTVElDS1kJCQkoMSA8PCA4KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9FTk9UR0lEREVURUNUCQkJKDEgPDwgNykKKyNkZWZpbmUJVVNCUEhZX0NUUkxfREVWUExVR0lOX1BPTEFSSVRZCQkJKDEgPDwgNSkKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5ERVZQTFVHSU5ERVRFQ1QJCQkoMSA8PCA0KQorI2RlZmluZQlVU0JQSFlfQ1RSTF9IT1NURElTQ09OREVURUNUX0lSUQkJKDEgPDwgMykKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5JUlFIT1NURElTQ09OCQkJKDEgPDwgMikKKyNkZWZpbmUJVVNCUEhZX0NUUkxfRU5IT1NURElTQ09OREVURUNUCQkJKDEgPDwgMSkKKworI2RlZmluZQlVU0JQSFlfU1RBVFVTX1JFU1VNRV9TVEFUVVMJCQkoMSA8PCAxMCkKKyNkZWZpbmUJVVNCUEhZX1NUQVRVU19PVEdJRF9TVEFUVVMJCQkoMSA8PCA4KQorI2RlZmluZQlVU0JQSFlfU1RBVFVTX0RFVlBMVUdJTl9TVEFUVVMJCQkoMSA8PCA2KQorI2RlZmluZQlVU0JQSFlfU1RBVFVTX0hPU1RESVNDT05ERVRFQ1RfU1RBVFVTCQkoMSA8PCAzKQorCisjZGVmaW5lCVVTQlBIWV9ERUJVR19DTEtHQVRFCQkJCSgxIDw8IDMwKQorI2RlZmluZQlVU0JQSFlfREVCVUdfSE9TVF9SRVNVTUVfREVCVUcJCQkoMSA8PCAyOSkKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX1NRVUVMQ0hSRVNFVExFTkdUSF9PRkZTRVQJCTI1CisjZGVmaW5lCVVTQlBIWV9ERUJVR19TUVVFTENIUkVTRVRMRU5HVEhfTUFTSwkJKDB4ZiA8PCAyNSkKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX0VOU1FVRUxDSFJFU0VUCQkJKDEgPDwgMjQpCisjZGVmaW5lCVVTQlBIWV9ERUJVR19TUVVFTENIUkVTRVRDT1VOVF9PRkZTRVQJCTE2CisjZGVmaW5lCVVTQlBIWV9ERUJVR19TUVVFTENIUkVTRVRDT1VOVF9NQVNLCQkoMHgxZiA8PCAxNikKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX0VOVFgyUlhDT1VOVAkJCSgxIDw8IDEyKQorI2RlZmluZQlVU0JQSFlfREVCVUdfVFgyUlhDT1VOVF9PRkZTRVQJCQk4CisjZGVmaW5lCVVTQlBIWV9ERUJVR19UWDJSWENPVU5UX01BU0sJCQkoMHhmIDw8IDgpCisjZGVmaW5lCVVTQlBIWV9ERUJVR19FTkhTVFBVTExET1dOX09GRlNFVAkJNAorI2RlZmluZQlVU0JQSFlfREVCVUdfRU5IU1RQVUxMRE9XTl9NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZQlVU0JQSFlfREVCVUdfSFNUUFVMTERPV05fT0ZGU0VUCQkJMgorI2RlZmluZQlVU0JQSFlfREVCVUdfSFNUUFVMTERPV05fTUFTSwkJCSgweDMgPDwgMikKKyNkZWZpbmUJVVNCUEhZX0RFQlVHX0RFQlVHX0lOVEVSRkFDRV9IT0xECQkoMSA8PCAxKQorI2RlZmluZQlVU0JQSFlfREVCVUdfT1RHSURQSURMT0NLCQkJKDEgPDwgMCkKKworI2RlZmluZQlVU0JQSFlfREVCVUcwX1NUQVRVU19TUVVFTENIX0NPVU5UX09GRlNFVAkyNgorI2RlZmluZQlVU0JQSFlfREVCVUcwX1NUQVRVU19TUVVFTENIX0NPVU5UX01BU0sJCSgweDNmIDw8IDI2KQorI2RlZmluZQlVU0JQSFlfREVCVUcwX1NUQVRVU19VVE1JX1JYRVJST1JfT0ZGU0VUCTE2CisjZGVmaW5lCVVTQlBIWV9ERUJVRzBfU1RBVFVTX1VUTUlfUlhFUlJPUl9NQVNLCQkoMHgzZmYgPDwgMTYpCisjZGVmaW5lCVVTQlBIWV9ERUJVRzBfU1RBVFVTX0xPT1BfQkFDS19PRkZTRVQJCTAKKyNkZWZpbmUJVVNCUEhZX0RFQlVHMF9TVEFUVVNfTE9PUF9CQUNLX01BU0sJCTB4ZmZmZgorCisjZGVmaW5lCVVTQlBIWV9ERUJVRzFfRU5UQUlMQURKVkRfT0ZGU0VUCQkxMworI2RlZmluZQlVU0JQSFlfREVCVUcxX0VOVEFJTEFESlZEX01BU0sJCQkoMHgzIDw8IDEzKQorI2RlZmluZQlVU0JQSFlfREVCVUcxX0VOVFgyVFgJCQkJKDEgPDwgMTIpCisjZGVmaW5lCVVTQlBIWV9ERUJVRzFfREJHX0FERFJFU1NfT0ZGU0VUCQkwCisjZGVmaW5lCVVTQlBIWV9ERUJVRzFfREJHX0FERFJFU1NfTUFTSwkJCTB4ZgorCisjZGVmaW5lCVVTQlBIWV9WRVJTSU9OX01BSk9SX01BU0sJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUJVVNCUEhZX1ZFUlNJT05fTUFKT1JfT0ZGU0VUCQkJMjQKKyNkZWZpbmUJVVNCUEhZX1ZFUlNJT05fTUlOT1JfTUFTSwkJCSgweGZmIDw8IDE2KQorI2RlZmluZQlVU0JQSFlfVkVSU0lPTl9NSU5PUl9PRkZTRVQJCQkxNgorI2RlZmluZQlVU0JQSFlfVkVSU0lPTl9TVEVQX01BU0sJCQkweGZmZmYKKyNkZWZpbmUJVVNCUEhZX1ZFUlNJT05fU1RFUF9PRkZTRVQJCQkwCisKKyNkZWZpbmUJVVNCUEhZX0lQX0RJVl9TRUxfT0ZGU0VUCQkJMjMKKyNkZWZpbmUJVVNCUEhZX0lQX0RJVl9TRUxfTUFTSwkJCQkoMHgzIDw8IDIzKQorI2RlZmluZQlVU0JQSFlfSVBfTEZSX1NFTF9PRkZTRVQJCQkyMQorI2RlZmluZQlVU0JQSFlfSVBfTEZSX1NFTF9NQVNLCQkJCSgweDMgPDwgMjEpCisjZGVmaW5lCVVTQlBIWV9JUF9DUF9TRUxfT0ZGU0VUCQkJCTE5CisjZGVmaW5lCVVTQlBIWV9JUF9DUF9TRUxfTUFTSwkJCQkoMHgzIDw8IDE5KQorI2RlZmluZQlVU0JQSFlfSVBfVFNUSV9UWF9EUAkJCQkoMSA8PCAxOCkKKyNkZWZpbmUJVVNCUEhZX0lQX1RTVElfVFhfRE0JCQkJKDEgPDwgMTcpCisjZGVmaW5lCVVTQlBIWV9JUF9BTkFMT0dfVEVTVE1PREUJCQkoMSA8PCAxNikKKyNkZWZpbmUJVVNCUEhZX0lQX0VOX1VTQl9DTEtTCQkJCSgxIDw8IDIpCisjZGVmaW5lCVVTQlBIWV9JUF9QTExfTE9DS0VECQkJCSgxIDw8IDEpCisjZGVmaW5lCVVTQlBIWV9JUF9QTExfUE9XRVIJCQkJKDEgPDwgMCkKKworI2VuZGlmCS8qIF9fUkVHU19VU0JQSFlfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14Mjgvc3lzX3Byb3RvLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW14Mjgvc3lzX3Byb3RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyNmVhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC9zeXNfcHJvdG8uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBNWDI4IHNwZWNpZmljIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX01YMjhfSF9fCisjZGVmaW5lIF9fTVgyOF9IX18KKworaW50IG14MjhfcmVzZXRfYmxvY2soc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZyk7CitpbnQgbXgyOF93YWl0X21hc2tfc2V0KHN0cnVjdCBteDI4X3JlZ2lzdGVyICpyZWcsIHVpbnQzMl90IG1hc2ssIGludCB0aW1lb3V0KTsKK2ludCBteDI4X3dhaXRfbWFza19jbHIoc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZywgdWludDMyX3QgbWFzaywgaW50IHRpbWVvdXQpOworCitpbnQgbXhzbW1jX2luaXRpYWxpemUoYmRfdCAqYmlzLCBpbnQgaWQsIGludCAoKndwKShpbnQpKTsKKworI2VuZGlmCS8qIF9fTVgyOF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgzMS9pbXgtcmVncy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDMxL2lteC1yZWdzLmgKaW5kZXggYWZkYWExYy4uMDE0NzkyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDMxL2lteC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1teDMxL2lteC1yZWdzLmgKQEAgLTk4LDYgKzk4LDEyIEBACiAJdTMyIGlpbV9zY3MzOwogfTsKIAorc3RydWN0IGlvbXV4Y19yZWdzIHsKKwl1MzIgdW51c2VkMTsKKwl1MzIgdW51c2VkMjsKKwl1MzIgZ3ByOworfTsKKwogc3RydWN0IG14M19jcHVfdHlwZSB7CiAJdTggc3JldjsKIAl1MzIgdjsKQEAgLTYzNiw3ICs2NDIsNiBAQAogI2RlZmluZSBXRUlNX0JBU0UJMHhiODAwMjAwMAogCiAjZGVmaW5lIElPTVVYQ19CQVNFCTB4NDNGQUMwMDAKLSNkZWZpbmUgSU9NVVhDX0dQUgkoSU9NVVhDX0JBU0UgKyAweDgpCiAjZGVmaW5lIElPTVVYQ19TV19NVVhfQ1RMKHgpCShJT01VWENfQkFTRSArIDB4YyArICh4KSAqIDQpCiAjZGVmaW5lIElPTVVYQ19TV19QQURfQ1RMKHgpCShJT01VWENfQkFTRSArIDB4MTU0ICsgKHgpICogNCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwMy9tbWNfaG9zdF9kZWYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDMvbW1jX2hvc3RfZGVmLmgKaW5kZXggYmExYzJmZi4uMjk2MzY3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwMy9tbWNfaG9zdF9kZWYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXAzL21tY19ob3N0X2RlZi5oCkBAIC01NSw3ICs1NSw3IEBACiAjZGVmaW5lIE9NQVBfSFNNTUMyX0JBU0UJMHg0ODBCNDAwMAogI2RlZmluZSBPTUFQX0hTTU1DM19CQVNFCTB4NDgwQUQwMDAKIAotdHlwZWRlZiBzdHJ1Y3QgaHNtbWMgeworc3RydWN0IGhzbW1jIHsKIAl1bnNpZ25lZCBjaGFyIHJlczFbMHgxMF07CiAJdW5zaWduZWQgaW50IHN5c2NvbmZpZzsJCS8qIDB4MTAgKi8KIAl1bnNpZ25lZCBpbnQgc3lzc3RhdHVzOwkJLyogMHgxNCAqLwpAQCAtNzcsNyArNzcsNyBAQAogCXVuc2lnbmVkIGludCBpZTsJCS8qIDB4MTM0ICovCiAJdW5zaWduZWQgY2hhciByZXM0WzB4OF07CiAJdW5zaWduZWQgaW50IGNhcGE7CQkvKiAweDE0MCAqLwotfSBoc21tY190OworfTsKIAogLyoKICAqIE9NQVAgSFMgTU1DIEJpdCBkZWZpbml0aW9ucwpAQCAtMTgyLDEzICsxODIsNiBAQAogI2RlZmluZSBDTEtfNDAwS0haCQkJMQogI2RlZmluZSBDTEtfTUlTQwkJCTIKIAotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBjYXJkX3R5cGU7Ci0JdW5zaWduZWQgaW50IHZlcnNpb247Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0JdW5zaWduZWQgaW50IFJDQTsKLX0gbW1jX2NhcmRfZGF0YTsKICNkZWZpbmUgUlNQX1RZUEVfTk9ORQkoUlNQX1RZUEVfTk9SU1AgICB8IENDQ0VfTk9DSEVDSyB8IENJQ0VfTk9DSEVDSykKICNkZWZpbmUgTU1DX0NNRDAJKElOREVYKDApICB8IFJTUF9UWVBFX05PTkUgfCBEUF9OT19EQVRBIHwgRERJUl9XUklURSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9jbG9ja3MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvY2xvY2tzLmgKaW5kZXggNDVjOTQ3ZC4uYzJhOWI0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9jbG9ja3MuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L2Nsb2Nrcy5oCkBAIC02ODcsNCArNjg3LDI3IEBACiAJczggbTc7CiB9OwogCitleHRlcm4gc3RydWN0IG9tYXA0X3ByY21fcmVncyAqY29uc3QgcHJjbTsKK2V4dGVybiBjb25zdCB1MzIgc3lzX2Nsa19hcnJheVs4XTsKKwordm9pZCBzY2FsZV92Y29yZXModm9pZCk7Cit2b2lkIGRvX3NjYWxlX3RwczYyMzYxKHUzMiByZWcsIHUzMiB2b2x0X212KTsKK3UzMiBvbWFwX2Rkcl9jbGsodm9pZCk7Cit2b2lkIGRvX3NjYWxlX3Zjb3JlKHUzMiB2Y29yZV9yZWcsIHUzMiB2b2x0X212KTsKK3ZvaWQgc2V0dXBfc3JpMmModm9pZCk7Cit2b2lkIHNldHVwX3Bvc3RfZGl2aWRlcnModTMyICpjb25zdCBiYXNlLCBjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKnBhcmFtcyk7Cit1MzIgZ2V0X3N5c19jbGtfaW5kZXgodm9pZCk7Cit2b2lkIGVuYWJsZV9iYXNpY19jbG9ja3Modm9pZCk7Cit2b2lkIGVuYWJsZV9iYXNpY191Ym9vdF9jbG9ja3Modm9pZCk7Cit2b2lkIGVuYWJsZV9ub25fZXNzZW50aWFsX2Nsb2Nrcyh2b2lkKTsKK3ZvaWQgZG9fZW5hYmxlX2Nsb2Nrcyh1MzIgKmNvbnN0ICpjbGtfZG9tYWlucywKKwkJICAgICAgdTMyICpjb25zdCAqY2xrX21vZHVsZXNfaHdfYXV0bywKKwkJICAgICAgdTMyICpjb25zdCAqY2xrX21vZHVsZXNfZXhwbGljaXRfZW4sCisJCSAgICAgIHU4IHdhaXRfZm9yX2VuYWJsZSk7Citjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9tcHVfZHBsbF9wYXJhbXModm9pZCk7Citjb25zdCBzdHJ1Y3QgZHBsbF9wYXJhbXMgKmdldF9jb3JlX2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfcGVyX2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfaXZhX2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfdXNiX2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfYWJlX2RwbGxfcGFyYW1zKHZvaWQpOwogI2VuZGlmIC8qIF9DTE9DS1NfT01BUDRfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvZW1pZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9lbWlmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNTQ5YmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9lbWlmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIxICswLDAgQEAKLS8qCi0gKiBPTUFQNDR4eCBFTUlGIGhlYWRlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9FTUlGX0hfCi0jZGVmaW5lIF9FTUlGX0hfCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0KLS8qIEJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBPTUFQNDRYWF9FTUlGMQkJCQkweDRjMDAwMDAwCi0jZGVmaW5lIE9NQVA0NFhYX0VNSUYyCQkJCTB4NGQwMDAwMDAKLQotLyogUmVnaXN0ZXJzIHNoaWZ0cyBhbmQgbWFza3MgKi8KLQotLyogRU1JRl9NT0RfSURfUkVWICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19TQ0hFTUVfU0hJRlQJCQkzMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfU0NIRU1FX01BU0sJCQkoMHgzIDw8IDMwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTU9EVUxFX0lEX1NISUZUCQkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01PRFVMRV9JRF9NQVNLCQkJKDB4ZmZmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUlRMX1ZFUlNJT05fU0hJRlQJCQkxMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUlRMX1ZFUlNJT05fTUFTSwkJCSgweDFmIDw8IDExKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUFKT1JfUkVWSVNJT05fU0hJRlQJCTgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01BSk9SX1JFVklTSU9OX01BU0sJCSgweDcgPDwgOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01JTk9SX1JFVklTSU9OX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NSU5PUl9SRVZJU0lPTl9NQVNLCQkoMHgzZiA8PCAwKQotCi0vKiBTVEFUVVMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0JFX1NISUZUCQkJCTMxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19CRV9NQVNLCQkJCSgxIDw8IDMxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRFVBTF9DTEtfTU9ERV9TSElGVAkJMzAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0RVQUxfQ0xLX01PREVfTUFTSwkJCSgxIDw8IDMwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRkFTVF9JTklUX1NISUZUCQkJMjkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0ZBU1RfSU5JVF9NQVNLCQkJKDEgPDwgMjkpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QSFlfRExMX1JFQURZX1NISUZUCQkyCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QSFlfRExMX1JFQURZX01BU0sJCQkoMSA8PCAyKQotCi0vKiBTRFJBTV9DT05GSUcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1NEUkFNX1RZUEVfU0hJRlQJCQkyOQotI2RlZmluZSBPTUFQNDRYWF9SRUdfU0RSQU1fVFlQRV9NQVNLCQkJKDB4NyA8PCAyOSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0lCQU5LX1BPU19TSElGVAkJCTI3Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19JQkFOS19QT1NfTUFTSwkJCSgweDMgPDwgMjcpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfVEVSTV9TSElGVAkJCTI0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfVEVSTV9NQVNLCQkJKDB4NyA8PCAyNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0REUjJfRERRU19TSElGVAkJCTIzCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFIyX0REUVNfTUFTSwkJCSgxIDw8IDIzKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRFlOX09EVF9TSElGVAkJCTIxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19EWU5fT0RUX01BU0sJCQkoMHgzIDw8IDIxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRERSX0RJU0FCTEVfRExMX1NISUZUCQkyMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRERSX0RJU0FCTEVfRExMX01BU0sJCSgxIDw8IDIwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfU0RSQU1fRFJJVkVfU0hJRlQJCQkxOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfU0RSQU1fRFJJVkVfTUFTSwkJCSgweDMgPDwgMTgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DV0xfU0hJRlQJCQkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NXTF9NQVNLCQkJCSgweDMgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OQVJST1dfTU9ERV9TSElGVAkJCTE0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19OQVJST1dfTU9ERV9NQVNLCQkJKDB4MyA8PCAxNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NMX1NISUZUCQkJCTEwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DTF9NQVNLCQkJCSgweGYgPDwgMTApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ST1dTSVpFX1NISUZUCQkJNwotI2RlZmluZSBPTUFQNDRYWF9SRUdfUk9XU0laRV9NQVNLCQkJKDB4NyA8PCA3KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfSUJBTktfU0hJRlQJCQk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19JQkFOS19NQVNLCQkJCSgweDcgPDwgNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VCQU5LX1NISUZUCQkJMwotI2RlZmluZSBPTUFQNDRYWF9SRUdfRUJBTktfTUFTSwkJCQkoMSA8PCAzKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUEFHRVNJWkVfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QQUdFU0laRV9NQVNLCQkJKDB4NyA8PCAwKQotCi0vKiBTRFJBTV9DT05GSUdfMiAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1MxTlZNRU5fU0hJRlQJCQkzMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1MxTlZNRU5fTUFTSwkJCSgxIDw8IDMwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRUJBTktfUE9TX1NISUZUCQkJMjcKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VCQU5LX1BPU19NQVNLCQkJKDEgPDwgMjcpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SREJOVU1fU0hJRlQJCQk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19SREJOVU1fTUFTSwkJCSgweDMgPDwgNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JEQlNJWkVfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SREJTSVpFX01BU0sJCQkoMHg3IDw8IDApCi0KLS8qIFNEUkFNX1JFRl9DVFJMICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19JTklUUkVGX0RJU19TSElGVAkJCTMxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19JTklUUkVGX0RJU19NQVNLCQkJKDEgPDwgMzEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19TUlRfU0hJRlQJCQkJMjkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1NSVF9NQVNLCQkJCSgxIDw8IDI5KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQVNSX1NISUZUCQkJCTI4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19BU1JfTUFTSwkJCQkoMSA8PCAyOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BBU1JfU0hJRlQJCQkJMjQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BBU1JfTUFTSwkJCQkoMHg3IDw8IDI0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVGUkVTSF9SQVRFX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVGUkVTSF9SQVRFX01BU0sJCQkoMHhmZmZmIDw8IDApCi0KLS8qIFNEUkFNX1JFRl9DVFJMX1NIRFcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFRlJFU0hfUkFURV9TSERXX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUZSRVNIX1JBVEVfU0hEV19NQVNLCQkoMHhmZmZmIDw8IDApCi0KLS8qIFNEUkFNX1RJTV8xICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JQX1NISUZUCQkJCTI1Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JQX01BU0sJCQkJKDB4ZiA8PCAyNSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkNEX1NISUZUCQkJMjEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkNEX01BU0sJCQkJKDB4ZiA8PCAyMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1JfU0hJRlQJCQkJMTcKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1JfTUFTSwkJCQkoMHhmIDw8IDE3KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQVNfU0hJRlQJCQkxMgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQVNfTUFTSwkJCQkoMHgxZiA8PCAxMikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkNfU0hJRlQJCQkJNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ19NQVNLCQkJCSgweDNmIDw8IDYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JSRF9TSElGVAkJCTMKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlJEX01BU0sJCQkJKDB4NyA8PCAzKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9XVFJfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1dUUl9NQVNLCQkJCSgweDcgPDwgMCkKLQotLyogU0RSQU1fVElNXzFfU0hEVyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SUF9TSERXX1NISUZUCQkJMjUKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlBfU0hEV19NQVNLCQkJKDB4ZiA8PCAyNSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkNEX1NIRFdfU0hJRlQJCQkyMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ0RfU0hEV19NQVNLCQkJKDB4ZiA8PCAyMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1JfU0hEV19TSElGVAkJCTE3Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1dSX1NIRFdfTUFTSwkJCSgweGYgPDwgMTcpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19TSERXX1NISUZUCQkJMTIKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUkFTX1NIRFdfTUFTSwkJCSgweDFmIDw8IDEyKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ19TSERXX1NISUZUCQkJNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQ19TSERXX01BU0sJCQkoMHgzZiA8PCA2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SUkRfU0hEV19TSElGVAkJCTMKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlJEX1NIRFdfTUFTSwkJCSgweDcgPDwgMykKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfV1RSX1NIRFdfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1dUUl9TSERXX01BU0sJCQkoMHg3IDw8IDApCi0KLS8qIFNEUkFNX1RJTV8yICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1hQX1NISUZUCQkJCTI4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1hQX01BU0sJCQkJKDB4NyA8PCAyOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfT0RUX1NISUZUCQkJMjUKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfT0RUX01BU0sJCQkJKDB4NyA8PCAyNSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNOUl9TSElGVAkJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1hTTlJfTUFTSwkJCSgweDFmZiA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNSRF9TSElGVAkJCTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNSRF9NQVNLCQkJKDB4M2ZmIDw8IDYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JUUF9TSElGVAkJCTMKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlRQX01BU0sJCQkJKDB4NyA8PCAzKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9DS0VfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRV9NQVNLCQkJCSgweDcgPDwgMCkKLQotLyogU0RSQU1fVElNXzJfU0hEVyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9YUF9TSERXX1NISUZUCQkJMjgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFBfU0hEV19NQVNLCQkJKDB4NyA8PCAyOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfT0RUX1NIRFdfU0hJRlQJCQkyNQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9PRFRfU0hEV19NQVNLCQkJKDB4NyA8PCAyNSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNOUl9TSERXX1NISUZUCQkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNOUl9TSERXX01BU0sJCQkoMHgxZmYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1hTUkRfU0hEV19TSElGVAkJCTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfWFNSRF9TSERXX01BU0sJCQkoMHgzZmYgPDwgNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfUlRQX1NIRFdfU0hJRlQJCQkzCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JUUF9TSERXX01BU0sJCQkoMHg3IDw8IDMpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRV9TSERXX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9DS0VfU0hEV19NQVNLCQkJKDB4NyA8PCAwKQotCi0vKiBTRFJBTV9USU1fMyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9DS0VTUl9TSElGVAkJCTIxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRVNSX01BU0sJCQkoMHg3IDw8IDIxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfWlFDU19TSElGVAkJCTE1Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUNTX01BU0sJCQkoMHgzZiA8PCAxNSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfVERRU0NLTUFYX1NISUZUCQkJMTMKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfVERRU0NLTUFYX01BU0sJCQkoMHgzIDw8IDEzKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SRkNfU0hJRlQJCQk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JGQ19NQVNLCQkJCSgweDFmZiA8PCA0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQVNfTUFYX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQVNfTUFYX01BU0sJCQkoMHhmIDw8IDApCi0KLS8qIFNEUkFNX1RJTV8zX1NIRFcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfQ0tFU1JfU0hEV19TSElGVAkJCTIxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX0NLRVNSX1NIRFdfTUFTSwkJCSgweDcgPDwgMjEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUNTX1NIRFdfU0hJRlQJCQkxNQotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfWlFDU19TSERXX01BU0sJCQkoMHgzZiA8PCAxNSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RfVERRU0NLTUFYX1NIRFdfU0hJRlQJCTEzCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1REUVNDS01BWF9TSERXX01BU0sJCSgweDMgPDwgMTMpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JGQ19TSERXX1NISUZUCQkJNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SRkNfU0hEV19NQVNLCQkJKDB4MWZmIDw8IDQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UX1JBU19NQVhfU0hEV19TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVF9SQVNfTUFYX1NIRFdfTUFTSwkJKDB4ZiA8PCAwKQotCi0vKiBMUEREUjJfTlZNX1RJTSAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfWFBfU0hJRlQJCQkyOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfWFBfTUFTSwkJCSgweDcgPDwgMjgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XVFJfU0hJRlQJCQkyNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfV1RSX01BU0sJCQkoMHg3IDw8IDI0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlBfU0hJRlQJCQkyMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlBfTUFTSwkJCSgweGYgPDwgMjApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XUkFfU0hJRlQJCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfV1JBX01BU0sJCQkoMHhmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlJEX1NISUZUCQkJOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlJEX01BU0sJCQkoMHhmZiA8PCA4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUkNETUlOX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUkNETUlOX01BU0sJCQkoMHhmZiA8PCAwKQotCi0vKiBMUEREUjJfTlZNX1RJTV9TSERXICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9YUF9TSERXX1NISUZUCQkyOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfWFBfU0hEV19NQVNLCQkJKDB4NyA8PCAyOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1dUUl9TSERXX1NISUZUCQkyNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfV1RSX1NIRFdfTUFTSwkJKDB4NyA8PCAyNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1JQX1NIRFdfU0hJRlQJCTIwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SUF9TSERXX01BU0sJCQkoMHhmIDw8IDIwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfV1JBX1NIRFdfU0hJRlQJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9XUkFfU0hEV19NQVNLCQkoMHhmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUlJEX1NIRFdfU0hJRlQJCTgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX05WTV9UX1JSRF9TSERXX01BU0sJCSgweGZmIDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19OVk1fVF9SQ0RNSU5fU0hEV19TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTlZNX1RfUkNETUlOX1NIRFdfTUFTSwkJKDB4ZmYgPDwgMCkKLQotLyogUFdSX01HTVRfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfSURMRU1PREVfU0hJRlQJCQkzMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfSURMRU1PREVfTUFTSwkJCSgweDMgPDwgMzApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QRF9USU1fU0hJRlQJCQkxMgotI2RlZmluZSBPTUFQNDRYWF9SRUdfUERfVElNX01BU0sJCQkoMHhmIDw8IDEyKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRFBEX0VOX1NISUZUCQkJMTEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0RQRF9FTl9NQVNLCQkJKDEgPDwgMTEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19MUF9NT0RFX1NISUZUCQkJOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTFBfTU9ERV9NQVNLCQkJKDB4NyA8PCA4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfU1JfVElNX1NISUZUCQkJNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfU1JfVElNX01BU0sJCQkoMHhmIDw8IDQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DU19USU1fU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DU19USU1fTUFTSwkJCSgweGYgPDwgMCkKLQotLyogUFdSX01HTVRfQ1RSTF9TSERXICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19QRF9USU1fU0hEV19TSElGVAkJCTgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSERXX01BU0sJCQkoMHhmIDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19TUl9USU1fU0hEV19TSElGVAkJCTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1NSX1RJTV9TSERXX01BU0sJCQkoMHhmIDw8IDQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DU19USU1fU0hEV19TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NTX1RJTV9TSERXX01BU0sJCQkoMHhmIDw8IDApCi0KLS8qIExQRERSMl9NT0RFX1JFR19EQVRBICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19WQUxVRV8wX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVkFMVUVfMF9NQVNLCQkJKDB4N2YgPDwgMCkKLQotLyogTFBERFIyX01PREVfUkVHX0NGRyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1NfU0hJRlQJCQkJMzEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NTX01BU0sJCQkJKDEgPDwgMzEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUZSRVNIX0VOX1NISUZUCQkJMzAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFRlJFU0hfRU5fTUFTSwkJCSgxIDw8IDMwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQUREUkVTU19TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0FERFJFU1NfTUFTSwkJCSgweGZmIDw8IDApCi0KLS8qIE9DUF9DT05GSUcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1NZU19USFJFU0hfTUFYX1NISUZUCQkyNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfU1lTX1RIUkVTSF9NQVhfTUFTSwkJKDB4ZiA8PCAyNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01QVV9USFJFU0hfTUFYX1NISUZUCQkyMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTVBVX1RIUkVTSF9NQVhfTUFTSwkJKDB4ZiA8PCAyMCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0xMX1RIUkVTSF9NQVhfU0hJRlQJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19MTF9USFJFU0hfTUFYX01BU0sJCQkoMHhmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUFJfT0xEX0NPVU5UX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUFJfT0xEX0NPVU5UX01BU0sJCQkoMHhmZiA8PCAwKQotCi0vKiBPQ1BfQ0ZHX1ZBTF8xICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19TWVNfQlVTX1dJRFRIX1NISUZUCQkzMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfU1lTX0JVU19XSURUSF9NQVNLCQkJKDB4MyA8PCAzMCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0xMX0JVU19XSURUSF9TSElGVAkJCTI4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19MTF9CVVNfV0lEVEhfTUFTSwkJCSgweDMgPDwgMjgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19XUl9GSUZPX0RFUFRIX1NISUZUCQk4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19XUl9GSUZPX0RFUFRIX01BU0sJCQkoMHhmZiA8PCA4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ01EX0ZJRk9fREVQVEhfU0hJRlQJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NNRF9GSUZPX0RFUFRIX01BU0sJCSgweGZmIDw8IDApCi0KLS8qIE9DUF9DRkdfVkFMXzIgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JSRUdfRklGT19ERVBUSF9TSElGVAkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JSRUdfRklGT19ERVBUSF9NQVNLCQkoMHhmZiA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JTRF9GSUZPX0RFUFRIX1NISUZUCQk4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19SU0RfRklGT19ERVBUSF9NQVNLCQkoMHhmZiA8PCA4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkNNRF9GSUZPX0RFUFRIX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SQ01EX0ZJRk9fREVQVEhfTUFTSwkJKDB4ZmYgPDwgMCkKLQotLyogSU9ERlRfVExHQyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVExFQ19TSElGVAkJCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfVExFQ19NQVNLCQkJCSgweGZmZmYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NVF9TSElGVAkJCQkxNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfTVRfTUFTSwkJCQkoMSA8PCAxNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0FDVF9DQVBfRU5fU0hJRlQJCQkxMwotI2RlZmluZSBPTUFQNDRYWF9SRUdfQUNUX0NBUF9FTl9NQVNLCQkJKDEgPDwgMTMpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19PUEdfTERfU0hJRlQJCQkxMgotI2RlZmluZSBPTUFQNDRYWF9SRUdfT1BHX0xEX01BU0sJCQkoMSA8PCAxMikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFU0VUX1BIWV9TSElGVAkJCTEwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRVNFVF9QSFlfTUFTSwkJCSgxIDw8IDEwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTU1TX1NISUZUCQkJCTgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01NU19NQVNLCQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQ19TSElGVAkJCQk0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQ19NQVNLCQkJCSgweDMgPDwgNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BDX1NISUZUCQkJCTEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1BDX01BU0sJCQkJKDB4NyA8PCAxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVE1fU0hJRlQJCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVE1fTUFTSwkJCQkoMSA8PCAwKQotCi0vKiBJT0RGVF9DVFJMX01JU1JfUlNMVCAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfRFFNX1RMTVJfU0hJRlQJCQkxNgotI2RlZmluZSBPTUFQNDRYWF9SRUdfRFFNX1RMTVJfTUFTSwkJCSgweDNmZiA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NUTF9UTE1SX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ1RMX1RMTVJfTUFTSwkJCSgweDdmZiA8PCAwKQotCi0vKiBJT0RGVF9BRERSX01JU1JfUlNMVCAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfQUREUl9UTE1SX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfQUREUl9UTE1SX01BU0sJCQkoMHgxZmZmZmYgPDwgMCkKLQotLyogSU9ERlRfREFUQV9NSVNSX1JTTFRfMSAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzMxXzBfU0hJRlQJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0RBVEFfVExNUl8zMV8wX01BU0sJCSgweGZmZmZmZmZmIDw8IDApCi0KLS8qIElPREZUX0RBVEFfTUlTUl9SU0xUXzIgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0RBVEFfVExNUl82M18zMl9TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzYzXzMyX01BU0sJCSgweGZmZmZmZmZmIDw8IDApCi0KLS8qIElPREZUX0RBVEFfTUlTUl9SU0xUXzMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0RBVEFfVExNUl82Nl82NF9TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfREFUQV9UTE1SXzY2XzY0X01BU0sJCSgweDcgPDwgMCkKLQotLyogUEVSRl9DTlRfMSAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ09VTlRFUjFfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DT1VOVEVSMV9NQVNLCQkJKDB4ZmZmZmZmZmYgPDwgMCkKLQotLyogUEVSRl9DTlRfMiAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ09VTlRFUjJfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DT1VOVEVSMl9NQVNLCQkJKDB4ZmZmZmZmZmYgPDwgMCkKLQotLyogUEVSRl9DTlRfQ0ZHICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DTlRSMl9NQ09OTklEX0VOX1NISUZUCQkzMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjJfTUNPTk5JRF9FTl9NQVNLCQkoMSA8PCAzMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIyX1JFR0lPTl9FTl9TSElGVAkJMzAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIyX1JFR0lPTl9FTl9NQVNLCQkoMSA8PCAzMCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIyX0NGR19TSElGVAkJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19DTlRSMl9DRkdfTUFTSwkJCSgweGYgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19DTlRSMV9NQ09OTklEX0VOX1NISUZUCQkxNQotI2RlZmluZSBPTUFQNDRYWF9SRUdfQ05UUjFfTUNPTk5JRF9FTl9NQVNLCQkoMSA8PCAxNSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIxX1JFR0lPTl9FTl9TSElGVAkJMTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIxX1JFR0lPTl9FTl9NQVNLCQkoMSA8PCAxNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIxX0NGR19TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0NOVFIxX0NGR19NQVNLCQkJKDB4ZiA8PCAwKQotCi0vKiBQRVJGX0NOVF9TRUwgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01DT05OSUQyX1NISUZUCQkJMjQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01DT05OSUQyX01BU0sJCQkoMHhmZiA8PCAyNCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFR0lPTl9TRUwyX1NISUZUCQkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFR0lPTl9TRUwyX01BU0sJCQkoMHgzIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNPTk5JRDFfU0hJRlQJCQk4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQ09OTklEMV9NQVNLCQkJKDB4ZmYgPDwgOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFR0lPTl9TRUwxX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVHSU9OX1NFTDFfTUFTSwkJCSgweDMgPDwgMCkKLQotLyogUEVSRl9DTlRfVElNICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UT1RBTF9USU1FX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVE9UQUxfVElNRV9NQVNLCQkJKDB4ZmZmZmZmZmYgPDwgMCkKLQotLyogUkVBRF9JRExFX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9MRU5fU0hJRlQJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0lETEVfTEVOX01BU0sJCQkoMHhmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0lOVEVSVkFMX1NISUZUCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0lETEVfSU5URVJWQUxfTUFTSwkJKDB4MWZmIDw8IDApCi0KLS8qIFJFQURfSURMRV9DVFJMX1NIRFcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9MRU5fU0hEV19TSElGVAkJMTYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1JFQURfSURMRV9MRU5fU0hEV19NQVNLCQkoMHhmIDw8IDE2KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0lOVEVSVkFMX1NIRFdfU0hJRlQJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9JRExFX0lOVEVSVkFMX1NIRFdfTUFTSwkoMHgxZmYgPDwgMCkKLQotLyogSVJRX0VPSSAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU9JX1NISUZUCQkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VPSV9NQVNLCQkJCSgxIDw8IDApCi0KLS8qIElSUVNUQVRVU19SQVdfU1lTICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ETlZfU1lTX1NISUZUCQkJMgotI2RlZmluZSBPTUFQNDRYWF9SRUdfRE5WX1NZU19NQVNLCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX1NZU19TSElGVAkJCTEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX1NZU19NQVNLCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VSUl9TWVNfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FUlJfU1lTX01BU0sJCQkoMSA8PCAwKQotCi0vKiBJUlFTVEFUVVNfUkFXX0xMICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ETlZfTExfU0hJRlQJCQkyCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ETlZfTExfTUFTSwkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9MTF9TSElGVAkJCTEKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX0xMX01BU0sJCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VSUl9MTF9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VSUl9MTF9NQVNLCQkJKDEgPDwgMCkKLQotLyogSVJRU1RBVFVTX1NZUyAqLwotCi0vKiBJUlFTVEFUVVNfTEwgKi8KLQotLyogSVJRRU5BQkxFX1NFVF9TWVMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0ROVl9TWVNfU0hJRlQJCQkyCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9ETlZfU1lTX01BU0sJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fVEFfU1lTX1NISUZUCQkJMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fVEFfU1lTX01BU0sJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fRVJSX1NZU19TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0VSUl9TWVNfTUFTSwkJCSgxIDw8IDApCi0KLS8qIElSUUVOQUJMRV9TRVRfTEwgKi8KLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0ROVl9MTF9TSElGVAkJCTIKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX0ROVl9MTF9NQVNLCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0VOX1RBX0xMX1NISUZUCQkJMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRU5fVEFfTExfTUFTSwkJCSgxIDw8IDEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9FUlJfTExfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19FTl9FUlJfTExfTUFTSwkJCSgxIDw8IDApCi0KLS8qIElSUUVOQUJMRV9DTFJfU1lTICovCi0KLS8qIElSUUVOQUJMRV9DTFJfTEwgKi8KLQotLyogWlFfQ09ORklHICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9DUzFFTl9TSElGVAkJCTMxCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9DUzFFTl9NQVNLCQkJKDEgPDwgMzEpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9DUzBFTl9TSElGVAkJCTMwCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9DUzBFTl9NQVNLCQkJKDEgPDwgMzApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9EVUFMQ0FMRU5fU0hJRlQJCQkyOQotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfRFVBTENBTEVOX01BU0sJCQkoMSA8PCAyOSkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1NGRVhJVEVOX1NISUZUCQkJMjgKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1NGRVhJVEVOX01BU0sJCQkoMSA8PCAyOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1pRSU5JVF9NVUxUX1NISUZUCQkxOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfWlFJTklUX01VTFRfTUFTSwkJKDB4MyA8PCAxOCkKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1pRX1pRQ0xfTVVMVF9TSElGVAkJCTE2Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9aUUNMX01VTFRfTUFTSwkJCSgweDMgPDwgMTYpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19aUV9SRUZJTlRFUlZBTF9TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfWlFfUkVGSU5URVJWQUxfTUFTSwkJKDB4ZmZmZiA8PCAwKQotCi0vKiBURU1QX0FMRVJUX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfQ1MxRU5fU0hJRlQJCQkzMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfQ1MxRU5fTUFTSwkJCSgxIDw8IDMxKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfQ1MwRU5fU0hJRlQJCQkzMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfQ1MwRU5fTUFTSwkJCSgxIDw8IDMwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfU0ZFWElURU5fU0hJRlQJCQkyOAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfU0ZFWElURU5fTUFTSwkJCSgxIDw8IDI4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfREVWV0RUX1NISUZUCQkJMjYKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX0RFVldEVF9NQVNLCQkJKDB4MyA8PCAyNikKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX1RBX0RFVkNOVF9TSElGVAkJCTI0Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9ERVZDTlRfTUFTSwkJCSgweDMgPDwgMjQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19UQV9SRUZJTlRFUlZBTF9TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfVEFfUkVGSU5URVJWQUxfTUFTSwkJKDB4M2ZmZmZmIDw8IDApCi0KLS8qIE9DUF9FUlJfTE9HICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQUREUlNQQUNFX1NISUZUCQkJMTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01BRERSU1BBQ0VfTUFTSwkJCSgweDMgPDwgMTQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQlVSU1RTRVFfU0hJRlQJCQkxMQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUJVUlNUU0VRX01BU0sJCQkoMHg3IDw8IDExKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNNRF9TSElGVAkJCQk4Ci0jZGVmaW5lIE9NQVA0NFhYX1JFR19NQ01EX01BU0sJCQkJKDB4NyA8PCA4KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfTUNPTk5JRF9TSElGVAkJCTAKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX01DT05OSURfTUFTSwkJCSgweGZmIDw8IDApCi0KLS8qIEREUl9QSFlfQ1RSTF8xICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMV9TSElGVAkJNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRERSX1BIWV9DVFJMXzFfTUFTSwkJKDB4ZmZmZmZmZiA8PCA0KQotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9MQVRFTkNZX1NISUZUCQkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9MQVRFTkNZX01BU0sJCQkoMHhmIDw8IDApCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ETExfU0xBVkVfRExZX0NUUkxfU0hJRlQJCTQKLSNkZWZpbmUgT01BUDQ0WFhfUkVHX0RMTF9TTEFWRV9ETFlfQ1RSTF9NQVNLCQkoMHhGRiA8PCA0KQotI2RlZmluZSBPTUFQNDRYWF9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NISUZUCTEyCi0jZGVmaW5lIE9NQVA0NFhYX0VNSUZfRERSX1BIWV9DVFJMXzFfQkFTRV9WQUxfTUFTSwkoMHhGRkZGRiA8PCAxMikKLQotLyogRERSX1BIWV9DVFJMXzFfU0hEVyAqLwotI2RlZmluZSBPTUFQNDRYWF9SRUdfRERSX1BIWV9DVFJMXzFfU0hEV19TSElGVAkJNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRERSX1BIWV9DVFJMXzFfU0hEV19NQVNLCQkoMHhmZmZmZmZmIDw8IDQpCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19SRUFEX0xBVEVOQ1lfU0hEV19TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfUkVBRF9MQVRFTkNZX1NIRFdfTUFTSwkJKDB4ZiA8PCAwKQotI2RlZmluZSBPTUFQNDRYWF9SRUdfRExMX1NMQVZFX0RMWV9DVFJMX1NIRFdfU0hJRlQJNAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRExMX1NMQVZFX0RMWV9DVFJMX1NIRFdfTUFTSwkoMHhGRiA8PCA0KQotI2RlZmluZSBPTUFQNDRYWF9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NIRFdfU0hJRlQgMTIKLSNkZWZpbmUgT01BUDQ0WFhfRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTF9TSERXX01BU0sJKDB4RkZGRkYgPDwgMTIpCi0KLS8qIEREUl9QSFlfQ1RSTF8yICovCi0jZGVmaW5lIE9NQVA0NFhYX1JFR19ERFJfUEhZX0NUUkxfMl9TSElGVAkJMAotI2RlZmluZSBPTUFQNDRYWF9SRUdfRERSX1BIWV9DVFJMXzJfTUFTSwkJKDB4ZmZmZmZmZmYgPDwgMCkKLQotLyogRE1NICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNTV9MSVNBX01BUF9CQVNFCTB4NEUwMDAwNDAKLQotLyogTWVtb3J5IEFkYXB0ZXIgKDQ0NjAgb253YXJkcykgKi8KLSNkZWZpbmUgT01BUDQ0WFhfTUFfTElTQV9NQVBfQkFTRQkJMHg0ODJBRjA0MAotCi0vKiBETU1fTElTQV9NQVAgKi8KLSNkZWZpbmUgT01BUDQ0WFhfU1lTX0FERFJfU0hJRlQJCTI0Ci0jZGVmaW5lIE9NQVA0NFhYX1NZU19BRERSX01BU0sJCSgweGZmIDw8IDI0KQotI2RlZmluZSBPTUFQNDRYWF9TWVNfU0laRV9TSElGVAkJMjAKLSNkZWZpbmUgT01BUDQ0WFhfU1lTX1NJWkVfTUFTSwkJKDB4NyA8PCAyMCkKLSNkZWZpbmUgT01BUDQ0WFhfU0RSQ19JTlRMX1NISUZUCTE4Ci0jZGVmaW5lIE9NQVA0NFhYX1NEUkNfSU5UTF9NQVNLCQkoMHgzIDw8IDE4KQotI2RlZmluZSBPTUFQNDRYWF9TRFJDX0FERFJTUENfU0hJRlQJMTYKLSNkZWZpbmUgT01BUDQ0WFhfU0RSQ19BRERSU1BDX01BU0sJKDB4MyA8PCAxNikKLSNkZWZpbmUgT01BUDQ0WFhfU0RSQ19NQVBfU0hJRlQJCTgKLSNkZWZpbmUgT01BUDQ0WFhfU0RSQ19NQVBfTUFTSwkJKDB4MyA8PCA4KQotI2RlZmluZSBPTUFQNDRYWF9TRFJDX0FERFJfU0hJRlQJMAotI2RlZmluZSBPTUFQNDRYWF9TRFJDX0FERFJfTUFTSwkJKDB4ZmYgPDwgMCkKLQotLyogRE1NX0xJU0FfTUFQIGZpZWxkcyAqLwotI2RlZmluZSBETU1fU0RSQ19NQVBfVU5NQVBQRUQJCTAKLSNkZWZpbmUgRE1NX1NEUkNfTUFQX0VNSUYxX09OTFkJCTEKLSNkZWZpbmUgRE1NX1NEUkNfTUFQX0VNSUYyX09OTFkJCTIKLSNkZWZpbmUgRE1NX1NEUkNfTUFQX0VNSUYxX0FORF9FTUlGMgkzCi0KLSNkZWZpbmUgRE1NX1NEUkNfSU5UTF9OT05FCQkwCi0jZGVmaW5lIERNTV9TRFJDX0lOVExfMTI4QgkJMQotI2RlZmluZSBETU1fU0RSQ19JTlRMXzI1NkIJCTIKLSNkZWZpbmUgRE1NX1NEUkNfSU5UTF81MTIJCTMKLQotI2RlZmluZSBETU1fU0RSQ19BRERSX1NQQ19TRFJBTQkJMAotI2RlZmluZSBETU1fU0RSQ19BRERSX1NQQ19OVk0JCTEKLSNkZWZpbmUgRE1NX1NEUkNfQUREUl9TUENfSU5WQUxJRAkyCi0KLSNkZWZpbmUgRE1NX0xJU0FfTUFQX0lOVEVSTEVBVkVEX0JBU0VfVkFMCQkoXAotCShETU1fU0RSQ19NQVBfRU1JRjFfQU5EX0VNSUYyIDw8IE9NQVA0NFhYX1NEUkNfTUFQX1NISUZUKSB8XAotCShETU1fU0RSQ19BRERSX1NQQ19TRFJBTSA8PCBPTUFQNDRYWF9TRFJDX0FERFJTUENfU0hJRlQpIHxcCi0JKERNTV9TRFJDX0lOVExfMTI4QiA8PCBPTUFQNDRYWF9TRFJDX0lOVExfU0hJRlQpIHxcCi0JKENPTkZJR19TWVNfU0RSQU1fQkFTRSA8PCBPTUFQNDRYWF9TWVNfQUREUl9TSElGVCkpCi0KLSNkZWZpbmUgRE1NX0xJU0FfTUFQX0VNSUYxX09OTFlfQkFTRV9WQUwJKFwKLQkoRE1NX1NEUkNfTUFQX0VNSUYxX09OTFkgPDwgT01BUDQ0WFhfU0RSQ19NQVBfU0hJRlQpfFwKLQkoRE1NX1NEUkNfQUREUl9TUENfU0RSQU0gPDwgT01BUDQ0WFhfU0RSQ19BRERSU1BDX1NISUZUKXxcCi0JKERNTV9TRFJDX0lOVExfTk9ORSA8PCBPTUFQNDRYWF9TRFJDX0lOVExfU0hJRlQpKQotCi0jZGVmaW5lIERNTV9MSVNBX01BUF9FTUlGMl9PTkxZX0JBU0VfVkFMCShcCi0JKERNTV9TRFJDX01BUF9FTUlGMl9PTkxZIDw8IE9NQVA0NFhYX1NEUkNfTUFQX1NISUZUKXxcCi0JKERNTV9TRFJDX0FERFJfU1BDX1NEUkFNIDw8IE9NQVA0NFhYX1NEUkNfQUREUlNQQ19TSElGVCl8XAotCShETU1fU0RSQ19JTlRMX05PTkUgPDwgT01BUDQ0WFhfU0RSQ19JTlRMX1NISUZUKSkKLQotLyogVHJhcCBmb3IgaW52YWxpZCBUSUxFUiBQQVQgZW50cmllcyAqLwotI2RlZmluZSBETU1fTElTQV9NQVBfMF9JTlZBTF9BRERSX1RSQVAJCShcCi0JKDAgIDw8IE9NQVA0NFhYX1NEUkNfQUREUl9TSElGVCkgfFwKLQkoRE1NX1NEUkNfTUFQX0VNSUYxX09OTFkgPDwgT01BUDQ0WFhfU0RSQ19NQVBfU0hJRlQpfFwKLQkoRE1NX1NEUkNfQUREUl9TUENfSU5WQUxJRCA8PCBPTUFQNDRYWF9TRFJDX0FERFJTUENfU0hJRlQpfFwKLQkoRE1NX1NEUkNfSU5UTF9OT05FIDw8IE9NQVA0NFhYX1NEUkNfSU5UTF9TSElGVCl8XAotCSgweEZGIDw8IE9NQVA0NFhYX1NZU19BRERSX1NISUZUKSkKLQotCi0vKiBSZWcgbWFwcGluZyBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBlbWlmX3JlZ19zdHJ1Y3QgewotCXUzMiBlbWlmX21vZF9pZF9yZXY7Ci0JdTMyIGVtaWZfc3RhdHVzOwotCXUzMiBlbWlmX3NkcmFtX2NvbmZpZzsKLQl1MzIgZW1pZl9scGRkcjJfbnZtX2NvbmZpZzsKLQl1MzIgZW1pZl9zZHJhbV9yZWZfY3RybDsKLQl1MzIgZW1pZl9zZHJhbV9yZWZfY3RybF9zaGR3OwotCXUzMiBlbWlmX3NkcmFtX3RpbV8xOwotCXUzMiBlbWlmX3NkcmFtX3RpbV8xX3NoZHc7Ci0JdTMyIGVtaWZfc2RyYW1fdGltXzI7Ci0JdTMyIGVtaWZfc2RyYW1fdGltXzJfc2hkdzsKLQl1MzIgZW1pZl9zZHJhbV90aW1fMzsKLQl1MzIgZW1pZl9zZHJhbV90aW1fM19zaGR3OwotCXUzMiBlbWlmX2xwZGRyMl9udm1fdGltOwotCXUzMiBlbWlmX2xwZGRyMl9udm1fdGltX3NoZHc7Ci0JdTMyIGVtaWZfcHdyX21nbXRfY3RybDsKLQl1MzIgZW1pZl9wd3JfbWdtdF9jdHJsX3NoZHc7Ci0JdTMyIGVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGE7Ci0JdTMyIHBhZGRpbmcxWzFdOwotCXUzMiBlbWlmX2xwZGRyMl9tb2RlX3JlZ19kYXRhX2VzMjsKLQl1MzIgcGFkZGluZzExWzFdOwotCXUzMiBlbWlmX2xwZGRyMl9tb2RlX3JlZ19jZmc7Ci0JdTMyIGVtaWZfbDNfY29uZmlnOwotCXUzMiBlbWlmX2wzX2NmZ192YWxfMTsKLQl1MzIgZW1pZl9sM19jZmdfdmFsXzI7Ci0JdTMyIGVtaWZfaW9kZnRfdGxnYzsKLQl1MzIgcGFkZGluZzJbN107Ci0JdTMyIGVtaWZfcGVyZl9jbnRfMTsKLQl1MzIgZW1pZl9wZXJmX2NudF8yOwotCXUzMiBlbWlmX3BlcmZfY250X2NmZzsKLQl1MzIgZW1pZl9wZXJmX2NudF9zZWw7Ci0JdTMyIGVtaWZfcGVyZl9jbnRfdGltOwotCXUzMiBwYWRkaW5nMzsKLQl1MzIgZW1pZl9yZWFkX2lkbGVjdHJsOwotCXUzMiBlbWlmX3JlYWRfaWRsZWN0cmxfc2hkdzsKLQl1MzIgcGFkZGluZzQ7Ci0JdTMyIGVtaWZfaXJxc3RhdHVzX3Jhd19zeXM7Ci0JdTMyIGVtaWZfaXJxc3RhdHVzX3Jhd19sbDsKLQl1MzIgZW1pZl9pcnFzdGF0dXNfc3lzOwotCXUzMiBlbWlmX2lycXN0YXR1c19sbDsKLQl1MzIgZW1pZl9pcnFlbmFibGVfc2V0X3N5czsKLQl1MzIgZW1pZl9pcnFlbmFibGVfc2V0X2xsOwotCXUzMiBlbWlmX2lycWVuYWJsZV9jbHJfc3lzOwotCXUzMiBlbWlmX2lycWVuYWJsZV9jbHJfbGw7Ci0JdTMyIHBhZGRpbmc1OwotCXUzMiBlbWlmX3pxX2NvbmZpZzsKLQl1MzIgZW1pZl90ZW1wX2FsZXJ0X2NvbmZpZzsKLQl1MzIgZW1pZl9sM19lcnJfbG9nOwotCXUzMiBwYWRkaW5nNls0XTsKLQl1MzIgZW1pZl9kZHJfcGh5X2N0cmxfMTsKLQl1MzIgZW1pZl9kZHJfcGh5X2N0cmxfMV9zaGR3OwotCXUzMiBlbWlmX2Rkcl9waHlfY3RybF8yOwotfTsKLQotc3RydWN0IGRtbV9saXNhX21hcF9yZWdzIHsKLQl1MzIgZG1tX2xpc2FfbWFwXzA7Ci0JdTMyIGRtbV9saXNhX21hcF8xOwotCXUzMiBkbW1fbGlzYV9tYXBfMjsKLQl1MzIgZG1tX2xpc2FfbWFwXzM7Ci19OwotCi0jZGVmaW5lIENTMAkwCi0jZGVmaW5lIENTMQkxCi0vKiBUaGUgbWF4aW11bSBmcmVxdWVuY3kgYXQgd2hpY2ggdGhlIExQRERSMiBpbnRlcmZhY2UgY2FuIG9wZXJhdGUgaW4gSHoqLwotI2RlZmluZSBNQVhfTFBERFIyX0ZSRVEJNDAwMDAwMDAwCS8qIDQwMCBNSHogKi8KLQotLyoKLSAqIFRoZSBwZXJpb2Qgb2YgRERSIGNsayBpcyByZXByZXNlbnRlZCBhcyBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGZvcgotICogYmV0dGVyIGFjY3VyYWN5IGluIGludGVnZXIgYmFzZWQgY2FsY3VsYXRpb25zLiBIb3dldmVyLCBpZiB0aGUgbnVtZXJhdG9yCi0gKiBhbmQgZGVub21pbmF0b3IgYXJlIHZlcnkgaHVnZSB0aGVyZSBtYXkgYmUgY2hhbmNlcyBvZiBvdmVyZmxvdyBpbgotICogY2FsY3VsYXRpb25zLiBTbywgYXMgYSB0cmFkZS1vZmYga2VlcCBkZW5vbWluYXRvcihhbmQgY29uc2VxdWVudGx5Ci0gKiBudW1lcmF0b3IpIHdpdGhpbiBhIGxpbWl0IHNhY3JpZmljaW5nIHNvbWUgYWNjdXJhY3kgLSBidXQgbm90IG11Y2gKLSAqIElmIGRlbm9taW5hdG9yIGFuZCBudW1lcmF0b3IgYXJlIGFscmVhZHkgc21hbGwgKHN1Y2ggYXMgYXQgNDAwIE1IeikKLSAqIG5vIGFkanVzdG1lbnQgaXMgbmVlZGVkCi0gKi8KLSNkZWZpbmUgRU1JRl9QRVJJT0RfREVOX0xJTUlUCTEwMDAKLS8qCi0gKiBNYXhpbXVtIG51bWJlciBvZiBkaWZmZXJlbnQgZnJlcXVlbmNpZXMgc3VwcG9ydGVkIGJ5IEVNSUYgZHJpdmVyCi0gKiBEZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcG9pbnRlciBhcnJheSBmb3IgcmVnaXN0ZXIKLSAqIGNhY2hlCi0gKi8KLSNkZWZpbmUgRU1JRl9NQVhfTlVNX0ZSRVFVRU5DSUVTCTYKLS8qCi0gKiBJbmRpY2VzIGludG8gdGhlIEFkZHJlc3NpbmcgVGFibGUgYXJyYXkuCi0gKiBPbmUgZW50cnkgZWFjaCBmb3IgYWxsIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZGV2aWNlcyB3aXRoIGRpZmZlcmVudAotICogYWRkcmVzc2luZyBzY2hlbWVzCi0gKi8KLSNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDY0TQkwCi0jZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgxMjhNCTEKLSNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDI1Nk0JMgotI2RlZmluZSBBRERSX1RBQkxFX0lOREVYNTEyTQkzCi0jZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgxR1M0CTQKLSNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDJHUzQJNQotI2RlZmluZSBBRERSX1RBQkxFX0lOREVYNEcJNgotI2RlZmluZSBBRERSX1RBQkxFX0lOREVYOEcJNwotI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMUdTMgk4Ci0jZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgyR1MyCTkKLSNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWE1BWAkxMAotCi0vKiBOdW1iZXIgb2YgUm93IGJpdHMgKi8KLSNkZWZpbmUgUk9XXzkgIDAKLSNkZWZpbmUgUk9XXzEwIDEKLSNkZWZpbmUgUk9XXzExIDIKLSNkZWZpbmUgUk9XXzEyIDMKLSNkZWZpbmUgUk9XXzEzIDQKLSNkZWZpbmUgUk9XXzE0IDUKLSNkZWZpbmUgUk9XXzE1IDYKLSNkZWZpbmUgUk9XXzE2IDcKLQotLyogTnVtYmVyIG9mIENvbHVtbiBiaXRzICovCi0jZGVmaW5lIENPTF84ICAgMAotI2RlZmluZSBDT0xfOSAgIDEKLSNkZWZpbmUgQ09MXzEwICAyCi0jZGVmaW5lIENPTF8xMSAgMwotI2RlZmluZSBDT0xfNyAgIDQgLypOb3Qgc3VwcG9ydGVkIGJ5IE9NQVAgaW5jbHVkZWQgZm9yIGNvbXBsZXRlbmVzcyAqLwotCi0vKiBOdW1iZXIgb2YgQmFua3MqLwotI2RlZmluZSBCQU5LUzEgMAotI2RlZmluZSBCQU5LUzIgMQotI2RlZmluZSBCQU5LUzQgMgotI2RlZmluZSBCQU5LUzggMwotCi0vKiBSZWZyZXNoIHJhdGUgaW4gbWljcm8gc2Vjb25kcyB4IDEwICovCi0jZGVmaW5lIFRfUkVGSV8xNV82CTE1NgotI2RlZmluZSBUX1JFRklfN184CTc4Ci0jZGVmaW5lIFRfUkVGSV8zXzkJMzkKLQotI2RlZmluZSBFQkFOS19DUzFfRElTCTAKLSNkZWZpbmUgRUJBTktfQ1MxX0VOCTEKLQotLyogUmVhZCBMYXRlbmN5IHVzZWQgYnkgdGhlIGRldmljZSBhdCByZXNldCAqLwotI2RlZmluZSBSTF9CT09UCQkzCi0vKiBSZWFkIExhdGVuY3kgZm9yIHRoZSBoaWdoZXN0IGZyZXF1ZW5jeSB5b3Ugd2FudCB0byB1c2UgKi8KLSNkZWZpbmUgUkxfRklOQUwJNgotCi0vKiBJbnRlcmxlYXZpbmcgcG9saWNpZXMgYXQgRU1JRiBsZXZlbC0gYmV0d2VlbiBiYW5rcyBhbmQgQ2hpcCBTZWxlY3RzICovCi0jZGVmaW5lIEVNSUZfSU5URVJMRUFWSU5HX1BPTElDWV9NQVhfSU5URVJMRUFWSU5HCTAKLSNkZWZpbmUgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZX05PX0JBTktfSU5URVJMRUFWSU5HCTMKLQotLyoKLSAqIEludGVybGVhdmluZyBwb2xpY3kgdG8gYmUgdXNlZAotICogQ3VycmVudGx5IHNldCB0byBNQVggaW50ZXJsZWF2aW5nIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKLSAqLwotI2RlZmluZSBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1kgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZX01BWF9JTlRFUkxFQVZJTkcKLQotLyogU3RhdGUgb2YgdGhlIGNvcmUgdm9sdGFnZToKLSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzb21lIHBhcmFtZXRlcnMgc3VjaCBhcyByZWFkIGlkbGUgY29udHJvbCBhbmQKLSAqIFpRIGNhbGlicmF0aW9uIHRpbWluZ3MuIFRpbWluZ3MgYXJlIG11Y2ggc3RyaWN0ZXIgd2hlbiB2b2x0YWdlIHJhbXAKLSAqIGlzIGhhcHBlbmluZyBjb21wYXJlZCB0byB3aGVuIHRoZSB2b2x0YWdlIGlzIHN0YWJsZS4KLSAqIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHR3byBzZXRzIG9mIHZhbHVlcyBmb3IgdGhlc2UgcGFyYW1ldGVycyBhbmQgdXNlCi0gKiB0aGVtIGFjY29yZGluZ2x5Ci0gKi8KLSNkZWZpbmUgTFBERFIyX1ZPTFRBR0VfU1RBQkxFCTAKLSNkZWZpbmUgTFBERFIyX1ZPTFRBR0VfUkFNUElORwkxCi0KLS8qIExlbmd0aCBvZiB0aGUgZm9yY2VkIHJlYWQgaWRsZSBwZXJpb2QgaW4gdGVybXMgb2YgY3ljbGVzICovCi0jZGVmaW5lIEVNSUZfUkVHX1JFQURfSURMRV9MRU5fVkFMCTUKLQotLyogSW50ZXJ2YWwgYmV0d2VlbiBmb3JjZWQgJ3JlYWQgaWRsZXMnICovCi0vKiBUbyBiZSB1c2VkIHdoZW4gdm9sdGFnZSBpcyBjaGFuZ2VkIGZvciBEUFMvRFZGUyAtIDF1cyAqLwotI2RlZmluZSBSRUFEX0lETEVfSU5URVJWQUxfRFZGUwkJKDEqMTAwMCkKLS8qCi0gKiBUbyBiZSB1c2VkIHdoZW4gdm9sdGFnZSBpcyBub3Qgc2NhbGVkIGV4Y2VwdCBieSBTbWFydCBSZWZsZXgKLSAqIDUwdXMgLSBvciBtYXhpbXVtIHZhbHVlIHdpbGwgZG8KLSAqLwotI2RlZmluZSBSRUFEX0lETEVfSU5URVJWQUxfTk9STUFMCSg1MCoxMDAwKQotCi0KLS8qCi0gKiBVbmxlc3Mgdm9sdGFnZSBpcyBjaGFuZ2luZyBkdWUgdG8gRFZGUyBvbmUgWlFDUyBjb21tYW5kIGV2ZXJ5IDUwbXMgc2hvdWxkCi0gKiBiZSBlbm91Z2guIFRoaXMgc2hvdWxlIGJlIGVub3VnaCBhbHNvIGluIHRoZSBjYXNlIHdoZW4gdm9sdGFnZSBpcyBjaGFuZ2luZwotICogZHVlIHRvIHNtYXJ0LXJlZmxleC4KLSAqLwotI2RlZmluZSBFTUlGX1pRQ1NfSU5URVJWQUxfTk9STUFMX0lOX1VTCSg1MCoxMDAwKQotLyoKLSAqIElmIHZvbHRhZ2UgaXMgY2hhbmdpbmcgZHVlIHRvIERWRlMgWlFDUyBzaG91bGQgYmUgcGVyZm9ybWVkIG1vcmUKLSAqIG9mdGVuKGV2ZXJ5IDUwdXMpCi0gKi8KLSNkZWZpbmUgRU1JRl9aUUNTX0lOVEVSVkFMX0RWRlNfSU5fVVMJNTAKLQotLyogVGhlIGludGVydmFsIGJldHdlZW4gWlFDTCBjb21tYW5kcyBhcyBhIG11bHRpcGxlIG9mIFpRQ1MgaW50ZXJ2YWwgKi8KLSNkZWZpbmUgUkVHX1pRX1pRQ0xfTVVMVAkJNAotLyogVGhlIGludGVydmFsIGJldHdlZW4gWlFJTklUIGNvbW1hbmRzIGFzIGEgbXVsdGlwbGUgb2YgWlFDTCBpbnRlcnZhbCAqLwotI2RlZmluZSBSRUdfWlFfWlFJTklUX01VTFQJCTMKLS8qIEVuYWJsZSBaUSBDYWxpYnJhdGlvbiBvbiBleGl0aW5nIFNlbGYtcmVmcmVzaCAqLwotI2RlZmluZSBSRUdfWlFfU0ZFWElURU5fRU5BQkxFCQkxCi0vKgotICogWlEgQ2FsaWJyYXRpb24gc2ltdWx0YW5lb3VzbHkgb24gYm90aCBjaGlwLXNlbGVjdHM6Ci0gKiBOZWVkcyBvbmUgY2FsaWJyYXRpb24gcmVzaXN0b3IgcGVyIENTCi0gKiBOb25lIG9mIHRoZSBib2FyZHMgdGhhdCB3ZSBrbm93IG9mIGhhdmUgdGhpcyBjYXBhYmlsaXR5Ci0gKiBTbyBkaXNhYmxlZCBieSBkZWZhdWx0Ci0gKi8KLSNkZWZpbmUgUkVHX1pRX0RVQUxDQUxFTl9ESVNBQkxFCTAKLS8qCi0gKiBFbmFibGUgWlEgQ2FsaWJyYXRpb24gYnkgZGVmYXVsdCBvbiBDUzAuIElmIHdlIGFyZSBhc2tlZCB0byBwcm9ncmFtCi0gKiB0aGUgRU1JRiB0aGVyZSB3aWxsIGJlIHNvbWV0aGluZyBjb25uZWN0ZWQgdG8gQ1MwIGZvciBzdXJlCi0gKi8KLSNkZWZpbmUgUkVHX1pRX0NTMEVOX0VOQUJMRQkJMQotCi0vKiBFTUlGX1BXUl9NR01UX0NUUkwgcmVnaXN0ZXIgKi8KLS8qIExvdyBwb3dlciBtb2RlcyAqLwotI2RlZmluZSBMUF9NT0RFX0RJU0FCTEUJCTAKLSNkZWZpbmUgTFBfTU9ERV9DTE9DS19TVE9QCTEKLSNkZWZpbmUgTFBfTU9ERV9TRUxGX1JFRlJFU0gJMgotI2RlZmluZSBMUF9NT0RFX1BXUl9ETgkJMwotCi0vKiBSRUdfRFBEX0VOICovCi0jZGVmaW5lIERQRF9ESVNBQkxFCTAKLSNkZWZpbmUgRFBEX0VOQUJMRQkxCi0KLS8qIE1heGltdW0gZGVsYXkgYmVmb3JlIExvdyBQb3dlciBNb2RlcyAqLwotI2RlZmluZSBSRUdfQ1NfVElNCQkweEYKLSNkZWZpbmUgUkVHX1NSX1RJTQkJMHhGCi0jZGVmaW5lIFJFR19QRF9USU0JCTB4RgotCi0vKiBFTUlGX1BXUl9NR01UX0NUUkwgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRU1JRl9QV1JfTUdNVF9DVFJMIChcCi0JKChSRUdfQ1NfVElNIDw8IE9NQVA0NFhYX1JFR19DU19USU1fU0hJRlQpICYgT01BUDQ0WFhfUkVHX0NTX1RJTV9NQVNLKXxcCi0JKChSRUdfU1JfVElNIDw8IE9NQVA0NFhYX1JFR19TUl9USU1fU0hJRlQpICYgT01BUDQ0WFhfUkVHX1NSX1RJTV9NQVNLKXxcCi0JKChSRUdfUERfVElNIDw8IE9NQVA0NFhYX1JFR19QRF9USU1fU0hJRlQpICYgT01BUDQ0WFhfUkVHX1BEX1RJTV9NQVNLKXxcCi0JKChSRUdfUERfVElNIDw8IE9NQVA0NFhYX1JFR19QRF9USU1fU0hJRlQpICYgT01BUDQ0WFhfUkVHX1BEX1RJTV9NQVNLKXxcCi0JKChMUF9NT0RFX0RJU0FCTEUgPDwgT01BUDQ0WFhfUkVHX0xQX01PREVfU0hJRlQpXAotCQkJJiBPTUFQNDRYWF9SRUdfTFBfTU9ERV9NQVNLKSB8XAotCSgoRFBEX0RJU0FCTEUgPDwgT01BUDQ0WFhfUkVHX0RQRF9FTl9TSElGVClcCi0JCQkmIE9NQVA0NFhYX1JFR19EUERfRU5fTUFTSykpXAotCi0jZGVmaW5lIEVNSUZfUFdSX01HTVRfQ1RSTF9TSERXIChcCi0JKChSRUdfQ1NfVElNIDw8IE9NQVA0NFhYX1JFR19DU19USU1fU0hEV19TSElGVClcCi0JCQkmIE9NQVA0NFhYX1JFR19DU19USU1fU0hEV19NQVNLKSB8XAotCSgoUkVHX1NSX1RJTSA8PCBPTUFQNDRYWF9SRUdfU1JfVElNX1NIRFdfU0hJRlQpXAotCQkJJiBPTUFQNDRYWF9SRUdfU1JfVElNX1NIRFdfTUFTSykgfFwKLQkoKFJFR19QRF9USU0gPDwgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSERXX1NISUZUKVwKLQkJCSYgT01BUDQ0WFhfUkVHX1BEX1RJTV9TSERXX01BU0spIHxcCi0JKChSRUdfUERfVElNIDw8IE9NQVA0NFhYX1JFR19QRF9USU1fU0hEV19TSElGVClcCi0JCQkmIE9NQVA0NFhYX1JFR19QRF9USU1fU0hEV19NQVNLKSkKLQotLyogRU1JRl9MM19DT05GSUcgcmVnaXN0ZXIgdmFsdWUgKi8KLSNkZWZpbmUgRU1JRl9MM19DT05GSUdfVkFMX1NZU18xMF9MTF8wCTB4MEEwMDAwRkYKLSNkZWZpbmUgRU1JRl9MM19DT05GSUdfVkFMX1NZU18xMF9NUFVfM19MTF8wCTB4MEEzMDAwMDAKLS8qCi0gKiBWYWx1ZSBvZiBiaXRzIDEyOjMxIG9mIEREUl9QSFlfQ1RSTF8xIHJlZ2lzdGVyOgotICogQWxsIHRoZXNlIGZpZWxkcyBoYXZlIG1hZ2ljIHZhbHVlcyBkZXBlbmRlbnQgb24gZnJlcXVlbmN5IGFuZAotICogZGV0ZXJtaW5lZCBieSBQSFkgYW5kIERMTCBpbnRlZ3JhdGlvbiB3aXRoIEVNSUYuIFNldHRpbmcgdGhlIG1hZ2ljCi0gKiB2YWx1ZXMgc3VnZ2VzdGVkIGJ5IGh3IHRlYW0uCi0gKi8KLSNkZWZpbmUgRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTAkJCTB4MDQ5RkYKLSNkZWZpbmUgRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfNDAwX01IWgkJCTB4NDEKLSNkZWZpbmUgRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfMjAwX01IWgkJCTB4ODAKLSNkZWZpbmUgRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfMTAwX01IWl9BTkRfTEVTUwkweEZGCi0KLS8qCi0qIE1SMSB2YWx1ZToKLSogQnVyc3QgbGVuZ3RoCTogOAotKiBCdXJzdCB0eXBlCTogc2VxdWVudGlhbAotKiBXcmFwCQk6IGVuYWJsZWQKLSogbldSCQk6IDMoZGVmYXVsdCkuIEVNSUYgZG9lcyBub3QgZG8gcHJlLWNoYXJnZS4KLSoJCTogU28gbldSIGlzIGRvbid0IGNhcmUKLSovCi0jZGVmaW5lIE1SMV9CTF84X0JUX1NFUV9XUkFQX0VOX05XUl8zCTB4MjMKLQotLyogTVIyICovCi0jZGVmaW5lIE1SMl9STDNfV0wxCQkJMQotI2RlZmluZSBNUjJfUkw0X1dMMgkJCTIKLSNkZWZpbmUgTVIyX1JMNV9XTDIJCQkzCi0jZGVmaW5lIE1SMl9STDZfV0wzCQkJNAotCi0vKiBNUjEwOiBaUSBjYWxpYnJhdGlvbiBjb2RlcyAqLwotI2RlZmluZSBNUjEwX1pRX1pRQ1MJCTB4NTYKLSNkZWZpbmUgTVIxMF9aUV9aUUNMCQkweEFCCi0jZGVmaW5lIE1SMTBfWlFfWlFJTklUCQkweEZGCi0jZGVmaW5lIE1SMTBfWlFfWlFSRVNFVAkJMHhDMwotCi0vKiBURU1QX0FMRVJUX0NPTkZJRyAqLwotI2RlZmluZSBURU1QX0FMRVJUX1BPTExfSU5URVJWQUxfTVMJMzYwIC8qIGZvciB0ZW1wIGdyYWRpZW50IC0gNSBDL3MgKi8KLSNkZWZpbmUgVEVNUF9BTEVSVF9DT05GSUdfREVWQ1RfMQkwCi0jZGVmaW5lIFRFTVBfQUxFUlRfQ09ORklHX0RFVldEVF8zMgkyCi0KLS8qIE1SMTYgdmFsdWU6IHJlZnJlc2ggZnVsbCBhcnJheShubyBwYXJ0aWFsIGFycmF5IHNlbGYgcmVmcmVzaCkgKi8KLSNkZWZpbmUgTVIxNl9SRUZfRlVMTF9BUlJBWQkwCi0KLS8qCi0gKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHdlIGtlZXAgaW4gb3VyIGFycmF5IG9mIHRpbWluZyB0YWJsZXMKLSAqIFdlIG5lZWQgbm90IGtlZXAgYWxsIHRoZSBzcGVlZCBiaW5zIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlCi0gKiBXZSBuZWVkIHRvIGtlZXAgdGltaW5nIHRhYmxlcyBmb3Igb25seSB0aGUgc3BlZWQgYmlucyB0aGF0IHdlCi0gKiBhcmUgaW50ZXJlc3RlZCBpbgotICovCi0jZGVmaW5lIE1BWF9OVU1fU1BFRURCSU5TCTQKLQotLyogTFBERFIyIERlbnNpdGllcyAqLwotI2RlZmluZSBMUEREUjJfREVOU0lUWV82NE1iCTAKLSNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMTI4TWIJMQotI2RlZmluZSBMUEREUjJfREVOU0lUWV8yNTZNYgkyCi0jZGVmaW5lIExQRERSMl9ERU5TSVRZXzUxMk1iCTMKLSNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMUdiCTQKLSNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMkdiCTUKLSNkZWZpbmUgTFBERFIyX0RFTlNJVFlfNEdiCTYKLSNkZWZpbmUgTFBERFIyX0RFTlNJVFlfOEdiCTcKLSNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMTZHYgk4Ci0jZGVmaW5lIExQRERSMl9ERU5TSVRZXzMyR2IJOQotCi0vKiBMUEREUjIgdHlwZSAqLwotI2RlZmluZQlMUEREUjJfVFlQRV9TNAkwCi0jZGVmaW5lCUxQRERSMl9UWVBFX1MyCTEKLSNkZWZpbmUJTFBERFIyX1RZUEVfTlZNCTIKLQotLyogTFBERFIyIElPIHdpZHRoICovCi0jZGVmaW5lCUxQRERSMl9JT19XSURUSF8zMgkwCi0jZGVmaW5lCUxQRERSMl9JT19XSURUSF8xNgkxCi0jZGVmaW5lCUxQRERSMl9JT19XSURUSF84CTIKLQotLyogTW9kZSByZWdpc3RlciBudW1iZXJzICovCi0jZGVmaW5lIExQRERSMl9NUjAJMAotI2RlZmluZSBMUEREUjJfTVIxCTEKLSNkZWZpbmUgTFBERFIyX01SMgkyCi0jZGVmaW5lIExQRERSMl9NUjMJMwotI2RlZmluZSBMUEREUjJfTVI0CTQKLSNkZWZpbmUgTFBERFIyX01SNQk1Ci0jZGVmaW5lIExQRERSMl9NUjYJNgotI2RlZmluZSBMUEREUjJfTVI3CTcKLSNkZWZpbmUgTFBERFIyX01SOAk4Ci0jZGVmaW5lIExQRERSMl9NUjkJOQotI2RlZmluZSBMUEREUjJfTVIxMAkxMAotI2RlZmluZSBMUEREUjJfTVIxMQkxMQotI2RlZmluZSBMUEREUjJfTVIxNgkxNgotI2RlZmluZSBMUEREUjJfTVIxNwkxNwotI2RlZmluZSBMUEREUjJfTVIxOAkxOAotCi0vKiBNUjAgKi8KLSNkZWZpbmUgTFBERFIyX01SMF9EQUlfU0hJRlQJMAotI2RlZmluZSBMUEREUjJfTVIwX0RBSV9NQVNLCTEKLSNkZWZpbmUgTFBERFIyX01SMF9ESV9TSElGVAkxCi0jZGVmaW5lIExQRERSMl9NUjBfRElfTUFTSwkoMSA8PCAxKQotI2RlZmluZSBMUEREUjJfTVIwX0ROVklfU0hJRlQJMgotI2RlZmluZSBMUEREUjJfTVIwX0ROVklfTUFTSwkoMSA8PCAyKQotCi0vKiBNUjQgKi8KLSNkZWZpbmUgTVI0X1NEUkFNX1JFRl9SQVRFX1NISUZUCTAKLSNkZWZpbmUgTVI0X1NEUkFNX1JFRl9SQVRFX01BU0sJCTcKLSNkZWZpbmUgTVI0X1RVRl9TSElGVAkJCTcKLSNkZWZpbmUgTVI0X1RVRl9NQVNLCQkJKDEgPDwgNykKLQotLyogTVI0IFNEUkFNIFJlZnJlc2ggUmF0ZSBmaWVsZCB2YWx1ZXMgKi8KLSNkZWZpbmUgU0RSQU1fVEVNUF9MRVNTX0xPV19TSFVURE9XTgkJCTB4MAotI2RlZmluZSBTRFJBTV9URU1QX0xFU1NfNFhfUkVGUkVTSF9BTkRfVElNSU5HUwkJMHgxCi0jZGVmaW5lIFNEUkFNX1RFTVBfTEVTU18yWF9SRUZSRVNIX0FORF9USU1JTkdTCQkweDIKLSNkZWZpbmUgU0RSQU1fVEVNUF9OT01JTkFMCQkJCTB4MwotI2RlZmluZSBTRFJBTV9URU1QX1JFU0VSVkVEXzQJCQkJMHg0Ci0jZGVmaW5lIFNEUkFNX1RFTVBfSElHSF9ERVJBVEVfUkVGUkVTSAkJCTB4NQotI2RlZmluZSBTRFJBTV9URU1QX0hJR0hfREVSQVRFX1JFRlJFU0hfQU5EX1RJTUlOR1MJMHg2Ci0jZGVmaW5lIFNEUkFNX1RFTVBfVkVSWV9ISUdIX1NIVVRET1dOCQkJMHg3Ci0KLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9TQU1TVU5HCTEKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9RSU1PTkRBCTIKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9FTFBJREEJMwotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VUUk9OCTQKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9OQU5ZQQk1Ci0jZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfSFlOSVgJNgotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX01PU0VMCTcKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9XSU5CT05ECTgKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9FU01UCTkKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9TUEFOU0lPTiAxMQotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NTVAkJMTIKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9aTU9TCTEzCi0jZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfSU5URUwJMTQKLSNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9OVU1PTllYCTI1NAotI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX01JQ1JPTgkyNTUKLQotLyogTVI4IHJlZ2lzdGVyIGZpZWxkcyAqLwotI2RlZmluZSBNUjhfVFlQRV9TSElGVAkJMHgwCi0jZGVmaW5lIE1SOF9UWVBFX01BU0sJCTB4MwotI2RlZmluZSBNUjhfREVOU0lUWV9TSElGVAkweDIKLSNkZWZpbmUgTVI4X0RFTlNJVFlfTUFTSwkoMHhGIDw8IDB4MikKLSNkZWZpbmUgTVI4X0lPX1dJRFRIX1NISUZUCTB4NgotI2RlZmluZSBNUjhfSU9fV0lEVEhfTUFTSwkoMHgzIDw8IDB4NikKLQotc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nIHsKLQl1OAludW1fYmFua3M7Ci0JdTgJdF9SRUZJX3VzX3gxMDsKLQl1OAlyb3dfc3pbMl07IC8qIE9uZSBlbnRyeSBlYWNoIGZvciB4MzIgYW5kIHgxNiAqLwotCXU4CWNvbF9zelsyXTsgLyogT25lIGVudHJ5IGVhY2ggZm9yIHgzMiBhbmQgeDE2ICovCi19OwotCi0vKiBTdHJ1Y3R1cmUgZm9yIHRpbWluZ3MgZnJvbSB0aGUgRERSIGRhdGFzaGVldCAqLwotc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHsKLQl1MzIgbWF4X2ZyZXE7Ci0JdTggUkw7Ci0JdTggdFJQYWI7Ci0JdTggdFJDRDsKLQl1OCB0V1I7Ci0JdTggdFJBU21pbjsKLQl1OCB0UlJEOwotCXU4IHRXVFJ4MjsKLQl1OCB0WFNSOwotCXU4IHRYUHgyOwotCXU4IHRSRkNhYjsKLQl1OCB0UlRQeDI7Ci0JdTggdENLRTsKLQl1OCB0Q0tFU1I7Ci0JdTggdFpRQ1M7Ci0JdTMyIHRaUUNMOwotCXUzMiB0WlFJTklUOwotCXU4IHREUVNDS01BWHgyOwotCXU4IHRSQVNtYXg7Ci0JdTggdEZBVzsKLQotfTsKLQotLyoKLSAqIE1pbiB0Q0sgdmFsdWVzIGZvciBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzOgotICogSWYgdGhlIGNhbGN1bGF0ZWQgY2xvY2sgY3ljbGVzIGZvciB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXIgaXMKLSAqIGxlc3MgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBtaW4gdENLIHZhbHVlLCB3ZSBuZWVkIHRvIHNldCB0aGUgbWluCi0gKiB0Q0sgdmFsdWUuIFRoaXMgbWF5IGhhcHBlbiBhdCBsb3dlciBmcmVxdWVuY2llcy4KLSAqLwotc3RydWN0IGxwZGRyMl9taW5fdGNrIHsKLQl1MzIgdFJMOwotCXUzMiB0UlBfQUI7Ci0JdTMyIHRSQ0Q7Ci0JdTMyIHRXUjsKLQl1MzIgdFJBU19NSU47Ci0JdTMyIHRSUkQ7Ci0JdTMyIHRXVFI7Ci0JdTMyIHRYUDsKLQl1MzIgdFJUUDsKLQl1OCAgdENLRTsKLQl1MzIgdENLRVNSOwotCXUzMiB0RkFXOwotfTsKLQotc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyB7Ci0JdTgJdHlwZTsKLQl1OAlkZW5zaXR5OwotCXU4CWlvX3dpZHRoOwotCXU4CW1hbnVmYWN0dXJlcjsKLX07Ci0KLXN0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgewotCWNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqKmFjX3RpbWluZ3M7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrOwotfTsKLQotLyogRGV0YWlscyBvZiB0aGUgZGV2aWNlcyBjb25uZWN0ZWQgdG8gZWFjaCBjaGlwLXNlbGVjdCBvZiBhbiBFTUlGIGluc3RhbmNlICovCi1zdHJ1Y3QgZW1pZl9kZXZpY2VfZGV0YWlscyB7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2RldmljZV9kZXRhaWxzOwotCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2VfZGV0YWlsczsKLQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICpjczBfZGV2aWNlX3RpbWluZ3M7Ci0JY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqY3MxX2RldmljZV90aW1pbmdzOwotfTsKLQotLyoKLSAqIFN0cnVjdHVyZSBjb250YWluaW5nIHNoYWRvdyBvZiBpbXBvcnRhbnQgcmVnaXN0ZXJzIGluIEVNSUYKLSAqIFRoZSBjYWxjdWxhdGlvbiBmdW5jdGlvbiBmaWxscyBpbiB0aGlzIHN0cnVjdHVyZSB0byBiZSBsYXRlciB1c2VkIGZvcgotICogaW5pdGlhbGl6YXRpb24gYW5kIERWRlMKLSAqLwotc3RydWN0IGVtaWZfcmVncyB7Ci0JdTMyIGZyZXE7Ci0JdTMyIHNkcmFtX2NvbmZpZ19pbml0OwotCXUzMiBzZHJhbV9jb25maWc7Ci0JdTMyIHJlZl9jdHJsOwotCXUzMiBzZHJhbV90aW0xOwotCXUzMiBzZHJhbV90aW0yOwotCXUzMiBzZHJhbV90aW0zOwotCXUzMiByZWFkX2lkbGVfY3RybDsKLQl1MzIgenFfY29uZmlnOwotCXUzMiB0ZW1wX2FsZXJ0X2NvbmZpZzsKLQl1MzIgZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0OwotCXUzMiBlbWlmX2Rkcl9waHlfY3Rscl8xOwotfTsKLQotLyogYXNzZXJ0IG1hY3JvcyAqLwotI2lmIGRlZmluZWQoREVCVUcpCi0jZGVmaW5lIGVtaWZfYXNzZXJ0KGMpCSh7IGlmICghKGMpKSBmb3IgKDs7KTsgfSkKLSNlbHNlCi0jZGVmaW5lIGVtaWZfYXNzZXJ0KGMpCSh7IGlmICgwKSBoYW5nKCk7IH0pCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCi12b2lkIGVtaWZfZ2V0X3JlZ19kdW1wKHUzMiBlbWlmX25yLCBjb25zdCBzdHJ1Y3QgZW1pZl9yZWdzICoqcmVncyk7Ci12b2lkIGVtaWZfZ2V0X2RtbV9yZWdzKGNvbnN0IHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqKmRtbV9saXNhX3JlZ3MpOwotI2Vsc2UKLXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKHUzMiBlbWlmX25yLCB1OCBjcywKLQkJCXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmxwZGRyMl9kZXZfZGV0YWlscyk7Ci12b2lkIGVtaWZfZ2V0X2RldmljZV90aW1pbmdzKHUzMiBlbWlmX25yLAotCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICoqY3MwX2RldmljZV90aW1pbmdzLAotCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICoqY3MxX2RldmljZV90aW1pbmdzKTsKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvbW1jX2hvc3RfZGVmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L21tY19ob3N0X2RlZi5oCmluZGV4IDczM2Q4ZWQuLjc0NDM5YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvbW1jX2hvc3RfZGVmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9tbWNfaG9zdF9kZWYuaApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBPTUFQX0hTTU1DMl9CQVNFCTB4NDgwQjQxMDAKICNkZWZpbmUgT01BUF9IU01NQzNfQkFTRQkweDQ4MEFEMTAwCiAKLXR5cGVkZWYgc3RydWN0IGhzbW1jIHsKK3N0cnVjdCBoc21tYyB7CiAJdW5zaWduZWQgY2hhciByZXMxWzB4MTBdOwogCXVuc2lnbmVkIGludCBzeXNjb25maWc7CQkvKiAweDEwICovCiAJdW5zaWduZWQgaW50IHN5c3N0YXR1czsJCS8qIDB4MTQgKi8KQEAgLTU1LDcgKzU1LDcgQEAKIAl1bnNpZ25lZCBpbnQgaWU7CQkvKiAweDEzNCAqLwogCXVuc2lnbmVkIGNoYXIgcmVzNFsweDhdOwogCXVuc2lnbmVkIGludCBjYXBhOwkJLyogMHgxNDAgKi8KLX0gaHNtbWNfdDsKK307CiAKIC8qCiAgKiBPTUFQIEhTIE1NQyBCaXQgZGVmaW5pdGlvbnMKQEAgLTE2MCwxMyArMTYwLDYgQEAKICNkZWZpbmUgQ0xLXzQwMEtIWgkJCTEKICNkZWZpbmUgQ0xLX01JU0MJCQkyCiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgY2FyZF90eXBlOwotCXVuc2lnbmVkIGludCB2ZXJzaW9uOwotCXVuc2lnbmVkIGludCBtb2RlOwotCXVuc2lnbmVkIGludCBzaXplOwotCXVuc2lnbmVkIGludCBSQ0E7Ci19IG1tY19jYXJkX2RhdGE7CiAjZGVmaW5lIFJTUF9UWVBFX05PTkUJKFJTUF9UWVBFX05PUlNQICAgfCBDQ0NFX05PQ0hFQ0sgfCBDSUNFX05PQ0hFQ0spCiAjZGVmaW5lIE1NQ19DTUQwCShJTkRFWCgwKSAgfCBSU1BfVFlQRV9OT05FIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvb21hcDQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvb21hcC5oCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvb21hcDQuaApyZW5hbWUgdG8gYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwLmgKaW5kZXggNjFlYmIzZC4uZTk5NDI1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwNC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvb21hcC5oCkBAIC00NCw3ICs0NCw4IEBACiAKICNkZWZpbmUgT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX1NUQVJUCTB4ODAwMDAwMDAKICNkZWZpbmUgT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX0VORAkweEQwMDAwMDAwCi0KKyNkZWZpbmUgRFJBTV9BRERSX1NQQUNFX1NUQVJUCU9NQVA0NFhYX0RSQU1fQUREUl9TUEFDRV9TVEFSVAorI2RlZmluZSBEUkFNX0FERFJfU1BBQ0VfRU5ECU9NQVA0NFhYX0RSQU1fQUREUl9TUEFDRV9FTkQKIAogLyogQ09OVFJPTCAqLwogI2RlZmluZSBDVFJMX0JBU0UJCShPTUFQNDRYWF9MNF9DT1JFX0JBU0UgKyAweDIwMDApCkBAIC01NywxNiArNTgsMTEgQEAKIC8qIENPTlRST0xfSURfQ09ERSAqLwogI2RlZmluZSBDT05UUk9MX0lEX0NPREUJCTB4NEEwMDIyMDQKIAotLyogNDQzMCAqLwotI2RlZmluZSBPTUFQNDQzMF9DT05UUk9MX0lEX0NPREVfRVMxXzAJMHgwQjg1MjAyRgotI2RlZmluZSBPTUFQNDQzMF9DT05UUk9MX0lEX0NPREVfRVMyXzAJMHgxQjg1MjAyRgotI2RlZmluZSBPTUFQNDQzMF9DT05UUk9MX0lEX0NPREVfRVMyXzEJMHgzQjk1QzAyRgotI2RlZmluZSBPTUFQNDQzMF9DT05UUk9MX0lEX0NPREVfRVMyXzIJMHg0Qjk1QzAyRgotI2RlZmluZSBPTUFQNDQzMF9DT05UUk9MX0lEX0NPREVfRVMyXzMJMHg2Qjk1QzAyRgotCi0vKiA0NDYwICovCi0jZGVmaW5lIE9NQVA0NDYwX0NPTlRST0xfSURfQ09ERV9FUzFfMAkweDBCOTRFMDJGCi0jZGVmaW5lIE9NQVA0NDYwX0NPTlRST0xfSURfQ09ERV9FUzFfMQkweDJCOTRFMDJGCisjZGVmaW5lIE9NQVA0X0NPTlRST0xfSURfQ09ERV9FUzFfMAkweDBCODUyMDJGCisjZGVmaW5lIE9NQVA0X0NPTlRST0xfSURfQ09ERV9FUzJfMAkweDFCODUyMDJGCisjZGVmaW5lIE9NQVA0X0NPTlRST0xfSURfQ09ERV9FUzJfMQkweDNCOTVDMDJGCisjZGVmaW5lIE9NQVA0X0NPTlRST0xfSURfQ09ERV9FUzJfMgkweDRCOTVDMDJGCisjZGVmaW5lIE9NQVA0X0NPTlRST0xfSURfQ09ERV9FUzJfMwkweDZCOTVDMDJGCiAKIC8qIFVBUlQgKi8KICNkZWZpbmUgVUFSVDFfQkFTRQkJKE9NQVA0NFhYX0w0X1BFUl9CQVNFICsgMHg2YTAwMCkKQEAgLTE1MSw3ICsxNDcsNyBAQAogCXVuc2lnbmVkIGludCBjb250cm9sX2xkb3NyYW1fbXB1X3ZvbHRhZ2VfY3RybDsJLyogMHg0QTAwMjMyNCAqLwogCXVuc2lnbmVkIGludCBjb250cm9sX2xkb3NyYW1fY29yZV92b2x0YWdlX2N0cmw7CS8qIDB4NEEwMDIzMjggKi8KIAl1bnNpZ25lZCBpbnQgcGFkM1syNjAyNzddOwotCXVuc2lnbmVkIGludCBjb250cm9sX3BiaWFzbGl0ZTsJCQkvKiAweDRBMTAwNjAwICovCisJdW5zaWduZWQgaW50IGNvbnRyb2xfcGJpYXNsaXRlOyAgICAgICAgICAgICAgICAgLyogMHg0QTEwMDYwMCAqLwogCXVuc2lnbmVkIGludCBwYWQ0WzYzXTsKIAl1bnNpZ25lZCBpbnQgY29udHJvbF9lZnVzZV8xOwkJCS8qIDB4NEExMDA3MDAgKi8KIAl1bnNpZ25lZCBpbnQgY29udHJvbF9lZnVzZV8yOwkJCS8qIDB4NEExMDA3MDQgKi8KQEAgLTE4OCwxNiArMTg0LDYgQEAKICNkZWZpbmUgT01BUDRfU1JBTV9TQ1JBVENIX0VNSUZfVF9ERU4JKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHgxMCkKICNkZWZpbmUgT01BUDRfU1JBTV9TQ1JBVENIX1NQQUNFX0VORAkoU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIgKyAweDE0KQogCi0vKiBTaWxpY29uIHJldmlzaW9ucyAqLwotI2RlZmluZSBPTUFQNDQzMF9TSUxJQ09OX0lEX0lOVkFMSUQJMHhGRkZGRkZGRgotI2RlZmluZSBPTUFQNDQzMF9FUzFfMAkweDQ0MzAwMTAwCi0jZGVmaW5lIE9NQVA0NDMwX0VTMl8wCTB4NDQzMDAyMDAKLSNkZWZpbmUgT01BUDQ0MzBfRVMyXzEJMHg0NDMwMDIxMAotI2RlZmluZSBPTUFQNDQzMF9FUzJfMgkweDQ0MzAwMjIwCi0jZGVmaW5lIE9NQVA0NDMwX0VTMl8zCTB4NDQzMDAyMzAKLSNkZWZpbmUgT01BUDQ0NjBfRVMxXzAJMHg0NDYwMDEwMAotI2RlZmluZSBPTUFQNDQ2MF9FUzFfMQkweDQ0NjAwMTEwCi0KIC8qIFJPTSBjb2RlIGRlZmluZXMgKi8KIC8qIEJvb3QgZGV2aWNlICovCiAjZGVmaW5lIEJPT1RfREVWSUNFX01BU0sJMHhGRgpAQCAtMjA1LDUgKzE5MSwyMSBAQAogI2RlZmluZSBERVZfREVTQ19QVFJfT0ZGU0VUCTB4NAogI2RlZmluZSBERVZfREFUQV9QVFJfT0ZGU0VUCTB4MTgKICNkZWZpbmUgQk9PVF9NT0RFX09GRlNFVAkweDgKKyNkZWZpbmUgUkVTRVRfUkVBU09OX09GRlNFVAkweDkKKyNkZWZpbmUgQ0hfRkxBR1NfT0ZGU0VUCQkweEEKIAorI2RlZmluZSBDSF9GTEFHU19DSFNFVFRJTkdTCSgweDEgPDwgMCkKKyNkZWZpbmUgQ0hfRkxBR1NfQ0hSQU0JCSgweDEgPDwgMSkKKyNkZWZpbmUgQ0hfRkxBR1NfQ0hGTEFTSAkoMHgxIDw8IDIpCisjZGVmaW5lIENIX0ZMQUdTX0NITU1DU0QJKDB4MSA8PCAzKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IG9tYXBfYm9vdF9wYXJhbWV0ZXJzIHsKKwljaGFyICpib290X21lc3NhZ2U7CisJdW5zaWduZWQgaW50IG1lbV9ib290X2Rlc2NyaXB0b3I7CisJdW5zaWduZWQgY2hhciBvbWFwX2Jvb3RkZXZpY2U7CisJdW5zaWduZWQgY2hhciByZXNldF9yZWFzb247CisJdW5zaWduZWQgY2hhciBjaF9mbGFnczsKK307CisjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9zeXNfcHJvdG8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDQvc3lzX3Byb3RvLmgKaW5kZXggMWFhY2JiMS4uNDE0NmUyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9zeXNfcHJvdG8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L3N5c19wcm90by5oCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZuZGVmIF9TWVNfUFJPVE9fSF8KICNkZWZpbmUgX1NZU19QUk9UT19IXwogCi0jaW5jbHVkZSA8YXNtL2FyY2gvb21hcDQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL29tYXBfY29tbW9uLmg+CkBAIC0zMiwxNyArMzIsMTcgQEAKIH07CiBleHRlcm4gY29uc3Qgc3RydWN0IG9tYXBfc3lzaW5mbyBzeXNpbmZvOwogCi1leHRlcm4gc3RydWN0IG9tYXA0X3ByY21fcmVncyAqY29uc3QgcHJjbTsKLQogdm9pZCBncG1jX2luaXQodm9pZCk7CiB2b2lkIHdhdGNoZG9nX2luaXQodm9pZCk7CiB1MzIgZ2V0X2RldmljZV90eXBlKHZvaWQpOwogdm9pZCBkb19zZXRfbXV4KHUzMiBiYXNlLCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29uc3QgKmFycmF5LCBpbnQgc2l6ZSk7Cit2b2lkIHNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKHZvaWQpOwogdm9pZCBzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwodm9pZCk7CiB2b2lkIHNyMzIodm9pZCAqLCB1MzIsIHUzMiwgdTMyKTsKIHUzMiB3YWl0X29uX3ZhbHVlKHUzMiwgdTMyLCB2b2lkICosIHUzMik7CiB2b2lkIHNkZWxheSh1bnNpZ25lZCBsb25nKTsKIHZvaWQgc2V0X3BsMzEwX2N0cmxfcmVnKHUzMiB2YWwpOwordm9pZCBvbWFwX3Jldl9zdHJpbmcoY2hhciAqb21hcF9yZXZfc3RyaW5nKTsKIHZvaWQgc2V0dXBfY2xvY2tzX2Zvcl9jb25zb2xlKHZvaWQpOwogdm9pZCBwcmNtX2luaXQodm9pZCk7CiB2b2lkIGJ5cGFzc19kcGxsKHUzMiAqY29uc3QgYmFzZSk7CkBAIC01MSw3ICs1MSwxNyBAQAogdTMyIG9tYXA0X2Rkcl9jbGsodm9pZCk7CiB2b2lkIGNhbmNlbF9vdXQodTMyICpudW0sIHUzMiAqZGVuLCB1MzIgZGVuX2xpbWl0KTsKIHZvaWQgc2RyYW1faW5pdCh2b2lkKTsKLXUzMiBvbWFwNF9zZHJhbV9zaXplKHZvaWQpOwordTMyIG9tYXBfc2RyYW1fc2l6ZSh2b2lkKTsKK3UzMiBjb3J0ZXhfcmV2KHZvaWQpOwordm9pZCBpbml0X29tYXBfcmV2aXNpb24odm9pZCk7Cit2b2lkIGRvX2lvX3NldHRpbmdzKHZvaWQpOworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyCisgKiB3YXMgZXhlY3V0ZWQgYnkgUm9tY29kZSBwcmlvciB0byBjb250cm9sIG9mIHRyYW5zZmVyCisgKiB0byB0aGUgYm9vdGxvYWRlci4gU1BMIGlzIHJlc3BvbnNpYmxlIGZvciBzYXZpbmcgYW5kCisgKiBwYXNzaW5nIHRoaXMgdG8gdGhlIHUtYm9vdC4KKyAqLworZXh0ZXJuIHN0cnVjdCBvbWFwX2Jvb3RfcGFyYW1ldGVycyBib290X3BhcmFtczsKIAogc3RhdGljIGlubGluZSB1MzIgcnVubmluZ19mcm9tX3NkcmFtKHZvaWQpCiB7CkBAIC02NCwxNSArNzQsMTcgQEAKIHN0YXRpYyBpbmxpbmUgdTggdWJvb3RfbG9hZGVkX2J5X3NwbCh2b2lkKQogewogCS8qCi0JICogQ29uZmlndXJhdGlvbiBIZWFkZXIgaXMgbm90IHN1cHBvcnRlZCB5ZXQsIHNvIHUtYm9vdCBpbml0IHJ1bm5pbmcKLQkgKiBmcm9tIFNEUkFNIGltcGxpZXMgdGhhdCBpdCB3YXMgbG9hZGVkIGJ5IFNQTC4gV2hlbiB0aGlzIHNpdHVhdGlvbgotCSAqIGNoYW5nZXMgb25lIG9mIHRoZXNlIGFwcHJvYWNoZXMgY291bGQgYmUgdGFrZW46Ci0JICogaS4gIFBhc3MgYSBtYWdpYyBmcm9tIFNQTCB0byBVLUJvb3QgYW5kIFUtQm9vdCBzYXZlIGl0IGF0IGEga25vd24KLQkgKiAgICAgbG9jYXRpb24uCi0JICogaWkuIENoZWNrIHRoZSBPUFAuIENIIGNhbiBzdXBwb3J0IG9ubHkgNTAlIE9QUCB3aGlsZSBTUEwgaW5pdGlhbGl6ZXMKLQkgKiAgICAgdGhlIERQTExzIGF0IDEwMCUgT1BQLgorCSAqIHUtYm9vdCBjYW4gYmUgcnVubmluZyBmcm9tIHNkcmFtIGVpdGhlciBiZWNhdXNlIG9mIGNvbmZpZ3VyYXRpb24KKwkgKiBIZWFkZXIgb3IgYnkgU1BMLiBJZiBiZWNhdXNlIG9mIENILCB0aGVuIHRoZSByb21jb2RlIHNldHMgdGhlCisJICogQ0hTRVRUSU5HUyBleGVjdXRlZCBiaXQgdG8gdHJ1ZSBpbiB0aGUgYm9vdCBwYXJhbWV0ZXIgc3RydWN0dXJlIHRoYXQKKwkgKiBpdCBwYXNzZXMgdG8gdGhlIGJvb3Rsb2FkZXIuVGhpcyBwYXJhbWV0ZXIgaXMgc3RvcmVkIGluIHRoZSBjaF9mbGFncworCSAqIHZhcmlhYmxlIGJ5IGJvdGggU1BMIGFuZCB1LWJvb3QuQ2hlY2sgb3V0IGZvciBDSFNFVFRJTkdTLCB3aGljaCBpcyBhCisJICogbWFuZGF0b3J5IHNlY3Rpb24gaWYgQ0ggaXMgcHJlc2VudC4KIAkgKi8KLQlyZXR1cm4gcnVubmluZ19mcm9tX3NkcmFtKCk7CisJaWYgKChib290X3BhcmFtcy5jaF9mbGFncykgJiAoQ0hfRkxBR1NfQ0hTRVRUSU5HUykpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIHJ1bm5pbmdfZnJvbV9zZHJhbSgpOwogfQogLyoKICAqIFRoZSBiYXNpYyBoYXJkd2FyZSBpbml0IG9mIE9NQVAoc19pbml0KCkpIGNhbiBoYXBwZW4gaW4gNApAQCAtODYsNyArOTgsNyBAQAogICogVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGlzIGNvbnRleHQuCiAgKiBEZWZpbmluZyBhcyBpbmxpbmUgbWF5IGhlbHAgaW4gY29tcGlsaW5nIG91dCB1bnVzZWQgZnVuY3Rpb25zIGluIFNQTAogICovCi1zdGF0aWMgaW5saW5lIHUzMiBvbWFwNF9od19pbml0X2NvbnRleHQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXBfaHdfaW5pdF9jb250ZXh0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NQTF9CVUlMRAogCXJldHVybiBPTUFQX0lOSVRfQ09OVEVYVF9TUEw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2Nsb2Nrcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9jbG9ja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTk5ZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9jbG9ja3MuaApAQCAtMCwwICsxLDcyMiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqCUFuZWVzaCBWIDxhbmVlc2hAdGkuY29tPgorICoJU3JpY2hhcmFuIFIgPHIuc3JpY2hhcmFuQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9DTE9DS1NfT01BUDVfSF8KKyNkZWZpbmUgX0NMT0NLU19PTUFQNV9IXworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisvKgorICogQXNzdW1pbmcgYSBtYXhpbXVtIG9mIDEuNSBHSHogQVJNIHNwZWVkIGFuZCBhIG1pbmltdW0gb2YgMiBjeWNsZXMgcGVyCisgKiBsb29wLCBhbGxvdyBmb3IgYSBtaW5pbXVtIG9mIDIgbXMgd2FpdCAoaW4gcmVhbGl0eSB0aGUgd2FpdCB3aWxsIGJlCisgKiBtdWNoIG1vcmUgdGhhbiB0aGF0KQorICovCisjZGVmaW5lIExERUxBWQkJMTAwMDAwMAorCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9DT1JFCQkoT01BUDU0WFhfTDRfQ09SRV9CQVNFICsgMHg0MTIwKQorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfUEVSCQkoT01BUDU0WFhfTDRfQ09SRV9CQVNFICsgMHg4MTQwKQorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfTVBVCQkoT01BUDU0WFhfTDRfQ09SRV9CQVNFICsgMHg0MTYwKQorI2RlZmluZSBDTV9DTEtTRUxfQ09SRQkJCShPTUFQNTRYWF9MNF9DT1JFX0JBU0UgKyAweDQxMDApCisKK3N0cnVjdCBvbWFwNV9wcmNtX3JlZ3MgeworCS8qIGNtMS5ja2dlbiAqLworCXUzMiBjbV9jbGtzZWxfY29yZTsJCQkvKiA0YTAwNDEwMCAqLworCXUzMiBwYWQwMDFbMV07CQkJCS8qIDRhMDA0MTA0ICovCisJdTMyIGNtX2Nsa3NlbF9hYmU7CQkJLyogNGEwMDQxMDggKi8KKwl1MzIgcGFkMDAyWzFdOwkJCQkvKiA0YTAwNDEwYyAqLworCXUzMiBjbV9kbGxfY3RybDsJCQkvKiA0YTAwNDExMCAqLworCXUzMiBwYWQwMDNbM107CQkJCS8qIDRhMDA0MTE0ICovCisJdTMyIGNtX2Nsa21vZGVfZHBsbF9jb3JlOwkJLyogNGEwMDQxMjAgKi8KKwl1MzIgY21faWRsZXN0X2RwbGxfY29yZTsJCS8qIDRhMDA0MTI0ICovCisJdTMyIGNtX2F1dG9pZGxlX2RwbGxfY29yZTsJCS8qIDRhMDA0MTI4ICovCisJdTMyIGNtX2Nsa3NlbF9kcGxsX2NvcmU7CQkvKiA0YTAwNDEyYyAqLworCXUzMiBjbV9kaXZfbTJfZHBsbF9jb3JlOwkJLyogNGEwMDQxMzAgKi8KKwl1MzIgY21fZGl2X20zX2RwbGxfY29yZTsJCS8qIDRhMDA0MTM0ICovCisJdTMyIGNtX2Rpdl9oMTFfZHBsbF9jb3JlOwkJLyogNGEwMDQxMzggKi8KKwl1MzIgY21fZGl2X2gxMl9kcGxsX2NvcmU7CQkvKiA0YTAwNDEzYyAqLworCXUzMiBjbV9kaXZfaDEzX2RwbGxfY29yZTsJCS8qIDRhMDA0MTQwICovCisJdTMyIGNtX2Rpdl9oMTRfZHBsbF9jb3JlOwkJLyogNGEwMDQxNDQgKi8KKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF9jb3JlOwkvKiA0YTAwNDE0OCAqLworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX2NvcmU7CS8qIDRhMDA0MTRjICovCisJdTMyIGNtX2VtdV9vdmVycmlkZV9kcGxsX2NvcmU7CQkvKiA0YTAwNDE1MCAqLworCisJdTMyIGNtX2Rpdl9oMjJfZHBsbGNvcmU7CQkvKiA0YTAwNDE1NCAqLworCXUzMiBjbV9kaXZfaDIzX2RwbGxfY29yZTsJCS8qIDRhMDA0MTU4ICovCisJdTMyIHBhZDAwNDFbMV07CQkJCS8qIDRhMDA0MTVjICovCisJdTMyIGNtX2Nsa21vZGVfZHBsbF9tcHU7CQkvKiA0YTAwNDE2MCAqLworCXUzMiBjbV9pZGxlc3RfZHBsbF9tcHU7CQkJLyogNGEwMDQxNjQgKi8KKwl1MzIgY21fYXV0b2lkbGVfZHBsbF9tcHU7CQkvKiA0YTAwNDE2OCAqLworCXUzMiBjbV9jbGtzZWxfZHBsbF9tcHU7CQkJLyogNGEwMDQxNmMgKi8KKwl1MzIgY21fZGl2X20yX2RwbGxfbXB1OwkJCS8qIDRhMDA0MTcwICovCisJdTMyIHBhZDAwNVs1XTsJCQkJLyogNGEwMDQxNzQgKi8KKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF9tcHU7CQkvKiA0YTAwNDE4OCAqLworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX21wdTsJCS8qIDRhMDA0MThjICovCisJdTMyIHBhZDAwNlszXTsJCQkJLyogNGEwMDQxOTAgKi8KKwl1MzIgY21fYnlwY2xrX2RwbGxfbXB1OwkJCS8qIDRhMDA0MTljICovCisJdTMyIGNtX2Nsa21vZGVfZHBsbF9pdmE7CQkvKiA0YTAwNDFhMCAqLworCXUzMiBjbV9pZGxlc3RfZHBsbF9pdmE7CQkJLyogNGEwMDQxYTQgKi8KKwl1MzIgY21fYXV0b2lkbGVfZHBsbF9pdmE7CQkvKiA0YTAwNDFhOCAqLworCXUzMiBjbV9jbGtzZWxfZHBsbF9pdmE7CQkJLyogNGEwMDQxYWMgKi8KKwl1MzIgcGFkMDA3WzJdOwkJCQkvKiA0YTAwNDFiMCAqLworCXUzMiBjbV9kaXZfaDExX2RwbGxfaXZhOwkJLyogNGEwMDQxYjggKi8KKwl1MzIgY21fZGl2X2gxMl9kcGxsX2l2YTsJCS8qIDRhMDA0MWJjICovCisJdTMyIHBhZDAwOFsyXTsJCQkJLyogNGEwMDQxYzAgKi8KKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF9pdmE7CQkvKiA0YTAwNDFjOCAqLworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX2l2YTsJCS8qIDRhMDA0MWNjICovCisJdTMyIHBhZDAwOVszXTsJCQkJLyogNGEwMDQxZDAgKi8KKwl1MzIgY21fYnlwY2xrX2RwbGxfaXZhOwkJCS8qIDRhMDA0MWRjICovCisJdTMyIGNtX2Nsa21vZGVfZHBsbF9hYmU7CQkvKiA0YTAwNDFlMCAqLworCXUzMiBjbV9pZGxlc3RfZHBsbF9hYmU7CQkJLyogNGEwMDQxZTQgKi8KKwl1MzIgY21fYXV0b2lkbGVfZHBsbF9hYmU7CQkvKiA0YTAwNDFlOCAqLworCXUzMiBjbV9jbGtzZWxfZHBsbF9hYmU7CQkJLyogNGEwMDQxZWMgKi8KKwl1MzIgY21fZGl2X20yX2RwbGxfYWJlOwkJCS8qIDRhMDA0MWYwICovCisJdTMyIGNtX2Rpdl9tM19kcGxsX2FiZTsJCQkvKiA0YTAwNDFmNCAqLworCXUzMiBwYWQwMTBbNF07CQkJCS8qIDRhMDA0MWY4ICovCisJdTMyIGNtX3NzY19kZWx0YW1zdGVwX2RwbGxfYWJlOwkJLyogNGEwMDQyMDggKi8KKwl1MzIgY21fc3NjX21vZGZyZXFkaXZfZHBsbF9hYmU7CQkvKiA0YTAwNDIwYyAqLworCXUzMiBwYWQwMTFbNF07CQkJCS8qIDRhMDA0MjEwICovCisJdTMyIGNtX2Nsa21vZGVfZHBsbF9kZHJwaHk7CQkvKiA0YTAwNDIyMCAqLworCXUzMiBjbV9pZGxlc3RfZHBsbF9kZHJwaHk7CQkvKiA0YTAwNDIyNCAqLworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX2RkcnBoeTsJCS8qIDRhMDA0MjI4ICovCisJdTMyIGNtX2Nsa3NlbF9kcGxsX2RkcnBoeTsJCS8qIDRhMDA0MjJjICovCisJdTMyIGNtX2Rpdl9tMl9kcGxsX2RkcnBoeTsJCS8qIDRhMDA0MjMwICovCisJdTMyIHBhZDAxMlsxXTsJCQkJLyogNGEwMDQyMzQgKi8KKwl1MzIgY21fZGl2X2gxMV9kcGxsX2RkcnBoeTsJCS8qIDRhMDA0MjM4ICovCisJdTMyIGNtX2Rpdl9oMTJfZHBsbF9kZHJwaHk7CQkvKiA0YTAwNDIzYyAqLworCXUzMiBjbV9kaXZfaDEzX2RwbGxfZGRycGh5OwkJLyogNGEwMDQyNDAgKi8KKwl1MzIgcGFkMDEzWzFdOwkJCQkvKiA0YTAwNDI0NCAqLworCXUzMiBjbV9zc2NfZGVsdGFtc3RlcF9kcGxsX2RkcnBoeTsJLyogNGEwMDQyNDggKi8KKwl1MzIgcGFkMDE0WzVdOwkJCQkvKiA0YTAwNDI0YyAqLworCXUzMiBjbV9zaGFkb3dfZnJlcV9jb25maWcxOwkJLyogNGEwMDQyNjAgKi8KKwl1MzIgcGFkMDE0MVs0N107CQkJLyogNGEwMDQyNjQgKi8KKwl1MzIgY21fbXB1X21wdV9jbGtjdHJsOwkJCS8qIDRhMDA0MzIwICovCisKKworCS8qIGNtMS5kc3AgKi8KKwl1MzIgcGFkMDE1WzU1XTsJCQkJLyogNGEwMDQzMjQgKi8KKwl1MzIgY21fZHNwX2Nsa3N0Y3RybDsJCQkvKiA0YTAwNDQwMCAqLworCXUzMiBwYWQwMTZbN107CQkJCS8qIDRhMDA0NDA0ICovCisJdTMyIGNtX2RzcF9kc3BfY2xrY3RybDsJCQkvKiA0YTAwNDQyMCAqLworCisJLyogY20xLmFiZSAqLworCXUzMiBwYWQwMTdbNTVdOwkJCQkvKiA0YTAwNDQyNCAqLworCXUzMiBjbTFfYWJlX2Nsa3N0Y3RybDsJCQkvKiA0YTAwNDUwMCAqLworCXUzMiBwYWQwMThbN107CQkJCS8qIDRhMDA0NTA0ICovCisJdTMyIGNtMV9hYmVfbDRhYmVfY2xrY3RybDsJCS8qIDRhMDA0NTIwICovCisJdTMyIHBhZDAxOVsxXTsJCQkJLyogNGEwMDQ1MjQgKi8KKwl1MzIgY20xX2FiZV9hZXNzX2Nsa2N0cmw7CQkvKiA0YTAwNDUyOCAqLworCXUzMiBwYWQwMjBbMV07CQkJCS8qIDRhMDA0NTJjICovCisJdTMyIGNtMV9hYmVfcGRtX2Nsa2N0cmw7CQkvKiA0YTAwNDUzMCAqLworCXUzMiBwYWQwMjFbMV07CQkJCS8qIDRhMDA0NTM0ICovCisJdTMyIGNtMV9hYmVfZG1pY19jbGtjdHJsOwkJLyogNGEwMDQ1MzggKi8KKwl1MzIgcGFkMDIyWzFdOwkJCQkvKiA0YTAwNDUzYyAqLworCXUzMiBjbTFfYWJlX21jYXNwX2Nsa2N0cmw7CQkvKiA0YTAwNDU0MCAqLworCXUzMiBwYWQwMjNbMV07CQkJCS8qIDRhMDA0NTQ0ICovCisJdTMyIGNtMV9hYmVfbWNic3AxX2Nsa2N0cmw7CQkvKiA0YTAwNDU0OCAqLworCXUzMiBwYWQwMjRbMV07CQkJCS8qIDRhMDA0NTRjICovCisJdTMyIGNtMV9hYmVfbWNic3AyX2Nsa2N0cmw7CQkvKiA0YTAwNDU1MCAqLworCXUzMiBwYWQwMjVbMV07CQkJCS8qIDRhMDA0NTU0ICovCisJdTMyIGNtMV9hYmVfbWNic3AzX2Nsa2N0cmw7CQkvKiA0YTAwNDU1OCAqLworCXUzMiBwYWQwMjZbMV07CQkJCS8qIDRhMDA0NTVjICovCisJdTMyIGNtMV9hYmVfc2xpbWJ1c19jbGtjdHJsOwkJLyogNGEwMDQ1NjAgKi8KKwl1MzIgcGFkMDI3WzFdOwkJCQkvKiA0YTAwNDU2NCAqLworCXUzMiBjbTFfYWJlX3RpbWVyNV9jbGtjdHJsOwkJLyogNGEwMDQ1NjggKi8KKwl1MzIgcGFkMDI4WzFdOwkJCQkvKiA0YTAwNDU2YyAqLworCXUzMiBjbTFfYWJlX3RpbWVyNl9jbGtjdHJsOwkJLyogNGEwMDQ1NzAgKi8KKwl1MzIgcGFkMDI5WzFdOwkJCQkvKiA0YTAwNDU3NCAqLworCXUzMiBjbTFfYWJlX3RpbWVyN19jbGtjdHJsOwkJLyogNGEwMDQ1NzggKi8KKwl1MzIgcGFkMDMwWzFdOwkJCQkvKiA0YTAwNDU3YyAqLworCXUzMiBjbTFfYWJlX3RpbWVyOF9jbGtjdHJsOwkJLyogNGEwMDQ1ODAgKi8KKwl1MzIgcGFkMDMxWzFdOwkJCQkvKiA0YTAwNDU4NCAqLworCXUzMiBjbTFfYWJlX3dkdDNfY2xrY3RybDsJCS8qIDRhMDA0NTg4ICovCisKKwkvKiBjbTIuY2tnZW4gKi8KKwl1MzIgcGFkMDMyWzM4MDVdOwkJCS8qIDRhMDA0NThjICovCisJdTMyIGNtX2Nsa3NlbF9tcHVfbTNfaXNzX3Jvb3Q7CQkvKiA0YTAwODEwMCAqLworCXUzMiBjbV9jbGtzZWxfdXNiXzYwbWh6OwkJLyogNGEwMDgxMDQgKi8KKwl1MzIgY21fc2NhbGVfZmNsazsJCQkvKiA0YTAwODEwOCAqLworCXUzMiBwYWQwMzNbMV07CQkJCS8qIDRhMDA4MTBjICovCisJdTMyIGNtX2NvcmVfZHZmc19wZXJmMTsJCQkvKiA0YTAwODExMCAqLworCXUzMiBjbV9jb3JlX2R2ZnNfcGVyZjI7CQkJLyogNGEwMDgxMTQgKi8KKwl1MzIgY21fY29yZV9kdmZzX3BlcmYzOwkJCS8qIDRhMDA4MTE4ICovCisJdTMyIGNtX2NvcmVfZHZmc19wZXJmNDsJCQkvKiA0YTAwODExYyAqLworCXUzMiBwYWQwMzRbMV07CQkJCS8qIDRhMDA4MTIwICovCisJdTMyIGNtX2NvcmVfZHZmc19jdXJyZW50OwkJLyogNGEwMDgxMjQgKi8KKwl1MzIgY21faXZhX2R2ZnNfcGVyZl90ZXNsYTsJCS8qIDRhMDA4MTI4ICovCisJdTMyIGNtX2l2YV9kdmZzX3BlcmZfaXZhaGQ7CQkvKiA0YTAwODEyYyAqLworCXUzMiBjbV9pdmFfZHZmc19wZXJmX2FiZTsJCS8qIDRhMDA4MTMwICovCisJdTMyIHBhZDAzNVsxXTsJCQkJLyogNGEwMDgxMzQgKi8KKwl1MzIgY21faXZhX2R2ZnNfY3VycmVudDsJCS8qIDRhMDA4MTM4ICovCisJdTMyIHBhZDAzNlsxXTsJCQkJLyogNGEwMDgxM2MgKi8KKwl1MzIgY21fY2xrbW9kZV9kcGxsX3BlcjsJCS8qIDRhMDA4MTQwICovCisJdTMyIGNtX2lkbGVzdF9kcGxsX3BlcjsJCQkvKiA0YTAwODE0NCAqLworCXUzMiBjbV9hdXRvaWRsZV9kcGxsX3BlcjsJCS8qIDRhMDA4MTQ4ICovCisJdTMyIGNtX2Nsa3NlbF9kcGxsX3BlcjsJCQkvKiA0YTAwODE0YyAqLworCXUzMiBjbV9kaXZfbTJfZHBsbF9wZXI7CQkJLyogNGEwMDgxNTAgKi8KKwl1MzIgY21fZGl2X20zX2RwbGxfcGVyOwkJCS8qIDRhMDA4MTU0ICovCisJdTMyIGNtX2Rpdl9oMTFfZHBsbF9wZXI7CQkvKiA0YTAwODE1OCAqLworCXUzMiBjbV9kaXZfaDEyX2RwbGxfcGVyOwkJLyogNGEwMDgxNWMgKi8KKwl1MzIgcGFkMDM2MVsxXTsJCQkJLyogNGEwMDgxNjAgKi8KKwl1MzIgY21fZGl2X2gxNF9kcGxsX3BlcjsJCS8qIDRhMDA4MTY0ICovCisJdTMyIGNtX3NzY19kZWx0YW1zdGVwX2RwbGxfcGVyOwkJLyogNGEwMDgxNjggKi8KKwl1MzIgY21fc3NjX21vZGZyZXFkaXZfZHBsbF9wZXI7CQkvKiA0YTAwODE2YyAqLworCXUzMiBjbV9lbXVfb3ZlcnJpZGVfZHBsbF9wZXI7CQkvKiA0YTAwODE3MCAqLworCXUzMiBwYWQwMzdbM107CQkJCS8qIDRhMDA4MTc0ICovCisJdTMyIGNtX2Nsa21vZGVfZHBsbF91c2I7CQkvKiA0YTAwODE4MCAqLworCXUzMiBjbV9pZGxlc3RfZHBsbF91c2I7CQkJLyogNGEwMDgxODQgKi8KKwl1MzIgY21fYXV0b2lkbGVfZHBsbF91c2I7CQkvKiA0YTAwODE4OCAqLworCXUzMiBjbV9jbGtzZWxfZHBsbF91c2I7CQkJLyogNGEwMDgxOGMgKi8KKwl1MzIgY21fZGl2X20yX2RwbGxfdXNiOwkJCS8qIDRhMDA4MTkwICovCisJdTMyIHBhZDAzOFs1XTsJCQkJLyogNGEwMDgxOTQgKi8KKwl1MzIgY21fc3NjX2RlbHRhbXN0ZXBfZHBsbF91c2I7CQkvKiA0YTAwODFhOCAqLworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX3VzYjsJCS8qIDRhMDA4MWFjICovCisJdTMyIHBhZDAzOVsxXTsJCQkJLyogNGEwMDgxYjAgKi8KKwl1MzIgY21fY2xrZGNvbGRvX2RwbGxfdXNiOwkJLyogNGEwMDgxYjQgKi8KKwl1MzIgcGFkMDQwWzJdOwkJCQkvKiA0YTAwODFiOCAqLworCXUzMiBjbV9jbGttb2RlX2RwbGxfdW5pcHJvOwkJLyogNGEwMDgxYzAgKi8KKwl1MzIgY21faWRsZXN0X2RwbGxfdW5pcHJvOwkJLyogNGEwMDgxYzQgKi8KKwl1MzIgY21fYXV0b2lkbGVfZHBsbF91bmlwcm87CQkvKiA0YTAwODFjOCAqLworCXUzMiBjbV9jbGtzZWxfZHBsbF91bmlwcm87CQkvKiA0YTAwODFjYyAqLworCXUzMiBjbV9kaXZfbTJfZHBsbF91bmlwcm87CQkvKiA0YTAwODFkMCAqLworCXUzMiBwYWQwNDFbNV07CQkJCS8qIDRhMDA4MWQ0ICovCisJdTMyIGNtX3NzY19kZWx0YW1zdGVwX2RwbGxfdW5pcHJvOwkvKiA0YTAwODFlOCAqLworCXUzMiBjbV9zc2NfbW9kZnJlcWRpdl9kcGxsX3VuaXBybzsJLyogNGEwMDgxZWMgKi8KKworCS8qIGNtMi5jb3JlICovCisJdTMyIHBhZDA0MTFbMzI0XTsJCQkvKiA0YTAwODFmMCAqLworCXUzMiBjbV9sM18xX2Nsa3N0Y3RybDsJCQkvKiA0YTAwODcwMCAqLworCXUzMiBwYWQwNDJbMV07CQkJCS8qIDRhMDA4NzA0ICovCisJdTMyIGNtX2wzXzFfZHluYW1pY2RlcDsJCQkvKiA0YTAwODcwOCAqLworCXUzMiBwYWQwNDNbNV07CQkJCS8qIDRhMDA4NzBjICovCisJdTMyIGNtX2wzXzFfbDNfMV9jbGtjdHJsOwkJLyogNGEwMDg3MjAgKi8KKwl1MzIgcGFkMDQ0WzU1XTsJCQkJLyogNGEwMDg3MjQgKi8KKwl1MzIgY21fbDNfMl9jbGtzdGN0cmw7CQkJLyogNGEwMDg4MDAgKi8KKwl1MzIgcGFkMDQ1WzFdOwkJCQkvKiA0YTAwODgwNCAqLworCXUzMiBjbV9sM18yX2R5bmFtaWNkZXA7CQkJLyogNGEwMDg4MDggKi8KKwl1MzIgcGFkMDQ2WzVdOwkJCQkvKiA0YTAwODgwYyAqLworCXUzMiBjbV9sM18yX2wzXzJfY2xrY3RybDsJCS8qIDRhMDA4ODIwICovCisJdTMyIHBhZDA0N1sxXTsJCQkJLyogNGEwMDg4MjQgKi8KKwl1MzIgY21fbDNfMl9ncG1jX2Nsa2N0cmw7CQkvKiA0YTAwODgyOCAqLworCXUzMiBwYWQwNDhbMV07CQkJCS8qIDRhMDA4ODJjICovCisJdTMyIGNtX2wzXzJfb2NtY19yYW1fY2xrY3RybDsJCS8qIDRhMDA4ODMwICovCisJdTMyIHBhZDA0OVs1MV07CQkJCS8qIDRhMDA4ODM0ICovCisJdTMyIGNtX21wdV9tM19jbGtzdGN0cmw7CQkvKiA0YTAwODkwMCAqLworCXUzMiBjbV9tcHVfbTNfc3RhdGljZGVwOwkJLyogNGEwMDg5MDQgKi8KKwl1MzIgY21fbXB1X20zX2R5bmFtaWNkZXA7CQkvKiA0YTAwODkwOCAqLworCXUzMiBwYWQwNTBbNV07CQkJCS8qIDRhMDA4OTBjICovCisJdTMyIGNtX21wdV9tM19tcHVfbTNfY2xrY3RybDsJCS8qIDRhMDA4OTIwICovCisJdTMyIHBhZDA1MVs1NV07CQkJCS8qIDRhMDA4OTI0ICovCisJdTMyIGNtX3NkbWFfY2xrc3RjdHJsOwkJCS8qIDRhMDA4YTAwICovCisJdTMyIGNtX3NkbWFfc3RhdGljZGVwOwkJCS8qIDRhMDA4YTA0ICovCisJdTMyIGNtX3NkbWFfZHluYW1pY2RlcDsJCQkvKiA0YTAwOGEwOCAqLworCXUzMiBwYWQwNTJbNV07CQkJCS8qIDRhMDA4YTBjICovCisJdTMyIGNtX3NkbWFfc2RtYV9jbGtjdHJsOwkJLyogNGEwMDhhMjAgKi8KKwl1MzIgcGFkMDUzWzU1XTsJCQkJLyogNGEwMDhhMjQgKi8KKwl1MzIgY21fbWVtaWZfY2xrc3RjdHJsOwkJCS8qIDRhMDA4YjAwICovCisJdTMyIHBhZDA1NFs3XTsJCQkJLyogNGEwMDhiMDQgKi8KKwl1MzIgY21fbWVtaWZfZG1tX2Nsa2N0cmw7CQkvKiA0YTAwOGIyMCAqLworCXUzMiBwYWQwNTVbMV07CQkJCS8qIDRhMDA4YjI0ICovCisJdTMyIGNtX21lbWlmX2VtaWZfZndfY2xrY3RybDsJCS8qIDRhMDA4YjI4ICovCisJdTMyIHBhZDA1NlsxXTsJCQkJLyogNGEwMDhiMmMgKi8KKwl1MzIgY21fbWVtaWZfZW1pZl8xX2Nsa2N0cmw7CQkvKiA0YTAwOGIzMCAqLworCXUzMiBwYWQwNTdbMV07CQkJCS8qIDRhMDA4YjM0ICovCisJdTMyIGNtX21lbWlmX2VtaWZfMl9jbGtjdHJsOwkJLyogNGEwMDhiMzggKi8KKwl1MzIgcGFkMDU4WzFdOwkJCQkvKiA0YTAwOGIzYyAqLworCXUzMiBjbV9tZW1pZl9kbGxfY2xrY3RybDsJCS8qIDRhMDA4YjQwICovCisJdTMyIHBhZDA1OVszXTsJCQkJLyogNGEwMDhiNDQgKi8KKwl1MzIgY21fbWVtaWZfZW1pZl9oMV9jbGtjdHJsOwkJLyogNGEwMDhiNTAgKi8KKwl1MzIgcGFkMDYwWzFdOwkJCQkvKiA0YTAwOGI1NCAqLworCXUzMiBjbV9tZW1pZl9lbWlmX2gyX2Nsa2N0cmw7CQkvKiA0YTAwOGI1OCAqLworCXUzMiBwYWQwNjFbMV07CQkJCS8qIDRhMDA4YjVjICovCisJdTMyIGNtX21lbWlmX2RsbF9oX2Nsa2N0cmw7CQkvKiA0YTAwOGI2MCAqLworCXUzMiBwYWQwNjJbMzldOwkJCQkvKiA0YTAwOGI2NCAqLworCXUzMiBjbV9jMmNfY2xrc3RjdHJsOwkJCS8qIDRhMDA4YzAwICovCisJdTMyIGNtX2MyY19zdGF0aWNkZXA7CQkJLyogNGEwMDhjMDQgKi8KKwl1MzIgY21fYzJjX2R5bmFtaWNkZXA7CQkJLyogNGEwMDhjMDggKi8KKwl1MzIgcGFkMDYzWzVdOwkJCQkvKiA0YTAwOGMwYyAqLworCXUzMiBjbV9jMmNfc2FkMmRfY2xrY3RybDsJCS8qIDRhMDA4YzIwICovCisJdTMyIHBhZDA2NFsxXTsJCQkJLyogNGEwMDhjMjQgKi8KKwl1MzIgY21fYzJjX21vZGVtX2ljcl9jbGtjdHJsOwkJLyogNGEwMDhjMjggKi8KKwl1MzIgcGFkMDY1WzFdOwkJCQkvKiA0YTAwOGMyYyAqLworCXUzMiBjbV9jMmNfc2FkMmRfZndfY2xrY3RybDsJCS8qIDRhMDA4YzMwICovCisJdTMyIHBhZDA2Nls1MV07CQkJCS8qIDRhMDA4YzM0ICovCisJdTMyIGNtX2w0Y2ZnX2Nsa3N0Y3RybDsJCQkvKiA0YTAwOGQwMCAqLworCXUzMiBwYWQwNjdbMV07CQkJCS8qIDRhMDA4ZDA0ICovCisJdTMyIGNtX2w0Y2ZnX2R5bmFtaWNkZXA7CQkvKiA0YTAwOGQwOCAqLworCXUzMiBwYWQwNjhbNV07CQkJCS8qIDRhMDA4ZDBjICovCisJdTMyIGNtX2w0Y2ZnX2w0X2NmZ19jbGtjdHJsOwkJLyogNGEwMDhkMjAgKi8KKwl1MzIgcGFkMDY5WzFdOwkJCQkvKiA0YTAwOGQyNCAqLworCXUzMiBjbV9sNGNmZ19od19zZW1fY2xrY3RybDsJCS8qIDRhMDA4ZDI4ICovCisJdTMyIHBhZDA3MFsxXTsJCQkJLyogNGEwMDhkMmMgKi8KKwl1MzIgY21fbDRjZmdfbWFpbGJveF9jbGtjdHJsOwkJLyogNGEwMDhkMzAgKi8KKwl1MzIgcGFkMDcxWzFdOwkJCQkvKiA0YTAwOGQzNCAqLworCXUzMiBjbV9sNGNmZ19zYXJfcm9tX2Nsa2N0cmw7CQkvKiA0YTAwOGQzOCAqLworCXUzMiBwYWQwNzJbNDldOwkJCQkvKiA0YTAwOGQzYyAqLworCXUzMiBjbV9sM2luc3RyX2Nsa3N0Y3RybDsJCS8qIDRhMDA4ZTAwICovCisJdTMyIHBhZDA3M1s3XTsJCQkJLyogNGEwMDhlMDQgKi8KKwl1MzIgY21fbDNpbnN0cl9sM18zX2Nsa2N0cmw7CQkvKiA0YTAwOGUyMCAqLworCXUzMiBwYWQwNzRbMV07CQkJCS8qIDRhMDA4ZTI0ICovCisJdTMyIGNtX2wzaW5zdHJfbDNfaW5zdHJfY2xrY3RybDsJLyogNGEwMDhlMjggKi8KKwl1MzIgcGFkMDc1WzVdOwkJCQkvKiA0YTAwOGUyYyAqLworCXUzMiBjbV9sM2luc3RyX2ludHJjb25uX3dwMV9jbGtjdHJsOwkvKiA0YTAwOGU0MCAqLworCisKKwkvKiBjbTIuaXZhaGQgKi8KKwl1MzIgcGFkMDc2WzQ3XTsJCQkJLyogNGEwMDhlNDQgKi8KKwl1MzIgY21faXZhaGRfY2xrc3RjdHJsOwkJCS8qIDRhMDA4ZjAwICovCisJdTMyIHBhZDA3N1s3XTsJCQkJLyogNGEwMDhmMDQgKi8KKwl1MzIgY21faXZhaGRfaXZhaGRfY2xrY3RybDsJCS8qIDRhMDA4ZjIwICovCisJdTMyIHBhZDA3OFsxXTsJCQkJLyogNGEwMDhmMjQgKi8KKwl1MzIgY21faXZhaGRfc2wyX2Nsa2N0cmw7CQkvKiA0YTAwOGYyOCAqLworCisJLyogY20yLmNhbSAqLworCXUzMiBwYWQwNzlbNTNdOwkJCQkvKiA0YTAwOGYyYyAqLworCXUzMiBjbV9jYW1fY2xrc3RjdHJsOwkJCS8qIDRhMDA5MDAwICovCisJdTMyIHBhZDA4MFs3XTsJCQkJLyogNGEwMDkwMDQgKi8KKwl1MzIgY21fY2FtX2lzc19jbGtjdHJsOwkJCS8qIDRhMDA5MDIwICovCisJdTMyIHBhZDA4MVsxXTsJCQkJLyogNGEwMDkwMjQgKi8KKwl1MzIgY21fY2FtX2ZkaWZfY2xrY3RybDsJCS8qIDRhMDA5MDI4ICovCisKKwkvKiBjbTIuZHNzICovCisJdTMyIHBhZDA4Mls1M107CQkJCS8qIDRhMDA5MDJjICovCisJdTMyIGNtX2Rzc19jbGtzdGN0cmw7CQkJLyogNGEwMDkxMDAgKi8KKwl1MzIgcGFkMDgzWzddOwkJCQkvKiA0YTAwOTEwNCAqLworCXUzMiBjbV9kc3NfZHNzX2Nsa2N0cmw7CQkJLyogNGEwMDkxMjAgKi8KKworCS8qIGNtMi5zZ3ggKi8KKwl1MzIgcGFkMDg0WzU1XTsJCQkJLyogNGEwMDkxMjQgKi8KKwl1MzIgY21fc2d4X2Nsa3N0Y3RybDsJCQkvKiA0YTAwOTIwMCAqLworCXUzMiBwYWQwODVbN107CQkJCS8qIDRhMDA5MjA0ICovCisJdTMyIGNtX3NneF9zZ3hfY2xrY3RybDsJCQkvKiA0YTAwOTIyMCAqLworCisJLyogY20yLmwzaW5pdCAqLworCXUzMiBwYWQwODZbNTVdOwkJCQkvKiA0YTAwOTIyNCAqLworCXUzMiBjbV9sM2luaXRfY2xrc3RjdHJsOwkJLyogNGEwMDkzMDAgKi8KKworCS8qIGNtMi5sM2luaXQgKi8KKwl1MzIgcGFkMDg3WzldOwkJCQkvKiA0YTAwOTMwNCAqLworCXUzMiBjbV9sM2luaXRfaHNtbWMxX2Nsa2N0cmw7CQkvKiA0YTAwOTMyOCAqLworCXUzMiBwYWQwODhbMV07CQkJCS8qIDRhMDA5MzJjICovCisJdTMyIGNtX2wzaW5pdF9oc21tYzJfY2xrY3RybDsJCS8qIDRhMDA5MzMwICovCisJdTMyIHBhZDA4OVsxXTsJCQkJLyogNGEwMDkzMzQgKi8KKwl1MzIgY21fbDNpbml0X2hzaV9jbGtjdHJsOwkJLyogNGEwMDkzMzggKi8KKwl1MzIgcGFkMDkwWzddOwkJCQkvKiA0YTAwOTMzYyAqLworCXUzMiBjbV9sM2luaXRfaHN1c2Job3N0X2Nsa2N0cmw7CS8qIDRhMDA5MzU4ICovCisJdTMyIHBhZDA5MVsxXTsJCQkJLyogNGEwMDkzNWMgKi8KKwl1MzIgY21fbDNpbml0X2hzdXNib3RnX2Nsa2N0cmw7CQkvKiA0YTAwOTM2MCAqLworCXUzMiBwYWQwOTJbMV07CQkJCS8qIDRhMDA5MzY0ICovCisJdTMyIGNtX2wzaW5pdF9oc3VzYnRsbF9jbGtjdHJsOwkJLyogNGEwMDkzNjggKi8KKwl1MzIgcGFkMDkzWzNdOwkJCQkvKiA0YTAwOTM2YyAqLworCXUzMiBjbV9sM2luaXRfcDE1MDBfY2xrY3RybDsJCS8qIDRhMDA5Mzc4ICovCisJdTMyIHBhZDA5NFsyMV07CQkJCS8qIDRhMDA5MzdjICovCisJdTMyIGNtX2wzaW5pdF9mc3VzYl9jbGtjdHJsOwkJLyogNGEwMDkzZDAgKi8KKwl1MzIgcGFkMDk1WzNdOwkJCQkvKiA0YTAwOTNkNCAqLworCXUzMiBjbV9sM2luaXRfb2NwMnNjcDFfY2xrY3RybDsKKworCS8qIGNtMi5sNHBlciAqLworCXUzMiBwYWQwOTZbN107CQkJCS8qIDRhMDA5M2U0ICovCisJdTMyIGNtX2w0cGVyX2Nsa3N0Y3RybDsJCQkvKiA0YTAwOTQwMCAqLworCXUzMiBwYWQwOTdbMV07CQkJCS8qIDRhMDA5NDA0ICovCisJdTMyIGNtX2w0cGVyX2R5bmFtaWNkZXA7CQkvKiA0YTAwOTQwOCAqLworCXUzMiBwYWQwOThbNV07CQkJCS8qIDRhMDA5NDBjICovCisJdTMyIGNtX2w0cGVyX2FkY19jbGtjdHJsOwkJLyogNGEwMDk0MjAgKi8KKwl1MzIgcGFkMTAwWzFdOwkJCQkvKiA0YTAwOTQyNCAqLworCXUzMiBjbV9sNHBlcl9ncHRpbWVyMTBfY2xrY3RybDsJCS8qIDRhMDA5NDI4ICovCisJdTMyIHBhZDEwMVsxXTsJCQkJLyogNGEwMDk0MmMgKi8KKwl1MzIgY21fbDRwZXJfZ3B0aW1lcjExX2Nsa2N0cmw7CQkvKiA0YTAwOTQzMCAqLworCXUzMiBwYWQxMDJbMV07CQkJCS8qIDRhMDA5NDM0ICovCisJdTMyIGNtX2w0cGVyX2dwdGltZXIyX2Nsa2N0cmw7CQkvKiA0YTAwOTQzOCAqLworCXUzMiBwYWQxMDNbMV07CQkJCS8qIDRhMDA5NDNjICovCisJdTMyIGNtX2w0cGVyX2dwdGltZXIzX2Nsa2N0cmw7CQkvKiA0YTAwOTQ0MCAqLworCXUzMiBwYWQxMDRbMV07CQkJCS8qIDRhMDA5NDQ0ICovCisJdTMyIGNtX2w0cGVyX2dwdGltZXI0X2Nsa2N0cmw7CQkvKiA0YTAwOTQ0OCAqLworCXUzMiBwYWQxMDVbMV07CQkJCS8qIDRhMDA5NDRjICovCisJdTMyIGNtX2w0cGVyX2dwdGltZXI5X2Nsa2N0cmw7CQkvKiA0YTAwOTQ1MCAqLworCXUzMiBwYWQxMDZbMV07CQkJCS8qIDRhMDA5NDU0ICovCisJdTMyIGNtX2w0cGVyX2VsbV9jbGtjdHJsOwkJLyogNGEwMDk0NTggKi8KKwl1MzIgcGFkMTA3WzFdOwkJCQkvKiA0YTAwOTQ1YyAqLworCXUzMiBjbV9sNHBlcl9ncGlvMl9jbGtjdHJsOwkJLyogNGEwMDk0NjAgKi8KKwl1MzIgcGFkMTA4WzFdOwkJCQkvKiA0YTAwOTQ2NCAqLworCXUzMiBjbV9sNHBlcl9ncGlvM19jbGtjdHJsOwkJLyogNGEwMDk0NjggKi8KKwl1MzIgcGFkMTA5WzFdOwkJCQkvKiA0YTAwOTQ2YyAqLworCXUzMiBjbV9sNHBlcl9ncGlvNF9jbGtjdHJsOwkJLyogNGEwMDk0NzAgKi8KKwl1MzIgcGFkMTEwWzFdOwkJCQkvKiA0YTAwOTQ3NCAqLworCXUzMiBjbV9sNHBlcl9ncGlvNV9jbGtjdHJsOwkJLyogNGEwMDk0NzggKi8KKwl1MzIgcGFkMTExWzFdOwkJCQkvKiA0YTAwOTQ3YyAqLworCXUzMiBjbV9sNHBlcl9ncGlvNl9jbGtjdHJsOwkJLyogNGEwMDk0ODAgKi8KKwl1MzIgcGFkMTEyWzFdOwkJCQkvKiA0YTAwOTQ4NCAqLworCXUzMiBjbV9sNHBlcl9oZHExd19jbGtjdHJsOwkJLyogNGEwMDk0ODggKi8KKwl1MzIgcGFkMTEzWzFdOwkJCQkvKiA0YTAwOTQ4YyAqLworCXUzMiBjbV9sNHBlcl9oZWNjMV9jbGtjdHJsOwkJLyogNGEwMDk0OTAgKi8KKwl1MzIgcGFkMTE0WzFdOwkJCQkvKiA0YTAwOTQ5NCAqLworCXUzMiBjbV9sNHBlcl9oZWNjMl9jbGtjdHJsOwkJLyogNGEwMDk0OTggKi8KKwl1MzIgcGFkMTE1WzFdOwkJCQkvKiA0YTAwOTQ5YyAqLworCXUzMiBjbV9sNHBlcl9pMmMxX2Nsa2N0cmw7CQkvKiA0YTAwOTRhMCAqLworCXUzMiBwYWQxMTZbMV07CQkJCS8qIDRhMDA5NGE0ICovCisJdTMyIGNtX2w0cGVyX2kyYzJfY2xrY3RybDsJCS8qIDRhMDA5NGE4ICovCisJdTMyIHBhZDExN1sxXTsJCQkJLyogNGEwMDk0YWMgKi8KKwl1MzIgY21fbDRwZXJfaTJjM19jbGtjdHJsOwkJLyogNGEwMDk0YjAgKi8KKwl1MzIgcGFkMTE4WzFdOwkJCQkvKiA0YTAwOTRiNCAqLworCXUzMiBjbV9sNHBlcl9pMmM0X2Nsa2N0cmw7CQkvKiA0YTAwOTRiOCAqLworCXUzMiBwYWQxMTlbMV07CQkJCS8qIDRhMDA5NGJjICovCisJdTMyIGNtX2w0cGVyX2w0cGVyX2Nsa2N0cmw7CQkvKiA0YTAwOTRjMCAqLworCXUzMiBwYWQxMTkxWzNdOwkJCQkvKiA0YTAwOTRjNCAqLworCXUzMiBjbV9sNHBlcl9tY2FzcDJfY2xrY3RybDsJCS8qIDRhMDA5NGQwICovCisJdTMyIHBhZDEyMFsxXTsJCQkJLyogNGEwMDk0ZDQgKi8KKwl1MzIgY21fbDRwZXJfbWNhc3AzX2Nsa2N0cmw7CQkvKiA0YTAwOTRkOCAqLworCXUzMiBwYWQxMjFbM107CQkJCS8qIDRhMDA5NGRjICovCisJdTMyIGNtX2w0cGVyX21nYXRlX2Nsa2N0cmw7CQkvKiA0YTAwOTRlOCAqLworCXUzMiBwYWQxMjNbMV07CQkJCS8qIDRhMDA5NGVjICovCisJdTMyIGNtX2w0cGVyX21jc3BpMV9jbGtjdHJsOwkJLyogNGEwMDk0ZjAgKi8KKwl1MzIgcGFkMTI0WzFdOwkJCQkvKiA0YTAwOTRmNCAqLworCXUzMiBjbV9sNHBlcl9tY3NwaTJfY2xrY3RybDsJCS8qIDRhMDA5NGY4ICovCisJdTMyIHBhZDEyNVsxXTsJCQkJLyogNGEwMDk0ZmMgKi8KKwl1MzIgY21fbDRwZXJfbWNzcGkzX2Nsa2N0cmw7CQkvKiA0YTAwOTUwMCAqLworCXUzMiBwYWQxMjZbMV07CQkJCS8qIDRhMDA5NTA0ICovCisJdTMyIGNtX2w0cGVyX21jc3BpNF9jbGtjdHJsOwkJLyogNGEwMDk1MDggKi8KKwl1MzIgcGFkMTI3WzFdOwkJCQkvKiA0YTAwOTUwYyAqLworCXUzMiBjbV9sNHBlcl9ncGlvN19jbGtjdHJsOwkJLyogNGEwMDk1MTAgKi8KKwl1MzIgcGFkMTI3MVsxXTsJCQkJLyogNGEwMDk1MTQgKi8KKwl1MzIgY21fbDRwZXJfZ3BpbzhfY2xrY3RybDsJCS8qIDRhMDA5NTE4ICovCisJdTMyIHBhZDEyNzJbMV07CQkJCS8qIDRhMDA5NTFjICovCisJdTMyIGNtX2w0cGVyX21tY3NkM19jbGtjdHJsOwkJLyogNGEwMDk1MjAgKi8KKwl1MzIgcGFkMTI4WzFdOwkJCQkvKiA0YTAwOTUyNCAqLworCXUzMiBjbV9sNHBlcl9tbWNzZDRfY2xrY3RybDsJCS8qIDRhMDA5NTI4ICovCisJdTMyIHBhZDEyOVsxXTsJCQkJLyogNGEwMDk1MmMgKi8KKwl1MzIgY21fbDRwZXJfbXNwcm9oZ19jbGtjdHJsOwkJLyogNGEwMDk1MzAgKi8KKwl1MzIgcGFkMTMwWzFdOwkJCQkvKiA0YTAwOTUzNCAqLworCXUzMiBjbV9sNHBlcl9zbGltYnVzMl9jbGtjdHJsOwkJLyogNGEwMDk1MzggKi8KKwl1MzIgcGFkMTMxWzFdOwkJCQkvKiA0YTAwOTUzYyAqLworCXUzMiBjbV9sNHBlcl91YXJ0MV9jbGtjdHJsOwkJLyogNGEwMDk1NDAgKi8KKwl1MzIgcGFkMTMyWzFdOwkJCQkvKiA0YTAwOTU0NCAqLworCXUzMiBjbV9sNHBlcl91YXJ0Ml9jbGtjdHJsOwkJLyogNGEwMDk1NDggKi8KKwl1MzIgcGFkMTMzWzFdOwkJCQkvKiA0YTAwOTU0YyAqLworCXUzMiBjbV9sNHBlcl91YXJ0M19jbGtjdHJsOwkJLyogNGEwMDk1NTAgKi8KKwl1MzIgcGFkMTM0WzFdOwkJCQkvKiA0YTAwOTU1NCAqLworCXUzMiBjbV9sNHBlcl91YXJ0NF9jbGtjdHJsOwkJLyogNGEwMDk1NTggKi8KKwl1MzIgcGFkMTM1WzFdOwkJCQkvKiA0YTAwOTU1YyAqLworCXUzMiBjbV9sNHBlcl9tbWNzZDVfY2xrY3RybDsJCS8qIDRhMDA5NTYwICovCisJdTMyIHBhZDEzNlsxXTsJCQkJLyogNGEwMDk1NjQgKi8KKwl1MzIgY21fbDRwZXJfaTJjNV9jbGtjdHJsOwkJLyogNGEwMDk1NjggKi8KKwl1MzIgcGFkMTM3MVsxXTsJCQkJLyogNGEwMDk1NmMgKi8KKwl1MzIgY21fbDRwZXJfdWFydDVfY2xrY3RybDsJCS8qIDRhMDA5NTcwICovCisJdTMyIHBhZDEzNzJbMV07CQkJCS8qIDRhMDA5NTc0ICovCisJdTMyIGNtX2w0cGVyX3VhcnQ2X2Nsa2N0cmw7CQkvKiA0YTAwOTU3OCAqLworCXUzMiBwYWQxMzc0WzFdOwkJCQkvKiA0YTAwOTU3YyAqLworCXUzMiBjbV9sNHNlY19jbGtzdGN0cmw7CQkJLyogNGEwMDk1ODAgKi8KKwl1MzIgY21fbDRzZWNfc3RhdGljZGVwOwkJCS8qIDRhMDA5NTg0ICovCisJdTMyIGNtX2w0c2VjX2R5bmFtaWNkZXA7CQkvKiA0YTAwOTU4OCAqLworCXUzMiBwYWQxMzhbNV07CQkJCS8qIDRhMDA5NThjICovCisJdTMyIGNtX2w0c2VjX2FlczFfY2xrY3RybDsJCS8qIDRhMDA5NWEwICovCisJdTMyIHBhZDEzOVsxXTsJCQkJLyogNGEwMDk1YTQgKi8KKwl1MzIgY21fbDRzZWNfYWVzMl9jbGtjdHJsOwkJLyogNGEwMDk1YTggKi8KKwl1MzIgcGFkMTQwWzFdOwkJCQkvKiA0YTAwOTVhYyAqLworCXUzMiBjbV9sNHNlY19kZXMzZGVzX2Nsa2N0cmw7CQkvKiA0YTAwOTViMCAqLworCXUzMiBwYWQxNDFbMV07CQkJCS8qIDRhMDA5NWI0ICovCisJdTMyIGNtX2w0c2VjX3BrYWVpcDI5X2Nsa2N0cmw7CQkvKiA0YTAwOTViOCAqLworCXUzMiBwYWQxNDJbMV07CQkJCS8qIDRhMDA5NWJjICovCisJdTMyIGNtX2w0c2VjX3JuZ19jbGtjdHJsOwkJLyogNGEwMDk1YzAgKi8KKwl1MzIgcGFkMTQzWzFdOwkJCQkvKiA0YTAwOTVjNCAqLworCXUzMiBjbV9sNHNlY19zaGEybWQ1MV9jbGtjdHJsOwkJLyogNGEwMDk1YzggKi8KKwl1MzIgcGFkMTQ0WzNdOwkJCQkvKiA0YTAwOTVjYyAqLworCXUzMiBjbV9sNHNlY19jcnlwdG9kbWFfY2xrY3RybDsJCS8qIDRhMDA5NWQ4ICovCisJdTMyIHBhZDE0NVszNjYwNDI1XTsJCQkvKiA0YTAwOTVkYyAqLworCisJLyogbDQgd2t1cCByZWdzICovCisJdTMyIHBhZDIwMVs2MjExXTsJCQkvKiA0YWUwMDAwMCAqLworCXUzMiBjbV9hYmVfcGxsX3JlZl9jbGtzZWw7CQkvKiA0YWUwNjEwYyAqLworCXUzMiBjbV9zeXNfY2xrc2VsOwkJCS8qIDRhZTA2MTEwICovCisJdTMyIHBhZDIwMlsxNDY3XTsJCQkvKiA0YWUwNjExNCAqLworCXUzMiBjbV93a3VwX2Nsa3N0Y3RybDsJCQkvKiA0YWUwNzgwMCAqLworCXUzMiBwYWQyMDNbN107CQkJCS8qIDRhZTA3ODA0ICovCisJdTMyIGNtX3drdXBfbDR3a3VwX2Nsa2N0cmw7CQkvKiA0YWUwNzgyMCAqLworCXUzMiBwYWQyMDQ7CQkJCS8qIDRhZTA3ODI0ICovCisJdTMyIGNtX3drdXBfd2R0aW1lcjFfY2xrY3RybDsJCS8qIDRhZTA3ODI4ICovCisJdTMyIHBhZDIwNTsJCQkJLyogNGFlMDc4MmMgKi8KKwl1MzIgY21fd2t1cF93ZHRpbWVyMl9jbGtjdHJsOwkJLyogNGFlMDc4MzAgKi8KKwl1MzIgcGFkMjA2OwkJCQkvKiA0YWUwNzgzNCAqLworCXUzMiBjbV93a3VwX2dwaW8xX2Nsa2N0cmw7CQkvKiA0YWUwNzgzOCAqLworCXUzMiBwYWQyMDc7CQkJCS8qIDRhZTA3ODNjICovCisJdTMyIGNtX3drdXBfZ3B0aW1lcjFfY2xrY3RybDsJCS8qIDRhZTA3ODQwICovCisJdTMyIHBhZDIwODsJCQkJLyogNGFlMDc4NDQgKi8KKwl1MzIgY21fd2t1cF9ncHRpbWVyMTJfY2xrY3RybDsJCS8qIDRhZTA3ODQ4ICovCisJdTMyIHBhZDIwOTsJCQkJLyogNGFlMDc4NGMgKi8KKwl1MzIgY21fd2t1cF9zeW5jdGltZXJfY2xrY3RybDsJCS8qIDRhZTA3ODUwICovCisJdTMyIHBhZDIxMDsJCQkJLyogNGFlMDc4NTQgKi8KKwl1MzIgY21fd2t1cF91c2ltX2Nsa2N0cmw7CQkvKiA0YWUwNzg1OCAqLworCXUzMiBwYWQyMTE7CQkJCS8qIDRhZTA3ODVjICovCisJdTMyIGNtX3drdXBfc2FycmFtX2Nsa2N0cmw7CQkvKiA0YWUwNzg2MCAqLworCXUzMiBwYWQyMTJbNV07CQkJCS8qIDRhZTA3ODY0ICovCisJdTMyIGNtX3drdXBfa2V5Ym9hcmRfY2xrY3RybDsJCS8qIDRhZTA3ODc4ICovCisJdTMyIHBhZDIxMzsJCQkJLyogNGFlMDc4N2MgKi8KKwl1MzIgY21fd2t1cF9ydGNfY2xrY3RybDsJCS8qIDRhZTA3ODgwICovCisJdTMyIHBhZDIxNDsJCQkJLyogNGFlMDc4ODQgKi8KKwl1MzIgY21fd2t1cF9iYW5kZ2FwX2Nsa2N0cmw7CQkvKiA0YWUwNzg4OCAqLworCXUzMiBwYWQyMTVbMTk3XTsJCQkvKiA0YWUwNzg4YyAqLworCXUzMiBwcm1fdmNfdmFsX2J5cGFzczsJCQkvKiA0YWUwN2JhMCAqLworCXUzMiBwYWQyMTZbNF07CisJdTMyIHBybV92Y19jZmdfaTJjX21vZGU7CQkvKiA0YWUwN2JiNCAqLworCXUzMiBwcm1fdmNfY2ZnX2kyY19jbGs7CQkJLyogNGFlMDdiYjggKi8KK307CisKKy8qIERQTEwgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBDTV9DTEtNT0RFX0RQTEwJCTAKKyNkZWZpbmUgQ01fSURMRVNUX0RQTEwJCTB4NAorI2RlZmluZSBDTV9BVVRPSURMRV9EUExMCTB4OAorI2RlZmluZSBDTV9DTEtTRUxfRFBMTAkJMHhDCisKKyNkZWZpbmUgRFBMTF9DTEtPVVRfRElWX01BU0sJMHgxRiAvKiBwb3N0LWRpdmlkZXIgbWFzayAqLworCisvKiBDTV9DTEtNT0RFX0RQTEwgKi8KKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX1JFR000WEVOX1NISUZUCQkxMQorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfUkVHTTRYRU5fTUFTSwkJKDEgPDwgMTEpCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9MUE1PREVfRU5fU0hJRlQJCTEwCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9MUE1PREVfRU5fTUFTSwkJKDEgPDwgMTApCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9SRUxPQ0tfUkFNUF9FTl9TSElGVAk5CisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9SRUxPQ0tfUkFNUF9FTl9NQVNLCSgxIDw8IDkpCisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9EUklGVEdVQVJEX0VOX1NISUZUCTgKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0RSSUZUR1VBUkRfRU5fTUFTSwkoMSA8PCA4KQorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfUkFNUF9SQVRFX1NISUZUCQk1CisjZGVmaW5lIENNX0NMS01PREVfRFBMTF9SQU1QX1JBVEVfTUFTSwkJKDB4NyA8PCA1KQorI2RlZmluZSBDTV9DTEtNT0RFX0RQTExfRU5fU0hJRlQJCTAKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0VOX01BU0sJCQkoMHg3IDw8IDApCisKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0RQTExfRU5fU0hJRlQJCTAKKyNkZWZpbmUgQ01fQ0xLTU9ERV9EUExMX0RQTExfRU5fTUFTSwkJNworCisjZGVmaW5lIERQTExfRU5fU1RPUAkJCTEKKyNkZWZpbmUgRFBMTF9FTl9NTl9CWVBBU1MJCTQKKyNkZWZpbmUgRFBMTF9FTl9MT1dfUE9XRVJfQllQQVNTCTUKKyNkZWZpbmUgRFBMTF9FTl9GQVNUX1JFTE9DS19CWVBBU1MJNgorI2RlZmluZSBEUExMX0VOX0xPQ0sJCQk3CisKKy8qIENNX0lETEVTVF9EUExMIGZpZWxkcyAqLworI2RlZmluZSBTVF9EUExMX0NMS19NQVNLCQkxCisKKy8qIENNX0NMS1NFTF9EUExMICovCisjZGVmaW5lIENNX0NMS1NFTF9EUExMX0RQTExfU0RfRElWX1NISUZUCTI0CisjZGVmaW5lIENNX0NMS1NFTF9EUExMX0RQTExfU0RfRElWX01BU0sJCSgweEZGIDw8IDI0KQorI2RlZmluZSBDTV9DTEtTRUxfRFBMTF9NX1NISUZUCQkJOAorI2RlZmluZSBDTV9DTEtTRUxfRFBMTF9NX01BU0sJCQkoMHg3RkYgPDwgOCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0RQTExfTl9TSElGVAkJCTAKKyNkZWZpbmUgQ01fQ0xLU0VMX0RQTExfTl9NQVNLCQkJMHg3RgorI2RlZmluZSBDTV9DTEtTRUxfRENDX0VOX1NISUZUCQkJMjIKKyNkZWZpbmUgQ01fQ0xLU0VMX0RDQ19FTl9NQVNLCQkJKDEgPDwgMjIpCisKKyNkZWZpbmUgT01BUDRfRFBMTF9NQVhfTgkxMjcKKworLyogQ01fU1lTX0NMS1NFTCAqLworI2RlZmluZSBDTV9TWVNfQ0xLU0VMX1NZU19DTEtTRUxfTUFTSwk3CisKKy8qIENNX0NMS1NFTF9DT1JFICovCisjZGVmaW5lIENMS1NFTF9DT1JFX1NISUZUCTAKKyNkZWZpbmUgQ0xLU0VMX0wzX1NISUZUCQk0CisjZGVmaW5lIENMS1NFTF9MNF9TSElGVAkJOAorCisjZGVmaW5lIENMS1NFTF9DT1JFX1gyX0RJVl8xCTAKKyNkZWZpbmUgQ0xLU0VMX0wzX0NPUkVfRElWXzIJMQorI2RlZmluZSBDTEtTRUxfTDRfTDNfRElWXzIJMQorCisvKiBDTV9BQkVfUExMX1JFRl9DTEtTRUwgKi8KKyNkZWZpbmUgQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF9TSElGVAkwCisjZGVmaW5lIENNX0FCRV9QTExfUkVGX0NMS1NFTF9DTEtTRUxfTUFTSwkxCisjZGVmaW5lIENNX0FCRV9QTExfUkVGX0NMS1NFTF9DTEtTRUxfU1lTQ0xLCTAKKyNkZWZpbmUgQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX0NMS1NFTF8zMktDTEsJMQorCisvKiBDTV9CWVBDTEtfRFBMTF9JVkEgKi8KKyNkZWZpbmUgQ01fQllQQ0xLX0RQTExfSVZBX0NMS1NFTF9TSElGVAkJMAorI2RlZmluZSBDTV9CWVBDTEtfRFBMTF9JVkFfQ0xLU0VMX01BU0sJCTMKKworI2RlZmluZSBEUExMX0lWQV9DTEtTRUxfQ09SRV9YMl9ESVZfMgkJMQorCisvKiBDTV9TSEFET1dfRlJFUV9DT05GSUcxICovCisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfRlJFUV9VUERBVEVfTUFTSwkxCisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfRExMX09WRVJSSURFX01BU0sJNAorI2RlZmluZSBTSEFET1dfRlJFUV9DT05GSUcxX0RMTF9SRVNFVF9NQVNLCTgKKworI2RlZmluZSBTSEFET1dfRlJFUV9DT05GSUcxX0RQTExfRU5fU0hJRlQJOAorI2RlZmluZSBTSEFET1dfRlJFUV9DT05GSUcxX0RQTExfRU5fTUFTSwkoNyA8PCA4KQorCisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfTTJfRElWX1NISUZUCTExCisjZGVmaW5lIFNIQURPV19GUkVRX0NPTkZJRzFfTTJfRElWX01BU0sJCSgweDFGIDw8IDExKQorCisvKkNNXzxjbG9ja19kb21haW4+X19DTEtDVFJMICovCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX1NISUZUCQkwCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX01BU0sJCTMKKworI2RlZmluZSBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9OT19TTEVFUAkJMAorI2RlZmluZSBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TV19TTEVFUAkJMQorI2RlZmluZSBDRF9DTEtDVFJMX0NMS1RSQ1RSTF9TV19XS1VQCQkyCisjZGVmaW5lIENEX0NMS0NUUkxfQ0xLVFJDVFJMX0hXX0FVVE8JCTMKKworCisvKiBDTV88Y2xvY2tfZG9tYWluPl88bW9kdWxlPl9DTEtDVFJMICovCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU0hJRlQJCTAKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9NQVNLCQkzCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9TSElGVAkJMTYKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfSURMRVNUX01BU0sJCSgzIDw8IDE2KQorCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX01PRFVMRU1PREVfU1dfRElTQUJMRQkJMAorI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9NT0RVTEVNT0RFX0hXX0FVVE8JCTEKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfTU9EVUxFTU9ERV9TV19FWFBMSUNJVF9FTgkyCisKKyNkZWZpbmUgTU9EVUxFX0NMS0NUUkxfSURMRVNUX0ZVTExZX0ZVTkNUSU9OQUwJMAorI2RlZmluZSBNT0RVTEVfQ0xLQ1RSTF9JRExFU1RfVFJBTlNJVElPTklORwkxCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9JRExFCQkyCisjZGVmaW5lIE1PRFVMRV9DTEtDVFJMX0lETEVTVF9ESVNBQkxFRAkJMworCisvKiBDTV9MNFBFUl9HUElPNF9DTEtDVFJMICovCisjZGVmaW5lIEdQSU80X0NMS0NUUkxfT1BURkNMS0VOX01BU0sJCSgxIDw8IDgpCisKKy8qIENNX0wzSU5JVF9IU01NQ25fQ0xLQ1RSTCAqLworI2RlZmluZSBIU01NQ19DTEtDVFJMX0NMS1NFTF9NQVNLCQkoMSA8PCAyNCkKKworLyogQ01fV0tVUF9HUFRJTUVSMV9DTEtDVFJMICovCisjZGVmaW5lIEdQVElNRVIxX0NMS0NUUkxfQ0xLU0VMX01BU0sJCSgxIDw8IDI0KQorCisvKiBDTV9DQU1fSVNTX0NMS0NUUkwgKi8KKyNkZWZpbmUgSVNTX0NMS0NUUkxfT1BURkNMS0VOX01BU0sJCSgxIDw8IDgpCisKKy8qIENNX0RTU19EU1NfQ0xLQ1RSTCAqLworI2RlZmluZSBEU1NfQ0xLQ1RSTF9PUFRGQ0xLRU5fTUFTSwkJMHhGMDAKKworLyogQ01fTDNJTklUX1VTQlBIWV9DTEtDVFJMICovCisjZGVmaW5lIFVTQlBIWV9DTEtDVFJMX09QVEZDTEtFTl9QSFlfNDhNX01BU0sJOAorCisvKiBDTV9NUFVfTVBVX0NMS0NUUkwgKi8KKyNkZWZpbmUgTVBVX0NMS0NUUkxfQ0xLU0VMX0VNSUZfRElWX01PREVfU0hJRlQJMjQKKyNkZWZpbmUgTVBVX0NMS0NUUkxfQ0xLU0VMX0VNSUZfRElWX01PREVfTUFTSwkoMSA8PCAyNCkKKyNkZWZpbmUgTVBVX0NMS0NUUkxfQ0xLU0VMX0FCRV9ESVZfTU9ERV9TSElGVAkyNQorI2RlZmluZSBNUFVfQ0xLQ1RSTF9DTEtTRUxfQUJFX0RJVl9NT0RFX01BU0sJKDEgPDwgMjUpCisKKy8qIENsb2NrIGZyZXF1ZW5jaWVzICovCisjZGVmaW5lIE9NQVBfU1lTX0NMS19GUkVRXzM4XzRfTUhaCTM4NDAwMDAwCisjZGVmaW5lIE9NQVBfU1lTX0NMS19JTkRfMzhfNF9NSFoJNgorI2RlZmluZSBPTUFQXzMyS19DTEtfRlJFUQkJMzI3NjgKKworLyogUFJNX1ZDX0NGR19JMkNfQ0xLICovCisjZGVmaW5lIFBSTV9WQ19DRkdfSTJDX0NMS19TQ0xIX1NISUZUCQkwCisjZGVmaW5lIFBSTV9WQ19DRkdfSTJDX0NMS19TQ0xIX01BU0sJCTB4RkYKKyNkZWZpbmUgUFJNX1ZDX0NGR19JMkNfQ0xLX1NDTExfU0hJRlQJCTgKKyNkZWZpbmUgUFJNX1ZDX0NGR19JMkNfQ0xLX1NDTExfTUFTSwkJKDB4RkYgPDwgOCkKKworLyogUFJNX1ZDX1ZBTF9CWVBBU1MgKi8KKyNkZWZpbmUgUFJNX1ZDX0kyQ19DSEFOTkVMX0ZSRVFfS0haCTQwMAorCisjZGVmaW5lIFBSTV9WQ19WQUxfQllQQVNTX1ZBTElEX0JJVAkweDEwMDAwMDAKKyNkZWZpbmUgUFJNX1ZDX1ZBTF9CWVBBU1NfU0xBVkVBRERSX1NISUZUCTAKKyNkZWZpbmUgUFJNX1ZDX1ZBTF9CWVBBU1NfU0xBVkVBRERSX01BU0sJMHg3RgorI2RlZmluZSBQUk1fVkNfVkFMX0JZUEFTU19SRUdBRERSX1NISUZUCQk4CisjZGVmaW5lIFBSTV9WQ19WQUxfQllQQVNTX1JFR0FERFJfTUFTSwkJMHhGRgorI2RlZmluZSBQUk1fVkNfVkFMX0JZUEFTU19EQVRBX1NISUZUCQkxNgorI2RlZmluZSBQUk1fVkNfVkFMX0JZUEFTU19EQVRBX01BU0sJCTB4RkYKKworLyogU01QUyAqLworI2RlZmluZSBTTVBTX0kyQ19TTEFWRV9BRERSCTB4MTIKKyNkZWZpbmUgU01QU19SRUdfQUREUl9WQ09SRTEJMHg1NQorI2RlZmluZSBTTVBTX1JFR19BRERSX1ZDT1JFMgkweDVCCisjZGVmaW5lIFNNUFNfUkVHX0FERFJfVkNPUkUzCTB4NjEKKworI2RlZmluZSBQSE9FTklYX1NNUFNfQkFTRV9WT0xUX1NURF9NT0RFX1VWCQk2MDc3MDAKKyNkZWZpbmUgUEhPRU5JWF9TTVBTX0JBU0VfVk9MVF9TVERfTU9ERV9XSVRIX09GRlNFVF9VVgk3MDkwMDAKKworLyogVFBTICovCisjZGVmaW5lIFRQUzYyMzYxX0kyQ19TTEFWRV9BRERSCQkweDYwCisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX1NFVDAJCTB4MAorI2RlZmluZSBUUFM2MjM2MV9SRUdfQUREUl9TRVQxCQkweDEKKyNkZWZpbmUgVFBTNjIzNjFfUkVHX0FERFJfU0VUMgkJMHgyCisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX1NFVDMJCTB4MworI2RlZmluZSBUUFM2MjM2MV9SRUdfQUREUl9DVFJMCQkweDQKKyNkZWZpbmUgVFBTNjIzNjFfUkVHX0FERFJfVEVNUAkJMHg1CisjZGVmaW5lIFRQUzYyMzYxX1JFR19BRERSX1JNUF9DVFJMCTB4NgorI2RlZmluZSBUUFM2MjM2MV9SRUdfQUREUl9DSElQX0lECTB4OAorI2RlZmluZSBUUFM2MjM2MV9SRUdfQUREUl9DSElQX0lEXzIJMHg5CisKKyNkZWZpbmUgVFBTNjIzNjFfQkFTRV9WT0xUX01WCTUwMAorI2RlZmluZSBUUFM2MjM2MV9WU0VMMF9HUElPCTcKKworLyogRGVmaW5lcyBmb3IgRFBMTCBzZXR1cCAqLworI2RlZmluZSBEUExMX0xPQ0tFRF9GUkVRX1RPTEVSQU5DRV8wCQkwCisjZGVmaW5lIERQTExfTE9DS0VEX0ZSRVFfVE9MRVJBTkNFXzUwMF9LSFoJNTAwCisjZGVmaW5lIERQTExfTE9DS0VEX0ZSRVFfVE9MRVJBTkNFXzFfTUhaCTEwMDAKKworI2RlZmluZSBEUExMX05PX0xPQ0sJMAorI2RlZmluZSBEUExMX0xPQ0sJMQorCisjZGVmaW5lIE5VTV9TWVNfQ0xLUwk3CisKK3N0cnVjdCBkcGxsX3JlZ3MgeworCXUzMiBjbV9jbGttb2RlX2RwbGw7CisJdTMyIGNtX2lkbGVzdF9kcGxsOworCXUzMiBjbV9hdXRvaWRsZV9kcGxsOworCXUzMiBjbV9jbGtzZWxfZHBsbDsKKwl1MzIgY21fZGl2X20yX2RwbGw7CisJdTMyIGNtX2Rpdl9tM19kcGxsOworCXUzMiBjbV9kaXZfaDExX2RwbGw7CisJdTMyIGNtX2Rpdl9oMTJfZHBsbDsKKwl1MzIgY21fZGl2X2gxM19kcGxsOworCXUzMiBjbV9kaXZfaDE0X2RwbGw7CisJdTMyIHJlc2VydmVkWzJdOworCXUzMiBjbV9kaXZfaDIyX2RwbGw7CisJdTMyIGNtX2Rpdl9oMjNfZHBsbDsKK307CisKKy8qIERQTEwgcGFyYW1ldGVyIHRhYmxlICovCitzdHJ1Y3QgZHBsbF9wYXJhbXMgeworCXUzMiBtOworCXUzMiBuOworCXU4IG0yOworCXU4IG0zOworCXU4IGgxMTsKKwl1OCBoMTI7CisJdTggaDEzOworCXU4IGgxNDsKKwl1OCBoMjI7CisJdTggaDIzOworfTsKKworZXh0ZXJuIHN0cnVjdCBvbWFwNV9wcmNtX3JlZ3MgKmNvbnN0IHByY207CitleHRlcm4gY29uc3QgdTMyIHN5c19jbGtfYXJyYXlbOF07CisKK3ZvaWQgc2NhbGVfdmNvcmVzKHZvaWQpOwordm9pZCBkb19zY2FsZV90cHM2MjM2MSh1MzIgcmVnLCB1MzIgdm9sdF9tdik7Cit1MzIgb21hcF9kZHJfY2xrKHZvaWQpOwordm9pZCBkb19zY2FsZV92Y29yZSh1MzIgdmNvcmVfcmVnLCB1MzIgdm9sdF9tdik7Cit2b2lkIHNldHVwX3NyaTJjKHZvaWQpOwordm9pZCBzZXR1cF9wb3N0X2RpdmlkZXJzKHUzMiAqY29uc3QgYmFzZSwgY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpwYXJhbXMpOwordTMyIGdldF9zeXNfY2xrX2luZGV4KHZvaWQpOwordm9pZCBlbmFibGVfYmFzaWNfY2xvY2tzKHZvaWQpOwordm9pZCBlbmFibGVfbm9uX2Vzc2VudGlhbF9jbG9ja3Modm9pZCk7Cit2b2lkIGVuYWJsZV9iYXNpY191Ym9vdF9jbG9ja3Modm9pZCk7Cit2b2lkIGRvX2VuYWJsZV9jbG9ja3ModTMyICpjb25zdCAqY2xrX2RvbWFpbnMsCisJCSAgICAgIHUzMiAqY29uc3QgKmNsa19tb2R1bGVzX2h3X2F1dG8sCisJCSAgICAgIHUzMiAqY29uc3QgKmNsa19tb2R1bGVzX2V4cGxpY2l0X2VuLAorCQkgICAgICB1OCB3YWl0X2Zvcl9lbmFibGUpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfbXB1X2RwbGxfcGFyYW1zKHZvaWQpOworY29uc3Qgc3RydWN0IGRwbGxfcGFyYW1zICpnZXRfY29yZV9kcGxsX3BhcmFtcyh2b2lkKTsKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X3Blcl9kcGxsX3BhcmFtcyh2b2lkKTsKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X2l2YV9kcGxsX3BhcmFtcyh2b2lkKTsKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X3VzYl9kcGxsX3BhcmFtcyh2b2lkKTsKK2NvbnN0IHN0cnVjdCBkcGxsX3BhcmFtcyAqZ2V0X2FiZV9kcGxsX3BhcmFtcyh2b2lkKTsKKyNlbmRpZiAvKiBfQ0xPQ0tTX09NQVA1X0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2NwdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjk3YTczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9jcHUuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNi0yMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICoJQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfQ1BVX0gKKyNkZWZpbmUgX0NQVV9ICisKKyNpZiAhKGRlZmluZWQoX19LRVJORUxfU1RSSUNUX05BTUVTKSB8fCBkZWZpbmVkKF9fQVNTRU1CTFlfXykpCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjZW5kaWYgLyogIShfX0tFUk5FTF9TVFJJQ1RfTkFNRVMgfHwgX19BU1NFTUJMWV9fKSAqLworCisjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBncG1jX2NzIHsKKwl1MzIgY29uZmlnMTsJCS8qIDB4MDAgKi8KKwl1MzIgY29uZmlnMjsJCS8qIDB4MDQgKi8KKwl1MzIgY29uZmlnMzsJCS8qIDB4MDggKi8KKwl1MzIgY29uZmlnNDsJCS8qIDB4MEMgKi8KKwl1MzIgY29uZmlnNTsJCS8qIDB4MTAgKi8KKwl1MzIgY29uZmlnNjsJCS8qIDB4MTQgKi8KKwl1MzIgY29uZmlnNzsJCS8qIDB4MTggKi8KKwl1MzIgbmFuZF9jbWQ7CQkvKiAweDFDICovCisJdTMyIG5hbmRfYWRyOwkJLyogMHgyMCAqLworCXUzMiBuYW5kX2RhdDsJCS8qIDB4MjQgKi8KKwl1OCByZXNbOF07CQkvKiBibG93IHVwIHRvIDB4MzAgYnl0ZSAqLworfTsKKworc3RydWN0IGdwbWMgeworCXU4IHJlczFbMHgxMF07CisJdTMyIHN5c2NvbmZpZzsJCS8qIDB4MTAgKi8KKwl1OCByZXMyWzB4NF07CisJdTMyIGlycXN0YXR1czsJCS8qIDB4MTggKi8KKwl1MzIgaXJxZW5hYmxlOwkJLyogMHgxQyAqLworCXU4IHJlczNbMHgyMF07CisJdTMyIHRpbWVvdXRfY29udHJvbDsJLyogMHg0MCAqLworCXU4IHJlczRbMHhDXTsKKwl1MzIgY29uZmlnOwkJLyogMHg1MCAqLworCXUzMiBzdGF0dXM7CQkvKiAweDU0ICovCisJdTggcmVzNVsweDhdOwkvKiAweDU4ICovCisJc3RydWN0IGdwbWNfY3MgY3NbOF07CS8qIDB4NjAsIDB4OTAsIC4uICovCisJdTggcmVzNlsweDE0XTsJCS8qIDB4MUUwICovCisJdTMyIGVjY19jb25maWc7CQkvKiAweDFGNCAqLworCXUzMiBlY2NfY29udHJvbDsJLyogMHgxRjggKi8KKwl1MzIgZWNjX3NpemVfY29uZmlnOwkvKiAweDFGQyAqLworCXUzMiBlY2MxX3Jlc3VsdDsJLyogMHgyMDAgKi8KKwl1MzIgZWNjMl9yZXN1bHQ7CS8qIDB4MjA0ICovCisJdTMyIGVjYzNfcmVzdWx0OwkvKiAweDIwOCAqLworCXUzMiBlY2M0X3Jlc3VsdDsJLyogMHgyMEMgKi8KKwl1MzIgZWNjNV9yZXN1bHQ7CS8qIDB4MjEwICovCisJdTMyIGVjYzZfcmVzdWx0OwkvKiAweDIxNCAqLworCXUzMiBlY2M3X3Jlc3VsdDsJLyogMHgyMTggKi8KKwl1MzIgZWNjOF9yZXN1bHQ7CS8qIDB4MjFDICovCisJdTMyIGVjYzlfcmVzdWx0OwkvKiAweDIyMCAqLworfTsKKworLyogVXNlZCBmb3IgYm9hcmQgc3BlY2lmaWMgZ3BtYyBpbml0aWFsaXphdGlvbiAqLworZXh0ZXJuIHN0cnVjdCBncG1jICpncG1jX2NmZzsKKworc3RydWN0IGdwdGltZXIgeworCXUzMiB0aWRyOwkJLyogMHgwMCByICovCisJdTggcmVzMVsweGNdOworCXUzMiB0aW9jcF9jZmc7CQkvKiAweDEwIHJ3ICovCisJdTggcmVzMlsweDEwXTsKKwl1MzIgdGlzcl9yYXc7CQkvKiAweDI0IHIgKi8KKwl1MzIgdGlzcjsJCS8qIDB4MjggcncgKi8KKwl1MzIgdGllcjsJCS8qIDB4MmMgcncgKi8KKwl1MzIgdGljcjsJCS8qIDB4MzAgcncgKi8KKwl1MzIgdHdlcjsJCS8qIDB4MzQgcncgKi8KKwl1MzIgdGNscjsJCS8qIDB4MzggcncgKi8KKwl1MzIgdGNycjsJCS8qIDB4M2MgcncgKi8KKwl1MzIgdGxkcjsJCS8qIDB4NDAgcncgKi8KKwl1MzIgdHRncjsJCS8qIDB4NDQgcncgKi8KKwl1MzIgdHdwYzsJCS8qIDB4NDggciAqLworCXUzMiB0bWFyOwkJLyogMHg0YyBydyAqLworCXUzMiB0Y2FyMTsJCS8qIDB4NTAgciAqLworCXUzMiB0Y2ljcjsJCS8qIDB4NTQgcncgKi8KKwl1MzIgdGNhcjI7CQkvKiAweDU4IHIgKi8KK307CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX19LRVJORUxfU1RSSUNUX05BTUVTICovCisKKy8qIGVuYWJsZSBzeXNfY2xrIE5PLXByZXNjYWxlIC8xICovCisjZGVmaW5lIEdQVF9FTgkJCSgoMHgwIDw8IDIpIHwgKDB4MSA8PCAxKSB8ICgweDEgPDwgMCkpCisKKy8qIFdhdGNoZG9nICovCisjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCB3YXRjaGRvZyB7CisJdTggcmVzMVsweDM0XTsKKwl1MzIgd3dwczsJCS8qIDB4MzQgciAqLworCXU4IHJlczJbMHgxMF07CisJdTMyIHdzcHI7CQkvKiAweDQ4IHJ3ICovCit9OworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX1NUUklDVF9OQU1FUyAqLworCisjZGVmaW5lIFdEX1VOTE9DSzEJCTB4QUFBQQorI2RlZmluZSBXRF9VTkxPQ0syCQkweDU1NTUKKworI2RlZmluZSBTWVNDTEtESVZfMQkJKDB4MSA8PCA2KQorI2RlZmluZSBTWVNDTEtESVZfMgkJKDB4MSA8PCA3KQorCisjZGVmaW5lIENMS1NFTF9HUFQxCQkoMHgxIDw8IDApCisKKyNkZWZpbmUgRU5fR1BUMQkJCSgweDEgPDwgMCkKKyNkZWZpbmUgRU5fMzJLU1lOQwkJKDB4MSA8PCAyKQorCisjZGVmaW5lIFNUX1dEVDIJCQkoMHgxIDw8IDUpCisKKyNkZWZpbmUgUkVTRVRET05FCQkoMHgxIDw8IDApCisKKyNkZWZpbmUgVENMUl9TVAkJCSgweDEgPDwgMCkKKyNkZWZpbmUgVENMUl9BUgkJCSgweDEgPDwgMSkKKyNkZWZpbmUgVENMUl9QUkUJCSgweDEgPDwgNSkKKworLyogR1BNQyBCQVNFICovCisjZGVmaW5lIEdQTUNfQkFTRQkJKE9NQVA1NFhYX0dQTUNfQkFTRSkKKworLyogSTJDIGJhc2UgKi8KKyNkZWZpbmUgSTJDX0JBU0UxCQkoT01BUDU0WFhfTDRfUEVSX0JBU0UgKyAweDcwMDAwKQorI2RlZmluZSBJMkNfQkFTRTIJCShPTUFQNTRYWF9MNF9QRVJfQkFTRSArIDB4NzIwMDApCisjZGVmaW5lIEkyQ19CQVNFMwkJKE9NQVA1NFhYX0w0X1BFUl9CQVNFICsgMHg2MDAwMCkKKworLyogTVVTQiBiYXNlICovCisjZGVmaW5lIE1VU0JfQkFTRQkJKE9NQVA1NFhYX0w0X0NPUkVfQkFTRSArIDB4QUIwMDApCisKKy8qIE9NQVA0IEdQSU8gcmVnaXN0ZXJzICovCisjZGVmaW5lIE9NQVBfR1BJT19SRVZJU0lPTgkJMHgwMDAwCisjZGVmaW5lIE9NQVBfR1BJT19TWVNDT05GSUcJCTB4MDAxMAorI2RlZmluZSBPTUFQX0dQSU9fU1lTU1RBVFVTCQkweDAxMTQKKyNkZWZpbmUgT01BUF9HUElPX0lSUVNUQVRVUzEJCTB4MDExOAorI2RlZmluZSBPTUFQX0dQSU9fSVJRU1RBVFVTMgkJMHgwMTI4CisjZGVmaW5lIE9NQVBfR1BJT19JUlFFTkFCTEUyCQkweDAxMmMKKyNkZWZpbmUgT01BUF9HUElPX0lSUUVOQUJMRTEJCTB4MDExYworI2RlZmluZSBPTUFQX0dQSU9fV0FLRV9FTgkJMHgwMTIwCisjZGVmaW5lIE9NQVBfR1BJT19DVFJMCQkJMHgwMTMwCisjZGVmaW5lIE9NQVBfR1BJT19PRQkJCTB4MDEzNAorI2RlZmluZSBPTUFQX0dQSU9fREFUQUlOCQkweDAxMzgKKyNkZWZpbmUgT01BUF9HUElPX0RBVEFPVVQJCTB4MDEzYworI2RlZmluZSBPTUFQX0dQSU9fTEVWRUxERVRFQ1QwCQkweDAxNDAKKyNkZWZpbmUgT01BUF9HUElPX0xFVkVMREVURUNUMQkJMHgwMTQ0CisjZGVmaW5lIE9NQVBfR1BJT19SSVNJTkdERVRFQ1QJCTB4MDE0OAorI2RlZmluZSBPTUFQX0dQSU9fRkFMTElOR0RFVEVDVAkJMHgwMTRjCisjZGVmaW5lIE9NQVBfR1BJT19ERUJPVU5DRV9FTgkJMHgwMTUwCisjZGVmaW5lIE9NQVBfR1BJT19ERUJPVU5DRV9WQUwJCTB4MDE1NAorI2RlZmluZSBPTUFQX0dQSU9fQ0xFQVJJUlFFTkFCTEUxCTB4MDE2MAorI2RlZmluZSBPTUFQX0dQSU9fU0VUSVJRRU5BQkxFMQkJMHgwMTY0CisjZGVmaW5lIE9NQVBfR1BJT19DTEVBUldLVUVOQQkJMHgwMTgwCisjZGVmaW5lIE9NQVBfR1BJT19TRVRXS1VFTkEJCTB4MDE4NAorI2RlZmluZSBPTUFQX0dQSU9fQ0xFQVJEQVRBT1VUCQkweDAxOTAKKyNkZWZpbmUgT01BUF9HUElPX1NFVERBVEFPVVQJCTB4MDE5NAorCisjZW5kaWYgLyogX0NQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2dwaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNGRmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2dwaW8uaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICogVG9tIFJpeCA8VG9tLlJpeEB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFRoaXMgd29yayBpcyBkZXJpdmVkIGZyb20gdGhlIGxpbnV4IDIuNi4yNyBrZXJuZWwgc291cmNlCisgKiBUbyBmZXRjaCwgdXNlIHRoZSBrZXJuZWwgcmVwb3NpdG9yeQorICogZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LTIuNi5naXQKKyAqIFVzZSB0aGUgdjIuNi4yNyB0YWcuCisgKgorICogQmVsb3cgaXMgdGhlIG9yaWdpbmFsJ3MgaGVhZGVyIGluY2x1ZGluZyBpdHMgY29weXJpZ2h0CisgKgorICogIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKyAqCisgKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgT01BUCBHUElPCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gYnkgSnVoYSBZcmrDtmzDpCA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX0dQSU9fT01BUDVfSAorI2RlZmluZSBfR1BJT19PTUFQNV9ICisKKyNpbmNsdWRlIDxhc20vb21hcF9ncGlvLmg+CisKKyNkZWZpbmUgT01BUDU0WFhfR1BJTzFfQkFTRQkJMHg0QWUxMDAwMAorI2RlZmluZSBPTUFQNTRYWF9HUElPMl9CQVNFCQkweDQ4MDU1MDAwCisjZGVmaW5lIE9NQVA1NFhYX0dQSU8zX0JBU0UJCTB4NDgwNTcwMDAKKyNkZWZpbmUgT01BUDU0WFhfR1BJTzRfQkFTRQkJMHg0ODA1OTAwMAorI2RlZmluZSBPTUFQNTRYWF9HUElPNV9CQVNFCQkweDQ4MDVCMDAwCisjZGVmaW5lIE9NQVA1NFhYX0dQSU82X0JBU0UJCTB4NDgwNUQwMDAKKworI2VuZGlmIC8qIF9HUElPX09NQVA1X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvaTJjLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YmUwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L2kyYy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQtMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9PTUFQNV9JMkNfSF8KKyNkZWZpbmUgX09NQVA1X0kyQ19IXworCisjZGVmaW5lIEkyQ19CVVNfTUFYCTMKKyNkZWZpbmUgSTJDX0RFRkFVTFRfQkFTRQlJMkNfQkFTRTEKKworc3RydWN0IGkyYyB7CisJdW5zaWduZWQgc2hvcnQgcmV2bmJfbG87CS8qIDB4MDAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxOworCXVuc2lnbmVkIHNob3J0IHJldm5iX2hpOwkvKiAweDA0ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMlsxM107CisJdW5zaWduZWQgc2hvcnQgc3lzYzsJCS8qIDB4MjAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMzOworCXVuc2lnbmVkIHNob3J0IGlycXN0YXR1c19yYXc7CS8qIDB4MjQgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXM0OworCXVuc2lnbmVkIHNob3J0IHN0YXQ7CQkvKiAweDI4ICovCisJdW5zaWduZWQgc2hvcnQgcmVzNTsKKwl1bnNpZ25lZCBzaG9ydCBpZTsJCS8qIDB4MkMgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXM2OworCXVuc2lnbmVkIHNob3J0IGlycWVuYWJsZV9jbHI7CS8qIDB4MzAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXM3OworCXVuc2lnbmVkIHNob3J0IGl2OwkJLyogMHgzNCAqLworCXVuc2lnbmVkIHNob3J0IHJlczhbNDVdOworCXVuc2lnbmVkIHNob3J0IHN5c3M7CQkvKiAweDkwICovCisJdW5zaWduZWQgc2hvcnQgcmVzOTsKKwl1bnNpZ25lZCBzaG9ydCBidWY7CQkvKiAweDk0ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTA7CisJdW5zaWduZWQgc2hvcnQgY250OwkJLyogMHg5OCAqLworCXVuc2lnbmVkIHNob3J0IHJlczExOworCXVuc2lnbmVkIHNob3J0IGRhdGE7CQkvKiAweDlDICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTM7CisJdW5zaWduZWQgc2hvcnQgcmVzMTQ7CQkvKiAweEEwICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTU7CisJdW5zaWduZWQgc2hvcnQgY29uOwkJLyogMHhBNCAqLworCXVuc2lnbmVkIHNob3J0IHJlczE2OworCXVuc2lnbmVkIHNob3J0IG9hOwkJLyogMHhBOCAqLworCXVuc2lnbmVkIHNob3J0IHJlczE3OworCXVuc2lnbmVkIHNob3J0IHNhOwkJLyogMHhBQyAqLworCXVuc2lnbmVkIHNob3J0IHJlczE4OworCXVuc2lnbmVkIHNob3J0IHBzYzsJCS8qIDB4QjAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxOTsKKwl1bnNpZ25lZCBzaG9ydCBzY2xsOwkJLyogMHhCNCAqLworCXVuc2lnbmVkIHNob3J0IHJlczIwOworCXVuc2lnbmVkIHNob3J0IHNjbGg7CQkvKiAweEI4ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMjE7CisJdW5zaWduZWQgc2hvcnQgc3lzdGVzdDsJCS8qIDB4QkMgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMyMjsKKwl1bnNpZ25lZCBzaG9ydCBidWZzdGF0OwkJLyogMHhDMCAqLworCXVuc2lnbmVkIHNob3J0IHJlczIzOworfTsKKworI2VuZGlmIC8qIF9PTUFQNV9JMkNfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvbW1jX2hvc3RfZGVmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L21tY19ob3N0X2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDM5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L21tY19ob3N0X2RlZi5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBTeWVkIE1vaGFtbWVkIEtoYXNpbSA8a2hhc2ltQHRpLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgTU1DX0hPU1RfREVGX0gKKyNkZWZpbmUgTU1DX0hPU1RfREVGX0gKKworLyoKKyAqIE9NQVAgSFNNTUMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworCisjZGVmaW5lIE9NQVBfSFNNTUMxX0JBU0UJMHg0ODA5QzEwMAorI2RlZmluZSBPTUFQX0hTTU1DMl9CQVNFCTB4NDgwQjQxMDAKKyNkZWZpbmUgT01BUF9IU01NQzNfQkFTRQkweDQ4MEFEMTAwCisKK3N0cnVjdCBoc21tYyB7CisJdW5zaWduZWQgY2hhciByZXMxWzB4MTBdOworCXVuc2lnbmVkIGludCBzeXNjb25maWc7CQkvKiAweDEwICovCisJdW5zaWduZWQgaW50IHN5c3N0YXR1czsJCS8qIDB4MTQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczJbMHgxNF07CisJdW5zaWduZWQgaW50IGNvbjsJCS8qIDB4MkMgKi8KKwl1bnNpZ25lZCBjaGFyIHJlczNbMHhENF07CisJdW5zaWduZWQgaW50IGJsazsJCS8qIDB4MTA0ICovCisJdW5zaWduZWQgaW50IGFyZzsJCS8qIDB4MTA4ICovCisJdW5zaWduZWQgaW50IGNtZDsJCS8qIDB4MTBDICovCisJdW5zaWduZWQgaW50IHJzcDEwOwkJLyogMHgxMTAgKi8KKwl1bnNpZ25lZCBpbnQgcnNwMzI7CQkvKiAweDExNCAqLworCXVuc2lnbmVkIGludCByc3A1NDsJCS8qIDB4MTE4ICovCisJdW5zaWduZWQgaW50IHJzcDc2OwkJLyogMHgxMUMgKi8KKwl1bnNpZ25lZCBpbnQgZGF0YTsJCS8qIDB4MTIwICovCisJdW5zaWduZWQgaW50IHBzdGF0ZTsJCS8qIDB4MTI0ICovCisJdW5zaWduZWQgaW50IGhjdGw7CQkvKiAweDEyOCAqLworCXVuc2lnbmVkIGludCBzeXNjdGw7CQkvKiAweDEyQyAqLworCXVuc2lnbmVkIGludCBzdGF0OwkJLyogMHgxMzAgKi8KKwl1bnNpZ25lZCBpbnQgaWU7CQkvKiAweDEzNCAqLworCXVuc2lnbmVkIGNoYXIgcmVzNFsweDhdOworCXVuc2lnbmVkIGludCBjYXBhOwkJLyogMHgxNDAgKi8KK307CisKKy8qCisgKiBPTUFQIEhTIE1NQyBCaXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBNTUNfU09GVFJFU0VUCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSRVNFVERPTkUJCQkoMHgxIDw8IDApCisjZGVmaW5lIE5PT1BFTkRSQUlOCQkJKDB4MCA8PCAwKQorI2RlZmluZSBPUEVORFJBSU4JCQkoMHgxIDw8IDApCisjZGVmaW5lIE9ECQkJCSgweDEgPDwgMCkKKyNkZWZpbmUgSU5JVF9OT0lOSVQJCQkoMHgwIDw8IDEpCisjZGVmaW5lIElOSVRfSU5JVFNUUkVBTQkJCSgweDEgPDwgMSkKKyNkZWZpbmUgSFJfTk9IT1NUUkVTUAkJCSgweDAgPDwgMikKKyNkZWZpbmUgU1RSX0JMT0NLCQkJKDB4MCA8PCAzKQorI2RlZmluZSBNT0RFX0ZVTkMJCQkoMHgwIDw8IDQpCisjZGVmaW5lIERXOF8xXzRCSVRNT0RFCQkJKDB4MCA8PCA1KQorI2RlZmluZSBNSVRfQ1RPCQkJCSgweDAgPDwgNikKKyNkZWZpbmUgQ0RQX0FDVElWRUhJR0gJCQkoMHgwIDw8IDcpCisjZGVmaW5lIFdQUF9BQ1RJVkVISUdICQkJKDB4MCA8PCA4KQorI2RlZmluZSBSRVNFUlZFRF9NQVNLCQkJKDB4MyA8PCA5KQorI2RlZmluZSBDVFBMX01NQ19TRAkJCSgweDAgPDwgMTEpCisjZGVmaW5lIEJMRU5fNTEyQllURVNMRU4JCSgweDIwMCA8PCAwKQorI2RlZmluZSBOQkxLX1NUUENOVAkJCSgweDAgPDwgMTYpCisjZGVmaW5lIERFX0RJU0FCTEUJCQkoMHgwIDw8IDApCisjZGVmaW5lIEJDRV9ESVNBQkxFCQkJKDB4MCA8PCAxKQorI2RlZmluZSBCQ0VfRU5BQkxFCQkJKDB4MSA8PCAxKQorI2RlZmluZSBBQ0VOX0RJU0FCTEUJCQkoMHgwIDw8IDIpCisjZGVmaW5lIERESVJfT0ZGU0VUCQkJKDQpCisjZGVmaW5lIERESVJfTUFTSwkJCSgweDEgPDwgNCkKKyNkZWZpbmUgRERJUl9XUklURQkJCSgweDAgPDwgNCkKKyNkZWZpbmUgRERJUl9SRUFECQkJKDB4MSA8PCA0KQorI2RlZmluZSBNU0JTX1NHTEVCTEsJCQkoMHgwIDw8IDUpCisjZGVmaW5lIE1TQlNfTVVMVElCTEsJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJTUF9UWVBFX09GRlNFVAkJCSgxNikKKyNkZWZpbmUgUlNQX1RZUEVfTUFTSwkJCSgweDMgPDwgMTYpCisjZGVmaW5lIFJTUF9UWVBFX05PUlNQCQkJKDB4MCA8PCAxNikKKyNkZWZpbmUgUlNQX1RZUEVfTEdIVDEzNgkJKDB4MSA8PCAxNikKKyNkZWZpbmUgUlNQX1RZUEVfTEdIVDQ4CQkJKDB4MiA8PCAxNikKKyNkZWZpbmUgUlNQX1RZUEVfTEdIVDQ4QgkJKDB4MyA8PCAxNikKKyNkZWZpbmUgQ0NDRV9OT0NIRUNLCQkJKDB4MCA8PCAxOSkKKyNkZWZpbmUgQ0NDRV9DSEVDSwkJCSgweDEgPDwgMTkpCisjZGVmaW5lIENJQ0VfTk9DSEVDSwkJCSgweDAgPDwgMjApCisjZGVmaW5lIENJQ0VfQ0hFQ0sJCQkoMHgxIDw8IDIwKQorI2RlZmluZSBEUF9PRkZTRVQJCQkoMjEpCisjZGVmaW5lIERQX01BU0sJCQkJKDB4MSA8PCAyMSkKKyNkZWZpbmUgRFBfTk9fREFUQQkJCSgweDAgPDwgMjEpCisjZGVmaW5lIERQX0RBVEEJCQkJKDB4MSA8PCAyMSkKKyNkZWZpbmUgQ01EX1RZUEVfTk9STUFMCQkJKDB4MCA8PCAyMikKKyNkZWZpbmUgSU5ERVhfT0ZGU0VUCQkJKDI0KQorI2RlZmluZSBJTkRFWF9NQVNLCQkJKDB4M2YgPDwgMjQpCisjZGVmaW5lIElOREVYKGkpCQkJKGkgPDwgMjQpCisjZGVmaW5lIERBVElfTUFTSwkJCSgweDEgPDwgMSkKKyNkZWZpbmUgREFUSV9DTURESVMJCQkoMHgxIDw8IDEpCisjZGVmaW5lIERUV18xX0JJVE1PREUJCQkoMHgwIDw8IDEpCisjZGVmaW5lIERUV180X0JJVE1PREUJCQkoMHgxIDw8IDEpCisjZGVmaW5lIERUV184X0JJVE1PREUgICAgICAgICAgICAgICAgICAgKDB4MSA8PCA1KSAvKiBDT05bRFc4XSovCisjZGVmaW5lIFNEQlBfUFdST0ZGCQkJKDB4MCA8PCA4KQorI2RlZmluZSBTREJQX1BXUk9OCQkJKDB4MSA8PCA4KQorI2RlZmluZSBTRFZTXzFWOAkJCSgweDUgPDwgOSkKKyNkZWZpbmUgU0RWU18zVjAJCQkoMHg2IDw8IDkpCisjZGVmaW5lIElDRV9NQVNLCQkJKDB4MSA8PCAwKQorI2RlZmluZSBJQ0VfU1RPUAkJCSgweDAgPDwgMCkKKyNkZWZpbmUgSUNTX01BU0sJCQkoMHgxIDw8IDEpCisjZGVmaW5lIElDU19OT1RSRUFEWQkJCSgweDAgPDwgMSkKKyNkZWZpbmUgSUNFX09TQ0lMTEFURQkJCSgweDEgPDwgMCkKKyNkZWZpbmUgQ0VOX01BU0sJCQkoMHgxIDw8IDIpCisjZGVmaW5lIENFTl9ESVNBQkxFCQkJKDB4MCA8PCAyKQorI2RlZmluZSBDRU5fRU5BQkxFCQkJKDB4MSA8PCAyKQorI2RlZmluZSBDTEtEX09GRlNFVAkJCSg2KQorI2RlZmluZSBDTEtEX01BU0sJCQkoMHgzRkYgPDwgNikKKyNkZWZpbmUgRFRPX01BU0sJCQkoMHhGIDw8IDE2KQorI2RlZmluZSBEVE9fMTVUSERUTwkJCSgweEUgPDwgMTYpCisjZGVmaW5lIFNPRlRSRVNFVEFMTAkJCSgweDEgPDwgMjQpCisjZGVmaW5lIENDX01BU0sJCQkJKDB4MSA8PCAwKQorI2RlZmluZSBUQ19NQVNLCQkJCSgweDEgPDwgMSkKKyNkZWZpbmUgQldSX01BU0sJCQkoMHgxIDw8IDQpCisjZGVmaW5lIEJSUl9NQVNLCQkJKDB4MSA8PCA1KQorI2RlZmluZSBFUlJJX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBJRV9DQwkJCQkoMHgwMSA8PCAwKQorI2RlZmluZSBJRV9UQwkJCQkoMHgwMSA8PCAxKQorI2RlZmluZSBJRV9CV1IJCQkJKDB4MDEgPDwgNCkKKyNkZWZpbmUgSUVfQlJSCQkJCSgweDAxIDw8IDUpCisjZGVmaW5lIElFX0NUTwkJCQkoMHgwMSA8PCAxNikKKyNkZWZpbmUgSUVfQ0NSQwkJCQkoMHgwMSA8PCAxNykKKyNkZWZpbmUgSUVfQ0VCCQkJCSgweDAxIDw8IDE4KQorI2RlZmluZSBJRV9DSUUJCQkJKDB4MDEgPDwgMTkpCisjZGVmaW5lIElFX0RUTwkJCQkoMHgwMSA8PCAyMCkKKyNkZWZpbmUgSUVfRENSQwkJCQkoMHgwMSA8PCAyMSkKKyNkZWZpbmUgSUVfREVCCQkJCSgweDAxIDw8IDIyKQorI2RlZmluZSBJRV9DRVJSCQkJCSgweDAxIDw8IDI4KQorI2RlZmluZSBJRV9CQURBCQkJCSgweDAxIDw8IDI5KQorCisjZGVmaW5lIFZTMzBfM1YwU1VQCQkJKDEgPDwgMjUpCisjZGVmaW5lIFZTMThfMVY4U1VQCQkJKDEgPDwgMjYpCisKKy8qIERyaXZlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNTUNTRF9TRUNUT1JfU0laRQkJNTEyCisjZGVmaW5lIE1NQ19DQVJECQkJMAorI2RlZmluZSBTRF9DQVJECQkJCTEKKyNkZWZpbmUgQllURV9NT0RFCQkJMAorI2RlZmluZSBTRUNUT1JfTU9ERQkJCTEKKyNkZWZpbmUgQ0xLX0lOSVRTRVEJCQkwCisjZGVmaW5lIENMS180MDBLSFoJCQkxCisjZGVmaW5lIENMS19NSVNDCQkJMgorCisjZGVmaW5lIFJTUF9UWVBFX05PTkUJKFJTUF9UWVBFX05PUlNQICAgfCBDQ0NFX05PQ0hFQ0sgfCBDSUNFX05PQ0hFQ0spCisjZGVmaW5lIE1NQ19DTUQwCShJTkRFWCgwKSAgfCBSU1BfVFlQRV9OT05FIHwgRFBfTk9fREFUQSB8IERESVJfV1JJVEUpCisKKy8qIENsb2NrIENvbmZpZ3VyYXRpb25zIGFuZCBNYWNyb3MgKi8KKyNkZWZpbmUgTU1DX0NMT0NLX1JFRkVSRU5DRQk5NiAvKiBNSHogKi8KKworI2RlZmluZSBtbWNfcmVnX291dChhZGRyLCBtYXNrLCB2YWwpXAorCXdyaXRlbCgocmVhZGwoYWRkcikgJiAofihtYXNrKSkpIHwgKCh2YWwpICYgKG1hc2spKSwgKGFkZHIpKQorCitpbnQgb21hcF9tbWNfaW5pdChpbnQgZGV2X2luZGV4KTsKKworI2VuZGlmIC8qIE1NQ19IT1NUX0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L211eF9vbWFwNS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9tdXhfb21hcDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGMyMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9tdXhfb21hcDUuaApAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA5CisgKiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIFJpY2hhcmQgV29vZHJ1ZmYJCTxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBBbmVlc2ggVgkJCTxhbmVlc2hAdGkuY29tPgorICogQmFsYWppIEtyaXNobmFtb29ydGh5CTxiYWxhaml0a0B0aS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfTVVYX09NQVA1X0hfCisjZGVmaW5lIF9NVVhfT01BUDVfSF8KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgeworCisJdTE2IG9mZnNldDsKKworCXUxNiB2YWw7CisKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworI2lmZGVmIENPTkZJR19PRkZfUEFEQ09ORgorI2RlZmluZSBPRkZfUEQgICAgICAgICAgKDEgPDwgMTIpCisjZGVmaW5lIE9GRl9QVSAgICAgICAgICAoMyA8PCAxMikKKyNkZWZpbmUgT0ZGX09VVF9QVEQgICAgICgwIDw8IDEwKQorI2RlZmluZSBPRkZfT1VUX1BUVSAgICAgKDIgPDwgMTApCisjZGVmaW5lIE9GRl9JTiAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgT0ZGX09VVCAgICAgICAgICgwIDw8IDEwKQorI2RlZmluZSBPRkZfRU4gICAgICAgICAgKDEgPDwgOSkKKyNlbHNlCisjZGVmaW5lIE9GRl9QRCAgICAgICAgICAoMCA8PCAxMikKKyNkZWZpbmUgT0ZGX1BVICAgICAgICAgICgwIDw8IDEyKQorI2RlZmluZSBPRkZfT1VUX1BURCAgICAgKDAgPDwgMTApCisjZGVmaW5lIE9GRl9PVVRfUFRVICAgICAoMCA8PCAxMCkKKyNkZWZpbmUgT0ZGX0lOICAgICAgICAgICgwIDw8IDEwKQorI2RlZmluZSBPRkZfT1VUICAgICAgICAgKDAgPDwgMTApCisjZGVmaW5lIE9GRl9FTiAgICAgICAgICAoMCA8PCA5KQorI2VuZGlmCisKKyNkZWZpbmUgSUVOICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElESVMgICAgICAgICAgICAoMCA8PCA4KQorI2RlZmluZSBQVFUgICAgICAgICAgICAgKDMgPDwgMykKKyNkZWZpbmUgUFREICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIEVOICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBESVMgICAgICAgICAgICAgKDAgPDwgMykKKworI2RlZmluZSBNMCAgICAgICAgICAgICAgMAorI2RlZmluZSBNMSAgICAgICAgICAgICAgMQorI2RlZmluZSBNMiAgICAgICAgICAgICAgMgorI2RlZmluZSBNMyAgICAgICAgICAgICAgMworI2RlZmluZSBNNCAgICAgICAgICAgICAgNAorI2RlZmluZSBNNSAgICAgICAgICAgICAgNQorI2RlZmluZSBNNiAgICAgICAgICAgICAgNgorI2RlZmluZSBNNyAgICAgICAgICAgICAgNworCisjZGVmaW5lIFNBRkVfTU9ERQlNNworCisjaWZkZWYgQ09ORklHX09GRl9QQURDT05GCisjZGVmaW5lIE9GRl9JTl9QRCAgICAgICAoT0ZGX1BEIHwgT0ZGX0lOIHwgT0ZGX0VOKQorI2RlZmluZSBPRkZfSU5fUFUgICAgICAgKE9GRl9QVSB8IE9GRl9JTiB8IE9GRl9FTikKKyNkZWZpbmUgT0ZGX09VVF9QRCAgICAgIChPRkZfT1VUX1BURCB8IE9GRl9PVVQgfCBPRkZfRU4pCisjZGVmaW5lIE9GRl9PVVRfUFUgICAgICAoT0ZGX09VVF9QVFUgfCBPRkZfT1VUIHwgT0ZGX0VOKQorI2Vsc2UKKyNkZWZpbmUgT0ZGX0lOX1BEICAgICAgIDAKKyNkZWZpbmUgT0ZGX0lOX1BVICAgICAgIDAKKyNkZWZpbmUgT0ZGX09VVF9QRCAgICAgIDAKKyNkZWZpbmUgT0ZGX09VVF9QVSAgICAgIDAKKyNlbmRpZgorCisjZGVmaW5lIENPUkVfUkVWSVNJT04JCTB4MDAwMAorI2RlZmluZSBDT1JFX0hXSU5GTwkJMHgwMDA0CisjZGVmaW5lIENPUkVfU1lTQ09ORklHCQkweDAwMTAKKyNkZWZpbmUgR1BNQ19BRDAJCTB4MDA0MAorI2RlZmluZSBHUE1DX0FEMQkJMHgwMDQyCisjZGVmaW5lIEdQTUNfQUQyCQkweDAwNDQKKyNkZWZpbmUgR1BNQ19BRDMJCTB4MDA0NgorI2RlZmluZSBHUE1DX0FENAkJMHgwMDQ4CisjZGVmaW5lIEdQTUNfQUQ1CQkweDAwNEEKKyNkZWZpbmUgR1BNQ19BRDYJCTB4MDA0QworI2RlZmluZSBHUE1DX0FENwkJMHgwMDRFCisjZGVmaW5lIEdQTUNfQUQ4CQkweDAwNTAKKyNkZWZpbmUgR1BNQ19BRDkJCTB4MDA1MgorI2RlZmluZSBHUE1DX0FEMTAJCTB4MDA1NAorI2RlZmluZSBHUE1DX0FEMTEJCTB4MDA1NgorI2RlZmluZSBHUE1DX0FEMTIJCTB4MDA1OAorI2RlZmluZSBHUE1DX0FEMTMJCTB4MDA1QQorI2RlZmluZSBHUE1DX0FEMTQJCTB4MDA1QworI2RlZmluZSBHUE1DX0FEMTUJCTB4MDA1RQorI2RlZmluZSBHUE1DX0ExNgkJMHgwMDYwCisjZGVmaW5lIEdQTUNfQTE3CQkweDAwNjIKKyNkZWZpbmUgR1BNQ19BMTgJCTB4MDA2NAorI2RlZmluZSBHUE1DX0ExOQkJMHgwMDY2CisjZGVmaW5lIEdQTUNfQTIwCQkweDAwNjgKKyNkZWZpbmUgR1BNQ19BMjEJCTB4MDA2QQorI2RlZmluZSBHUE1DX0EyMgkJMHgwMDZDCisjZGVmaW5lIEdQTUNfQTIzCQkweDAwNkUKKyNkZWZpbmUgR1BNQ19BMjQJCTB4MDA3MAorI2RlZmluZSBHUE1DX0EyNQkJMHgwMDcyCisjZGVmaW5lIEdQTUNfTkNTMAkJMHgwMDc0CisjZGVmaW5lIEdQTUNfTkNTMQkJMHgwMDc2CisjZGVmaW5lIEdQTUNfTkNTMgkJMHgwMDc4CisjZGVmaW5lIEdQTUNfTkNTMwkJMHgwMDdBCisjZGVmaW5lIEdQTUNfTldQCQkweDAwN0MKKyNkZWZpbmUgR1BNQ19DTEsJCTB4MDA3RQorI2RlZmluZSBHUE1DX05BRFZfQUxFCQkweDAwODAKKyNkZWZpbmUgR1BNQ19OT0UJCTB4MDA4MgorI2RlZmluZSBHUE1DX05XRQkJMHgwMDg0CisjZGVmaW5lIEdQTUNfTkJFMF9DTEUJCTB4MDA4NgorI2RlZmluZSBHUE1DX05CRTEJCTB4MDA4OAorI2RlZmluZSBHUE1DX1dBSVQwCQkweDAwOEEKKyNkZWZpbmUgR1BNQ19XQUlUMQkJMHgwMDhDCisjZGVmaW5lIEMyQ19EQVRBMTEJCTB4MDA4RQorI2RlZmluZSBDMkNfREFUQTEyCQkweDAwOTAKKyNkZWZpbmUgQzJDX0RBVEExMwkJMHgwMDkyCisjZGVmaW5lIEMyQ19EQVRBMTQJCTB4MDA5NAorI2RlZmluZSBDMkNfREFUQTE1CQkweDAwOTYKKyNkZWZpbmUgSERNSV9IUEQJCTB4MDA5OAorI2RlZmluZSBIRE1JX0NFQwkJMHgwMDlBCisjZGVmaW5lIEhETUlfRERDX1NDTAkJMHgwMDlDCisjZGVmaW5lIEhETUlfRERDX1NEQQkJMHgwMDlFCisjZGVmaW5lIENTSTIxX0RYMAkJMHgwMEEwCisjZGVmaW5lIENTSTIxX0RZMAkJMHgwMEEyCisjZGVmaW5lIENTSTIxX0RYMQkJMHgwMEE0CisjZGVmaW5lIENTSTIxX0RZMQkJMHgwMEE2CisjZGVmaW5lIENTSTIxX0RYMgkJMHgwMEE4CisjZGVmaW5lIENTSTIxX0RZMgkJMHgwMEFBCisjZGVmaW5lIENTSTIxX0RYMwkJMHgwMEFDCisjZGVmaW5lIENTSTIxX0RZMwkJMHgwMEFFCisjZGVmaW5lIENTSTIxX0RYNAkJMHgwMEIwCisjZGVmaW5lIENTSTIxX0RZNAkJMHgwMEIyCisjZGVmaW5lIENTSTIyX0RYMAkJMHgwMEI0CisjZGVmaW5lIENTSTIyX0RZMAkJMHgwMEI2CisjZGVmaW5lIENTSTIyX0RYMQkJMHgwMEI4CisjZGVmaW5lIENTSTIyX0RZMQkJMHgwMEJBCisjZGVmaW5lIENBTV9TSFVUVEVSCQkweDAwQkMKKyNkZWZpbmUgQ0FNX1NUUk9CRQkJMHgwMEJFCisjZGVmaW5lIENBTV9HTE9CQUxSRVNFVAkJMHgwMEMwCisjZGVmaW5lIFVTQkIxX1VMUElUTExfQ0xLCTB4MDBDMgorI2RlZmluZSBVU0JCMV9VTFBJVExMX1NUUAkweDAwQzQKKyNkZWZpbmUgVVNCQjFfVUxQSVRMTF9ESVIJMHgwMEM2CisjZGVmaW5lIFVTQkIxX1VMUElUTExfTlhUCTB4MDBDOAorI2RlZmluZSBVU0JCMV9VTFBJVExMX0RBVDAJMHgwMENBCisjZGVmaW5lIFVTQkIxX1VMUElUTExfREFUMQkweDAwQ0MKKyNkZWZpbmUgVVNCQjFfVUxQSVRMTF9EQVQyCTB4MDBDRQorI2RlZmluZSBVU0JCMV9VTFBJVExMX0RBVDMJMHgwMEQwCisjZGVmaW5lIFVTQkIxX1VMUElUTExfREFUNAkweDAwRDIKKyNkZWZpbmUgVVNCQjFfVUxQSVRMTF9EQVQ1CTB4MDBENAorI2RlZmluZSBVU0JCMV9VTFBJVExMX0RBVDYJMHgwMEQ2CisjZGVmaW5lIFVTQkIxX1VMUElUTExfREFUNwkweDAwRDgKKyNkZWZpbmUgVVNCQjFfSFNJQ19EQVRBCQkweDAwREEKKyNkZWZpbmUgVVNCQjFfSFNJQ19TVFJPQkUJMHgwMERDCisjZGVmaW5lIFVTQkMxX0lDVVNCX0RQCQkweDAwREUKKyNkZWZpbmUgVVNCQzFfSUNVU0JfRE0JCTB4MDBFMAorI2RlZmluZSBTRE1NQzFfQ0xLCQkweDAwRTIKKyNkZWZpbmUgU0RNTUMxX0NNRAkJMHgwMEU0CisjZGVmaW5lIFNETU1DMV9EQVQwCQkweDAwRTYKKyNkZWZpbmUgU0RNTUMxX0RBVDEJCTB4MDBFOAorI2RlZmluZSBTRE1NQzFfREFUMgkJMHgwMEVBCisjZGVmaW5lIFNETU1DMV9EQVQzCQkweDAwRUMKKyNkZWZpbmUgU0RNTUMxX0RBVDQJCTB4MDBFRQorI2RlZmluZSBTRE1NQzFfREFUNQkJMHgwMEYwCisjZGVmaW5lIFNETU1DMV9EQVQ2CQkweDAwRjIKKyNkZWZpbmUgU0RNTUMxX0RBVDcJCTB4MDBGNAorI2RlZmluZSBBQkVfTUNCU1AyX0NMS1gJCTB4MDBGNgorI2RlZmluZSBBQkVfTUNCU1AyX0RSCQkweDAwRjgKKyNkZWZpbmUgQUJFX01DQlNQMl9EWAkJMHgwMEZBCisjZGVmaW5lIEFCRV9NQ0JTUDJfRlNYCQkweDAwRkMKKyNkZWZpbmUgQUJFX01DQlNQMV9DTEtYCQkweDAwRkUKKyNkZWZpbmUgQUJFX01DQlNQMV9EUgkJMHgwMTAwCisjZGVmaW5lIEFCRV9NQ0JTUDFfRFgJCTB4MDEwMgorI2RlZmluZSBBQkVfTUNCU1AxX0ZTWAkJMHgwMTA0CisjZGVmaW5lIEFCRV9QRE1fVUxfREFUQQkJMHgwMTA2CisjZGVmaW5lIEFCRV9QRE1fRExfREFUQQkJMHgwMTA4CisjZGVmaW5lIEFCRV9QRE1fRlJBTUUJCTB4MDEwQQorI2RlZmluZSBBQkVfUERNX0xCX0NMSwkJMHgwMTBDCisjZGVmaW5lIEFCRV9DTEtTCQkweDAxMEUKKyNkZWZpbmUgQUJFX0RNSUNfQ0xLMQkJMHgwMTEwCisjZGVmaW5lIEFCRV9ETUlDX0RJTjEJCTB4MDExMgorI2RlZmluZSBBQkVfRE1JQ19ESU4yCQkweDAxMTQKKyNkZWZpbmUgQUJFX0RNSUNfRElOMwkJMHgwMTE2CisjZGVmaW5lIFVBUlQyX0NUUwkJMHgwMTE4CisjZGVmaW5lIFVBUlQyX1JUUwkJMHgwMTFBCisjZGVmaW5lIFVBUlQyX1JYCQkweDAxMUMKKyNkZWZpbmUgVUFSVDJfVFgJCTB4MDExRQorI2RlZmluZSBIRFFfU0lPCQkJMHgwMTIwCisjZGVmaW5lIEkyQzFfU0NMCQkweDAxMjIKKyNkZWZpbmUgSTJDMV9TREEJCTB4MDEyNAorI2RlZmluZSBJMkMyX1NDTAkJMHgwMTI2CisjZGVmaW5lIEkyQzJfU0RBCQkweDAxMjgKKyNkZWZpbmUgSTJDM19TQ0wJCTB4MDEyQQorI2RlZmluZSBJMkMzX1NEQQkJMHgwMTJDCisjZGVmaW5lIEkyQzRfU0NMCQkweDAxMkUKKyNkZWZpbmUgSTJDNF9TREEJCTB4MDEzMAorI2RlZmluZSBNQ1NQSTFfQ0xLCQkweDAxMzIKKyNkZWZpbmUgTUNTUEkxX1NPTUkJCTB4MDEzNAorI2RlZmluZSBNQ1NQSTFfU0lNTwkJMHgwMTM2CisjZGVmaW5lIE1DU1BJMV9DUzAJCTB4MDEzOAorI2RlZmluZSBNQ1NQSTFfQ1MxCQkweDAxM0EKKyNkZWZpbmUgTUNTUEkxX0NTMgkJMHgwMTNDCisjZGVmaW5lIE1DU1BJMV9DUzMJCTB4MDEzRQorI2RlZmluZSBVQVJUM19DVFNfUkNUWAkJMHgwMTQwCisjZGVmaW5lIFVBUlQzX1JUU19TRAkJMHgwMTQyCisjZGVmaW5lIFVBUlQzX1JYX0lSUlgJCTB4MDE0NAorI2RlZmluZSBVQVJUM19UWF9JUlRYCQkweDAxNDYKKyNkZWZpbmUgU0RNTUM1X0NMSwkJMHgwMTQ4CisjZGVmaW5lIFNETU1DNV9DTUQJCTB4MDE0QQorI2RlZmluZSBTRE1NQzVfREFUMAkJMHgwMTRDCisjZGVmaW5lIFNETU1DNV9EQVQxCQkweDAxNEUKKyNkZWZpbmUgU0RNTUM1X0RBVDIJCTB4MDE1MAorI2RlZmluZSBTRE1NQzVfREFUMwkJMHgwMTUyCisjZGVmaW5lIE1DU1BJNF9DTEsJCTB4MDE1NAorI2RlZmluZSBNQ1NQSTRfU0lNTwkJMHgwMTU2CisjZGVmaW5lIE1DU1BJNF9TT01JCQkweDAxNTgKKyNkZWZpbmUgTUNTUEk0X0NTMAkJMHgwMTVBCisjZGVmaW5lIFVBUlQ0X1JYCQkweDAxNUMKKyNkZWZpbmUgVUFSVDRfVFgJCTB4MDE1RQorI2RlZmluZSBVU0JCMl9VTFBJVExMX0NMSwkweDAxNjAKKyNkZWZpbmUgVVNCQjJfVUxQSVRMTF9TVFAJMHgwMTYyCisjZGVmaW5lIFVTQkIyX1VMUElUTExfRElSCTB4MDE2NAorI2RlZmluZSBVU0JCMl9VTFBJVExMX05YVAkweDAxNjYKKyNkZWZpbmUgVVNCQjJfVUxQSVRMTF9EQVQwCTB4MDE2OAorI2RlZmluZSBVU0JCMl9VTFBJVExMX0RBVDEJMHgwMTZBCisjZGVmaW5lIFVTQkIyX1VMUElUTExfREFUMgkweDAxNkMKKyNkZWZpbmUgVVNCQjJfVUxQSVRMTF9EQVQzCTB4MDE2RQorI2RlZmluZSBVU0JCMl9VTFBJVExMX0RBVDQJMHgwMTcwCisjZGVmaW5lIFVTQkIyX1VMUElUTExfREFUNQkweDAxNzIKKyNkZWZpbmUgVVNCQjJfVUxQSVRMTF9EQVQ2CTB4MDE3NAorI2RlZmluZSBVU0JCMl9VTFBJVExMX0RBVDcJMHgwMTc2CisjZGVmaW5lIFVTQkIyX0hTSUNfREFUQQkJMHgwMTc4CisjZGVmaW5lIFVTQkIyX0hTSUNfU1RST0JFCTB4MDE3QQorI2RlZmluZSBVTklQUk9fVFgwCQkweDAxN0MKKyNkZWZpbmUgVU5JUFJPX1RZMAkJMHgwMTdFCisjZGVmaW5lIFVOSVBST19UWDEJCTB4MDE4MAorI2RlZmluZSBVTklQUk9fVFkxCQkweDAxODIKKyNkZWZpbmUgVU5JUFJPX1RYMgkJMHgwMTg0CisjZGVmaW5lIFVOSVBST19UWTIJCTB4MDE4NgorI2RlZmluZSBVTklQUk9fUlgwCQkweDAxODgKKyNkZWZpbmUgVU5JUFJPX1JZMAkJMHgwMThBCisjZGVmaW5lIFVOSVBST19SWDEJCTB4MDE4QworI2RlZmluZSBVTklQUk9fUlkxCQkweDAxOEUKKyNkZWZpbmUgVU5JUFJPX1JYMgkJMHgwMTkwCisjZGVmaW5lIFVOSVBST19SWTIJCTB4MDE5MgorI2RlZmluZSBVU0JBMF9PVEdfQ0UJCTB4MDE5NAorI2RlZmluZSBVU0JBMF9PVEdfRFAJCTB4MDE5NgorI2RlZmluZSBVU0JBMF9PVEdfRE0JCTB4MDE5OAorI2RlZmluZSBGUkVGX0NMSzFfT1VUCQkweDAxOUEKKyNkZWZpbmUgRlJFRl9DTEsyX09VVAkJMHgwMTlDCisjZGVmaW5lIFNZU19OSVJRMQkJMHgwMTlFCisjZGVmaW5lIFNZU19OSVJRMgkJMHgwMUEwCisjZGVmaW5lIFNZU19CT09UMAkJMHgwMUEyCisjZGVmaW5lIFNZU19CT09UMQkJMHgwMUE0CisjZGVmaW5lIFNZU19CT09UMgkJMHgwMUE2CisjZGVmaW5lIFNZU19CT09UMwkJMHgwMUE4CisjZGVmaW5lIFNZU19CT09UNAkJMHgwMUFBCisjZGVmaW5lIFNZU19CT09UNQkJMHgwMUFDCisjZGVmaW5lIERQTV9FTVUwCQkweDAxQUUKKyNkZWZpbmUgRFBNX0VNVTEJCTB4MDFCMAorI2RlZmluZSBEUE1fRU1VMgkJMHgwMUIyCisjZGVmaW5lIERQTV9FTVUzCQkweDAxQjQKKyNkZWZpbmUgRFBNX0VNVTQJCTB4MDFCNgorI2RlZmluZSBEUE1fRU1VNQkJMHgwMUI4CisjZGVmaW5lIERQTV9FTVU2CQkweDAxQkEKKyNkZWZpbmUgRFBNX0VNVTcJCTB4MDFCQworI2RlZmluZSBEUE1fRU1VOAkJMHgwMUJFCisjZGVmaW5lIERQTV9FTVU5CQkweDAxQzAKKyNkZWZpbmUgRFBNX0VNVTEwCQkweDAxQzIKKyNkZWZpbmUgRFBNX0VNVTExCQkweDAxQzQKKyNkZWZpbmUgRFBNX0VNVTEyCQkweDAxQzYKKyNkZWZpbmUgRFBNX0VNVTEzCQkweDAxQzgKKyNkZWZpbmUgRFBNX0VNVTE0CQkweDAxQ0EKKyNkZWZpbmUgRFBNX0VNVTE1CQkweDAxQ0MKKyNkZWZpbmUgRFBNX0VNVTE2CQkweDAxQ0UKKyNkZWZpbmUgRFBNX0VNVTE3CQkweDAxRDAKKyNkZWZpbmUgRFBNX0VNVTE4CQkweDAxRDIKKyNkZWZpbmUgRFBNX0VNVTE5CQkweDAxRDQKKyNkZWZpbmUgV0FLRVVQRVZFTlRfMAkJMHgwMUQ4CisjZGVmaW5lIFdBS0VVUEVWRU5UXzEJCTB4MDFEQworI2RlZmluZSBXQUtFVVBFVkVOVF8yCQkweDAxRTAKKyNkZWZpbmUgV0FLRVVQRVZFTlRfMwkJMHgwMUU0CisjZGVmaW5lIFdBS0VVUEVWRU5UXzQJCTB4MDFFOAorI2RlZmluZSBXQUtFVVBFVkVOVF81CQkweDAxRUMKKyNkZWZpbmUgV0FLRVVQRVZFTlRfNgkJMHgwMUYwCisKKyNkZWZpbmUgV0tVUF9SRVZJU0lPTgkJMHgwMDAwCisjZGVmaW5lIFdLVVBfSFdJTkZPCQkweDAwMDQKKyNkZWZpbmUgV0tVUF9TWVNDT05GSUcJCTB4MDAxMAorI2RlZmluZSBQQUQwX1NJTV9JTwkJMHgwMDQwCisjZGVmaW5lIFBBRDFfU0lNX0NMSwkJMHgwMDQyCisjZGVmaW5lIFBBRDBfU0lNX1JFU0VUCQkweDAwNDQKKyNkZWZpbmUgUEFEMV9TSU1fQ0QJCTB4MDA0NgorI2RlZmluZSBQQUQwX1NJTV9QV1JDVFJMCQkweDAwNDgKKyNkZWZpbmUgUEFEMV9TUl9TQ0wJCTB4MDA0QQorI2RlZmluZSBQQUQwX1NSX1NEQQkJMHgwMDRDCisjZGVmaW5lIFBBRDFfRlJFRl9YVEFMX0lOCQkweDAwNEUKKyNkZWZpbmUgUEFEMF9GUkVGX1NMSUNFUl9JTgkweDAwNTAKKyNkZWZpbmUgUEFEMV9GUkVGX0NMS19JT1JFUQkweDAwNTIKKyNkZWZpbmUgUEFEMF9GUkVGX0NMSzBfT1VUCQkweDAwNTQKKyNkZWZpbmUgUEFEMV9GUkVGX0NMSzNfUkVRCQkweDAwNTYKKyNkZWZpbmUgUEFEMF9GUkVGX0NMSzNfT1VUCQkweDAwNTgKKyNkZWZpbmUgUEFEMV9GUkVGX0NMSzRfUkVRCQkweDAwNUEKKyNkZWZpbmUgUEFEMF9GUkVGX0NMSzRfT1VUCQkweDAwNUMKKyNkZWZpbmUgUEFEMV9TWVNfMzJLCQkweDAwNUUKKyNkZWZpbmUgUEFEMF9TWVNfTlJFU1BXUk9OCQkweDAwNjAKKyNkZWZpbmUgUEFEMV9TWVNfTlJFU1dBUk0JCTB4MDA2MgorI2RlZmluZSBQQUQwX1NZU19QV1JfUkVRCQkweDAwNjQKKyNkZWZpbmUgUEFEMV9TWVNfUFdST05fUkVTRVQJMHgwMDY2CisjZGVmaW5lIFBBRDBfU1lTX0JPT1Q2CQkweDAwNjgKKyNkZWZpbmUgUEFEMV9TWVNfQk9PVDcJCTB4MDA2QQorI2RlZmluZSBQQUQwX0pUQUdfTlRSU1QJCTB4MDA2QworI2RlZmluZSBQQUQxX0pUQUdfVENLCQkweDAwNkQKKyNkZWZpbmUgUEFEMF9KVEFHX1JUQ0sJCTB4MDA3MAorI2RlZmluZSBQQUQxX0pUQUdfVE1TX1RNU0MJCTB4MDA3MgorI2RlZmluZSBQQUQwX0pUQUdfVERJCQkweDAwNzQKKyNkZWZpbmUgUEFEMV9KVEFHX1RETwkJMHgwMDc2CisjZGVmaW5lIFBBRENPTkZfV0FLRVVQRVZFTlRfMAkweDAwN0MKKyNkZWZpbmUgQ09OVFJPTF9TTUFSVDFOT1BNSU9fUEFEQ09ORl8wCQkweDA1QTAKKyNkZWZpbmUgQ09OVFJPTF9TTUFSVDFOT1BNSU9fUEFEQ09ORl8xCQkweDA1QTQKKyNkZWZpbmUgUEFEQ09ORl9NT0RFCQkweDA1QTgKKyNkZWZpbmUgQ09OVFJPTF9YVEFMX09TQ0lMTEFUT1IJCQkweDA1QUMKKyNkZWZpbmUgQ09OVFJPTF9DT05UUk9MX0kyQ18yCQkJMHgwNjA0CisjZGVmaW5lIENPTlRST0xfQ09OVFJPTF9KVEFHCQkJMHgwNjA4CisjZGVmaW5lIENPTlRST0xfQ09OVFJPTF9TWVMJCQkweDA2MEMKKyNkZWZpbmUgQ09OVFJPTF9TUEFSRV9SVwkJMHgwNjE0CisjZGVmaW5lIENPTlRST0xfU1BBUkVfUgkJMHgwNjE4CisjZGVmaW5lIENPTlRST0xfU1BBUkVfUl9DMAkJMHgwNjFDCisKKyNlbmRpZiAvKiBfTVVYX09NQVA1X0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA0L29tYXA0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L29tYXAuaApzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwNC5oCmNvcHkgdG8gYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNS9vbWFwLmgKaW5kZXggNjFlYmIzZC4uZDgxMWQ2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1vbWFwNC9vbWFwNC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvb21hcC5oCkBAIC00LDEwICs0LDcgQEAKICAqCiAgKiBBdXRob3JzOgogICoJQW5lZXNoIFYgPGFuZWVzaEB0aS5jb20+Ci0gKgotICogRGVyaXZlZCBmcm9tIE9NQVAzIHdvcmsgYnkKLSAqCVJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqCVN5ZWQgTW9oYW1tZWQgS2hhc2ltIDx4MGtoYXNpbUB0aS5jb20+CisgKglTcmljaGFyYW4gUiA8ci5zcmljaGFyYW5AdGkuY29tPgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgpAQCAtMjgsOCArMjUsOCBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaWZuZGVmIF9PTUFQNF9IXwotI2RlZmluZSBfT01BUDRfSF8KKyNpZm5kZWYgX09NQVA1X0hfCisjZGVmaW5lIF9PTUFQNV9IXwogCiAjaWYgIShkZWZpbmVkKF9fS0VSTkVMX1NUUklDVF9OQU1FUykgfHwgZGVmaW5lZChfX0FTU0VNQkxZX18pKQogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpAQCAtMzgsNTQgKzM1LDUyIEBACiAvKgogICogTDQgUGVyaXBoZXJhbHMgLSBMNCBXYWtldXAgYW5kIEw0IENvcmUgbm93CiAgKi8KLSNkZWZpbmUgT01BUDQ0WFhfTDRfQ09SRV9CQVNFCTB4NEEwMDAwMDAKLSNkZWZpbmUgT01BUDQ0WFhfTDRfV0tVUF9CQVNFCTB4NEEzMDAwMDAKLSNkZWZpbmUgT01BUDQ0WFhfTDRfUEVSX0JBU0UJMHg0ODAwMDAwMAorI2RlZmluZSBPTUFQNTRYWF9MNF9DT1JFX0JBU0UJMHg0QTAwMDAwMAorI2RlZmluZSBPTUFQNTRYWF9MNF9XS1VQX0JBU0UJMHg0QWUwMDAwMAorI2RlZmluZSBPTUFQNTRYWF9MNF9QRVJfQkFTRQkweDQ4MDAwMDAwCiAKLSNkZWZpbmUgT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX1NUQVJUCTB4ODAwMDAwMDAKLSNkZWZpbmUgT01BUDQ0WFhfRFJBTV9BRERSX1NQQUNFX0VORAkweEQwMDAwMDAwCi0KKyNkZWZpbmUgT01BUDU0WFhfRFJBTV9BRERSX1NQQUNFX1NUQVJUCTB4ODAwMDAwMDAKKyNkZWZpbmUgT01BUDU0WFhfRFJBTV9BRERSX1NQQUNFX0VORAkweEQwMDAwMDAwCisjZGVmaW5lIERSQU1fQUREUl9TUEFDRV9TVEFSVAlPTUFQNTRYWF9EUkFNX0FERFJfU1BBQ0VfU1RBUlQKKyNkZWZpbmUgRFJBTV9BRERSX1NQQUNFX0VORAlPTUFQNTRYWF9EUkFNX0FERFJfU1BBQ0VfRU5ECiAKIC8qIENPTlRST0wgKi8KLSNkZWZpbmUgQ1RSTF9CQVNFCQkoT01BUDQ0WFhfTDRfQ09SRV9CQVNFICsgMHgyMDAwKQotI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ09SRQkoT01BUDQ0WFhfTDRfQ09SRV9CQVNFICsgMHgxMDAwMDApCi0jZGVmaW5lIENPTlRST0xfUEFEQ09ORl9XS1VQCShPTUFQNDRYWF9MNF9DT1JFX0JBU0UgKyAweDMxRTAwMCkKKyNkZWZpbmUgQ1RSTF9CQVNFCQkoT01BUDU0WFhfTDRfQ09SRV9CQVNFICsgMHgyMDAwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfQ09SRQkoQ1RSTF9CQVNFICsgMHgwODAwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfV0tVUAkoT01BUDU0WFhfTDRfV0tVUF9CQVNFICsgMHhjODAwKQogCi0vKiBMUEREUjIgSU8gcmVncyAqLworLyogTFBERFIyIElPIHJlZ3MuIFRvIGJlIHZlcmlmaWVkICovCiAjZGVmaW5lIExQRERSMl9JT19SRUdTX0JBU0UJMHg0QTEwMDYzOAogCiAvKiBDT05UUk9MX0lEX0NPREUgKi8KLSNkZWZpbmUgQ09OVFJPTF9JRF9DT0RFCQkweDRBMDAyMjA0CisjZGVmaW5lIENPTlRST0xfSURfQ09ERQkJKENUUkxfQkFTRSArIDB4MjA0KQogCi0vKiA0NDMwICovCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzFfMAkweDBCODUyMDJGCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMAkweDFCODUyMDJGCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMQkweDNCOTVDMDJGCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMgkweDRCOTVDMDJGCi0jZGVmaW5lIE9NQVA0NDMwX0NPTlRST0xfSURfQ09ERV9FUzJfMwkweDZCOTVDMDJGCisvKiBUbyBiZSB2ZXJpZmllZCAqLworI2RlZmluZSBPTUFQNV9DT05UUk9MX0lEX0NPREVfRVMxXzAJMHgwQjg1MjAyRgogCi0vKiA0NDYwICovCi0jZGVmaW5lIE9NQVA0NDYwX0NPTlRST0xfSURfQ09ERV9FUzFfMAkweDBCOTRFMDJGCi0jZGVmaW5lIE9NQVA0NDYwX0NPTlRST0xfSURfQ09ERV9FUzFfMQkweDJCOTRFMDJGCisvKiBTVERfRlVTRV9QUk9EX0lEXzEgKi8KKyNkZWZpbmUgU1REX0ZVU0VfUFJPRF9JRF8xCQkoQ1RSTF9CQVNFICsgMHgyMTgpCisjZGVmaW5lIFBST0RfSURfMV9TSUxJQ09OX1RZUEVfU0hJRlQJMTYKKyNkZWZpbmUgUFJPRF9JRF8xX1NJTElDT05fVFlQRV9NQVNLCSgzIDw8IDE2KQogCiAvKiBVQVJUICovCi0jZGVmaW5lIFVBUlQxX0JBU0UJCShPTUFQNDRYWF9MNF9QRVJfQkFTRSArIDB4NmEwMDApCi0jZGVmaW5lIFVBUlQyX0JBU0UJCShPTUFQNDRYWF9MNF9QRVJfQkFTRSArIDB4NmMwMDApCi0jZGVmaW5lIFVBUlQzX0JBU0UJCShPTUFQNDRYWF9MNF9QRVJfQkFTRSArIDB4MjAwMDApCisjZGVmaW5lIFVBUlQxX0JBU0UJCShPTUFQNTRYWF9MNF9QRVJfQkFTRSArIDB4NmEwMDApCisjZGVmaW5lIFVBUlQyX0JBU0UJCShPTUFQNTRYWF9MNF9QRVJfQkFTRSArIDB4NmMwMDApCisjZGVmaW5lIFVBUlQzX0JBU0UJCShPTUFQNTRYWF9MNF9QRVJfQkFTRSArIDB4MjAwMDApCiAKIC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lcnMgKi8KLSNkZWZpbmUgR1BUMV9CQVNFCQkoT01BUDQ0WFhfTDRfV0tVUF9CQVNFICsgMHgxODAwMCkKLSNkZWZpbmUgR1BUMl9CQVNFCQkoT01BUDQ0WFhfTDRfUEVSX0JBU0UgICsgMHgzMjAwMCkKLSNkZWZpbmUgR1BUM19CQVNFCQkoT01BUDQ0WFhfTDRfUEVSX0JBU0UgICsgMHgzNDAwMCkKKyNkZWZpbmUgR1BUMV9CQVNFCQkoT01BUDU0WFhfTDRfV0tVUF9CQVNFICsgMHgxODAwMCkKKyNkZWZpbmUgR1BUMl9CQVNFCQkoT01BUDU0WFhfTDRfUEVSX0JBU0UgICsgMHgzMjAwMCkKKyNkZWZpbmUgR1BUM19CQVNFCQkoT01BUDU0WFhfTDRfUEVSX0JBU0UgICsgMHgzNDAwMCkKIAogLyogV2F0Y2hkb2cgVGltZXIyIC0gTVBVIHdhdGNoZG9nICovCi0jZGVmaW5lIFdEVDJfQkFTRQkJKE9NQVA0NFhYX0w0X1dLVVBfQkFTRSArIDB4MTQwMDApCisjZGVmaW5lIFdEVDJfQkFTRQkJKE9NQVA1NFhYX0w0X1dLVVBfQkFTRSArIDB4MTQwMDApCiAKIC8qIDMyS1RJTUVSICovCi0jZGVmaW5lIFNZTkNfMzJLVElNRVJfQkFTRQkoT01BUDQ0WFhfTDRfV0tVUF9CQVNFICsgMHg0MDAwKQorI2RlZmluZSBTWU5DXzMyS1RJTUVSX0JBU0UJKE9NQVA1NFhYX0w0X1dLVVBfQkFTRSArIDB4NDAwMCkKIAogLyogR1BNQyAqLwotI2RlZmluZSBPTUFQNDRYWF9HUE1DX0JBU0UJMHg1MDAwMDAwMAorI2RlZmluZSBPTUFQNTRYWF9HUE1DX0JBU0UJMHg1MDAwMDAwMAogCiAvKiBTWVNURU0gQ09OVFJPTCBNT0RVTEUgKi8KICNkZWZpbmUgU1lTQ1RSTF9HRU5FUkFMX0NPUkVfQkFTRQkweDRBMDAyMDAwCkBAIC0xMDgsNyArMTAzLDcgQEAKICAqLwogCiAvKiBQUk0gKi8KLSNkZWZpbmUgUFJNX0JBU0UJCTB4NEEzMDYwMDAKKyNkZWZpbmUgUFJNX0JBU0UJCTB4NEFFMDYwMDAKICNkZWZpbmUgUFJNX0RFVklDRV9CQVNFCQkoUFJNX0JBU0UgKyAweDFCMDApCiAKICNkZWZpbmUgUFJNX1JTVENUUkwJCVBSTV9ERVZJQ0VfQkFTRQpAQCAtMTc1LDE4ICsxNzAsMjEgQEAKICAqIGF0IDB4NDAzMDQwMDAoRU1VIGJhc2UpIHNvIHRoYXQgb3VyIGNvZGUgd29ya3MgZm9yIGJvdGggRU1VIGFuZCBHUAogICovCiAjZGVmaW5lIE5PTl9TRUNVUkVfU1JBTV9TVEFSVAkweDQwMzA0MDAwCi0jZGVmaW5lIE5PTl9TRUNVUkVfU1JBTV9FTkQJMHg0MDMwRTAwMAkvKiBOb3QgaW5jbHVzaXZlICovCisjZGVmaW5lIE5PTl9TRUNVUkVfU1JBTV9FTkQJMHg0MDMyMDAwMAkvKiBOb3QgaW5jbHVzaXZlICovCiAvKiBiYXNlIGFkZHJlc3MgZm9yIGluZGlyZWN0IHZlY3RvcnMgKGludGVybmFsIGJvb3QgbW9kZSkgKi8KLSNkZWZpbmUgU1JBTV9ST01fVkVDVF9CQVNFCTB4NDAzMEQwMDAKKyNkZWZpbmUgU1JBTV9ST01fVkVDVF9CQVNFCTB4NDAzMUYwMDAKIC8qIFRlbXBvcmFyeSBTUkFNIHN0YWNrIHVzZWQgd2hpbGUgbG93IGxldmVsIGluaXQgaXMgZG9uZSAqLwotI2RlZmluZSBMT1dfTEVWRUxfU1JBTV9TVEFDSwkJTk9OX1NFQ1VSRV9TUkFNX0VORAorI2RlZmluZSBMT1dfTEVWRUxfU1JBTV9TVEFDSwlOT05fU0VDVVJFX1NSQU1fRU5ECisKICNkZWZpbmUgU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIJCU5PTl9TRUNVUkVfU1JBTV9TVEFSVAotLyogU1JBTSBzY3JhdGNoIHNwYWNlIGVudHJpZXMgKi8KLSNkZWZpbmUgT01BUDRfU1JBTV9TQ1JBVENIX09NQVA0X1JFVglTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUgotI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9TSVpFCShTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUiArIDB4NCkKLSNkZWZpbmUgT01BUDRfU1JBTV9TQ1JBVENIX0VNSUZfVF9OVU0JKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHhDKQotI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfRU1JRl9UX0RFTgkoU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIgKyAweDEwKQotI2RlZmluZSBPTUFQNF9TUkFNX1NDUkFUQ0hfU1BBQ0VfRU5ECShTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUiArIDB4MTQpCisvKgorICogU1JBTSBzY3JhdGNoIHNwYWNlIGVudHJpZXMKKyAqLworI2RlZmluZSBPTUFQNV9TUkFNX1NDUkFUQ0hfT01BUDVfUkVWCVNSQU1fU0NSQVRDSF9TUEFDRV9BRERSCisjZGVmaW5lIE9NQVA1X1NSQU1fU0NSQVRDSF9FTUlGX1NJWkUJKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHg0KQorI2RlZmluZSBPTUFQNV9TUkFNX1NDUkFUQ0hfRU1JRl9UX05VTQkoU1JBTV9TQ1JBVENIX1NQQUNFX0FERFIgKyAweEMpCisjZGVmaW5lIE9NQVA1X1NSQU1fU0NSQVRDSF9FTUlGX1RfREVOCShTUkFNX1NDUkFUQ0hfU1BBQ0VfQUREUiArIDB4MTApCisjZGVmaW5lIE9NQVA1X1NSQU1fU0NSQVRDSF9TUEFDRV9FTkQJKFNSQU1fU0NSQVRDSF9TUEFDRV9BRERSICsgMHgxNCkKIAogLyogU2lsaWNvbiByZXZpc2lvbnMgKi8KICNkZWZpbmUgT01BUDQ0MzBfU0lMSUNPTl9JRF9JTlZBTElECTB4RkZGRkZGRkYKQEAgLTIwNSw1ICsyMDMsMjEgQEAKICNkZWZpbmUgREVWX0RFU0NfUFRSX09GRlNFVAkweDQKICNkZWZpbmUgREVWX0RBVEFfUFRSX09GRlNFVAkweDE4CiAjZGVmaW5lIEJPT1RfTU9ERV9PRkZTRVQJMHg4CisjZGVmaW5lIFJFU0VUX1JFQVNPTl9PRkZTRVQgICAgIDB4OQorI2RlZmluZSBDSF9GTEFHU19PRkZTRVQgICAgICAgICAweEEKIAorI2RlZmluZSBDSF9GTEFHU19DSFNFVFRJTkdTCSgweDEgPDwgMCkKKyNkZWZpbmUJQ0hfRkxBR1NfQ0hSQU0JCSgweDEgPDwgMSkKKyNkZWZpbmUgQ0hfRkxBR1NfQ0hGTEFTSAkoMHgxIDw8IDIpCisjZGVmaW5lIENIX0ZMQUdTX0NITU1DU0QJKDB4MSA8PCAzKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IG9tYXBfYm9vdF9wYXJhbWV0ZXJzIHsKKwljaGFyICpib290X21lc3NhZ2U7CisJdW5zaWduZWQgaW50IG1lbV9ib290X2Rlc2NyaXB0b3I7CisJdW5zaWduZWQgY2hhciBvbWFwX2Jvb3RkZXZpY2U7CisJdW5zaWduZWQgY2hhciByZXNldF9yZWFzb247CisJdW5zaWduZWQgY2hhciBjaF9mbGFnczsKK307CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtb21hcDUvc3lzX3Byb3RvLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L3N5c19wcm90by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWUxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLW9tYXA1L3N5c19wcm90by5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9TWVNfUFJPVE9fSF8KKyNkZWZpbmUgX1NZU19QUk9UT19IXworCisjaW5jbHVkZSA8YXNtL2FyY2gvb21hcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2Nrcy5oPgorI2luY2x1ZGUgPGFzbS9vbWFwX2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eF9vbWFwNS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2Nrcy5oPgorCitzdHJ1Y3Qgb21hcF9zeXNpbmZvIHsKKwljaGFyICpib2FyZF9zdHJpbmc7Cit9OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBvbWFwX3N5c2luZm8gc3lzaW5mbzsKKwordm9pZCBncG1jX2luaXQodm9pZCk7Cit2b2lkIHdhdGNoZG9nX2luaXQodm9pZCk7Cit1MzIgZ2V0X2RldmljZV90eXBlKHZvaWQpOwordm9pZCBkb19zZXRfbXV4KHUzMiBiYXNlLCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29uc3QgKmFycmF5LCBpbnQgc2l6ZSk7Cit2b2lkIHNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKHZvaWQpOwordm9pZCBzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwodm9pZCk7Cit2b2lkIHNyMzIodm9pZCAqLCB1MzIsIHUzMiwgdTMyKTsKK3UzMiB3YWl0X29uX3ZhbHVlKHUzMiwgdTMyLCB2b2lkICosIHUzMik7Cit2b2lkIHNkZWxheSh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgb21hcF9yZXZfc3RyaW5nKGNoYXIgKm9tYXBfcmV2X3N0cmluZyk7Cit2b2lkIHNldHVwX2Nsb2Nrc19mb3JfY29uc29sZSh2b2lkKTsKK3ZvaWQgcHJjbV9pbml0KHZvaWQpOwordm9pZCBieXBhc3NfZHBsbCh1MzIgKmNvbnN0IGJhc2UpOwordm9pZCBmcmVxX3VwZGF0ZV9jb3JlKHZvaWQpOwordTMyIGdldF9zeXNfY2xrX2ZyZXEodm9pZCk7Cit1MzIgb21hcDVfZGRyX2Nsayh2b2lkKTsKK3ZvaWQgY2FuY2VsX291dCh1MzIgKm51bSwgdTMyICpkZW4sIHUzMiBkZW5fbGltaXQpOwordm9pZCBzZHJhbV9pbml0KHZvaWQpOwordTMyIG9tYXBfc2RyYW1fc2l6ZSh2b2lkKTsKK3UzMiBjb3J0ZXhfcmV2KHZvaWQpOwordm9pZCBpbml0X29tYXBfcmV2aXNpb24odm9pZCk7Cit2b2lkIGRvX2lvX3NldHRpbmdzKHZvaWQpOworCisvKgorICogVGhpcyBpcyB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIKKyAqIHdhcyBleGVjdXRlZCBieSBSb21jb2RlIHByaW9yIHRvIGNvbnRyb2wgb2YgdHJhbnNmZXIKKyAqIHRvIHRoZSBib290bG9hZGVyLiBTUEwgaXMgcmVzcG9uc2libGUgZm9yIHNhdmluZyBhbmQKKyAqIHBhc3NpbmcgdGhpcyB0byB0aGUgdS1ib290LgorICovCitleHRlcm4gc3RydWN0IG9tYXBfYm9vdF9wYXJhbWV0ZXJzIGJvb3RfcGFyYW1zOworCitzdGF0aWMgaW5saW5lIHUzMiBydW5uaW5nX2Zyb21fc2RyYW0odm9pZCkKK3sKKwl1MzIgcGM7CisJYXNtIHZvbGF0aWxlICgibW92ICUwLCBwYyIgOiAiPXIiIChwYykpOworCXJldHVybiAoKHBjID49IE9NQVA1NFhYX0RSQU1fQUREUl9TUEFDRV9TVEFSVCkgJiYKKwkgICAgKHBjIDwgT01BUDU0WFhfRFJBTV9BRERSX1NQQUNFX0VORCkpOworfQorCitzdGF0aWMgaW5saW5lIHU4IHVib290X2xvYWRlZF9ieV9zcGwodm9pZCkKK3sKKwkvKgorCSAqIHUtYm9vdCBjYW4gYmUgcnVubmluZyBmcm9tIHNkcmFtIGVpdGhlciBiZWNhdXNlIG9mIGNvbmZpZ3VyYXRpb24KKwkgKiBIZWFkZXIgb3IgYnkgU1BMLiBJZiBiZWNhdXNlIG9mIENILCB0aGVuIHRoZSByb21jb2RlIHNldHMgdGhlCisJICogQ0hTRVRUSU5HUyBleGVjdXRlZCBiaXQgdG8gdHJ1ZSBpbiB0aGUgYm9vdCBwYXJhbWV0ZXIgc3RydWN0dXJlIHRoYXQKKwkgKiBpdCBwYXNzZXMgdG8gdGhlIGJvb3Rsb2FkZXIuVGhpcyBwYXJhbWV0ZXIgaXMgc3RvcmVkIGluIHRoZSBjaF9mbGFncworCSAqIHZhcmlhYmxlIGJ5IGJvdGggU1BMIGFuZCB1LWJvb3QuQ2hlY2sgb3V0IGZvciBDSFNFVFRJTkdTLCB3aGljaCBpcyBhCisJICogbWFuZGF0b3J5IHNlY3Rpb24gaWYgQ0ggaXMgcHJlc2VudC4KKwkgKi8KKwlpZiAoKGJvb3RfcGFyYW1zLmNoX2ZsYWdzKSAmIChDSF9GTEFHU19DSFNFVFRJTkdTKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gcnVubmluZ19mcm9tX3NkcmFtKCk7Cit9CisvKgorICogVGhlIGJhc2ljIGhhcmR3YXJlIGluaXQgb2YgT01BUChzX2luaXQoKSkgY2FuIGhhcHBlbiBpbiA0CisgKiBkaWZmZXJlbnQgY29udGV4dHM6CisgKiAgMS4gU1BMIHJ1bm5pbmcgZnJvbSBTUkFNCisgKiAgMi4gVS1Cb290IHJ1bm5pbmcgZnJvbSBGTEFTSAorICogIDMuIE5vbi1YSVAgVS1Cb290IGxvYWRlZCB0byBTRFJBTSBieSBTUEwKKyAqICA0LiBOb24tWElQIFUtQm9vdCBsb2FkZWQgdG8gU0RSQU0gYnkgUk9NIGNvZGUgdXNpbmcgdGhlCisgKiAgICAgQ29uZmlndXJhdGlvbiBIZWFkZXIgZmVhdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhpcyBjb250ZXh0LgorICogRGVmaW5pbmcgYXMgaW5saW5lIG1heSBoZWxwIGluIGNvbXBpbGluZyBvdXQgdW51c2VkIGZ1bmN0aW9ucyBpbiBTUEwKKyAqLworc3RhdGljIGlubGluZSB1MzIgb21hcF9od19pbml0X2NvbnRleHQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU1BMX0JVSUxECisJcmV0dXJuIE9NQVBfSU5JVF9DT05URVhUX1NQTDsKKyNlbHNlCisJaWYgKHVib290X2xvYWRlZF9ieV9zcGwoKSkKKwkJcmV0dXJuIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX1NQTDsKKwllbHNlIGlmIChydW5uaW5nX2Zyb21fc2RyYW0oKSkKKwkJcmV0dXJuIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0FGVEVSX0NIOworCWVsc2UKKwkJcmV0dXJuIE9NQVBfSU5JVF9DT05URVhUX1VCT09UX0ZST01fTk9SOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXBfcmV2aXNpb24odm9pZCkKK3sKKwlleHRlcm4gdTMyICpjb25zdCBvbWFwNV9yZXZpc2lvbjsKKwlyZXR1cm4gKm9tYXA1X3JldmlzaW9uOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtcHhhL3B4YS1yZWdzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLXB4YS9weGEtcmVncy5oCmluZGV4IDEwOWZkYzAuLjUyYzc5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtcHhhL3B4YS1yZWdzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1weGEvcHhhLXJlZ3MuaApAQCAtMzE1LDExNyArMzE1LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBVQVJUcwotICovCi0vKiBGdWxsIEZ1bmN0aW9uIFVBUlQgKEZGVUFSVCkgKi8KLSNkZWZpbmUgRkZVQVJUCQlGRlJCUgotI2RlZmluZSBGRlJCUgkJMHg0MDEwMDAwMCAgLyogUmVjZWl2ZSBCdWZmZXIgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgRkZUSFIJCTB4NDAxMDAwMDAgIC8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIEZGSUVSCQkweDQwMTAwMDA0ICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBGRklJUgkJMHg0MDEwMDAwOCAgLyogSW50ZXJydXB0IElEIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIEZGRkNSCQkweDQwMTAwMDA4ICAvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIEZGTENSCQkweDQwMTAwMDBDICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEZGTUNSCQkweDQwMTAwMDEwICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBGRkxTUgkJMHg0MDEwMDAxNCAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgRkZNU1IJCTB4NDAxMDAwMTggIC8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBGRlNQUgkJMHg0MDEwMDAxQyAgLyogU2NyYXRjaCBQYWQgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEZGSVNSCQkweDQwMTAwMDIwICAvKiBJbmZyYXJlZCBTZWxlY3Rpb24gUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIEZGRExMCQkweDQwMTAwMDAwICAvKiBEaXZpc29yIExhdGNoIExvdyBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBGRkRMSAkJMHg0MDEwMDAwNCAgLyogRGl2aXNvciBMYXRjaCBIaWdoIFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCi0KLS8qIEJsdWV0b290aCBVQVJUIChCVFVBUlQpICovCi0jZGVmaW5lIEJUVUFSVAkJQlRSQlIKLSNkZWZpbmUgQlRSQlIJCTB4NDAyMDAwMDAgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIEJUVEhSCQkweDQwMjAwMDAwICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBCVElFUgkJMHg0MDIwMDAwNCAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgQlRJSVIJCTB4NDAyMDAwMDggIC8qIEludGVycnVwdCBJRCBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBCVEZDUgkJMHg0MDIwMDAwOCAgLyogRklGTyBDb250cm9sIFJlZ2lzdGVyICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBCVExDUgkJMHg0MDIwMDAwQyAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVE1DUgkJMHg0MDIwMDAxMCAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgQlRMU1IJCTB4NDAyMDAwMTQgIC8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIEJUTVNSCQkweDQwMjAwMDE4ICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KLSNkZWZpbmUgQlRTUFIJCTB4NDAyMDAwMUMgIC8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVElTUgkJMHg0MDIwMDAyMCAgLyogSW5mcmFyZWQgU2VsZWN0aW9uIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBCVERMTAkJMHg0MDIwMDAwMCAgLyogRGl2aXNvciBMYXRjaCBMb3cgUmVnaXN0ZXIgKERMQUIgPSAxKSAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgQlRETEgJCTB4NDAyMDAwMDQgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLwotCi0vKiBTdGFuZGFyZCBVQVJUIChTVFVBUlQpICovCi0jZGVmaW5lIFNUVUFSVAkJU1RSQlIKLSNkZWZpbmUgU1RSQlIJCTB4NDA3MDAwMDAgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIFNUVEhSCQkweDQwNzAwMDAwICAvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBTVElFUgkJMHg0MDcwMDAwNCAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgU1RJSVIJCTB4NDA3MDAwMDggIC8qIEludGVycnVwdCBJRCBSZWdpc3RlciAocmVhZCBvbmx5KSAqLwotI2RlZmluZSBTVEZDUgkJMHg0MDcwMDAwOCAgLyogRklGTyBDb250cm9sIFJlZ2lzdGVyICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBTVExDUgkJMHg0MDcwMDAwQyAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBTVE1DUgkJMHg0MDcwMDAxMCAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAocmVhZC93cml0ZSkgKi8KLSNkZWZpbmUgU1RMU1IJCTB4NDA3MDAwMTQgIC8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyIChyZWFkIG9ubHkpICovCi0jZGVmaW5lIFNUTVNSCQkweDQwNzAwMDE4ICAvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBTVFNQUgkJMHg0MDcwMDAxQyAgLyogU2NyYXRjaCBQYWQgUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIFNUSVNSCQkweDQwNzAwMDIwICAvKiBJbmZyYXJlZCBTZWxlY3Rpb24gUmVnaXN0ZXIgKHJlYWQvd3JpdGUpICovCi0jZGVmaW5lIFNURExMCQkweDQwNzAwMDAwICAvKiBEaXZpc29yIExhdGNoIExvdyBSZWdpc3RlciAoRExBQiA9IDEpIChyZWFkL3dyaXRlKSAqLwotI2RlZmluZSBTVERMSAkJMHg0MDcwMDAwNCAgLyogRGl2aXNvciBMYXRjaCBIaWdoIFJlZ2lzdGVyIChETEFCID0gMSkgKHJlYWQvd3JpdGUpICovCi0KLSNkZWZpbmUgSUVSX0RNQUUJKDEgPDwgNykJLyogRE1BIFJlcXVlc3RzIEVuYWJsZSAqLwotI2RlZmluZSBJRVJfVVVFCQkoMSA8PCA2KQkvKiBVQVJUIFVuaXQgRW5hYmxlICovCi0jZGVmaW5lIElFUl9OUlpFCSgxIDw8IDUpCS8qIE5SWiBjb2RpbmcgRW5hYmxlICovCi0jZGVmaW5lIElFUl9SVElPRQkoMSA8PCA0KQkvKiBSZWNlaXZlciBUaW1lIE91dCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIElFUl9NSUUJCSgxIDw8IDMpCS8qIE1vZGVtIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgSUVSX1JMU0UJKDEgPDwgMikJLyogUmVjZWl2ZXIgTGluZSBTdGF0dXMgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBJRVJfVElFCQkoMSA8PCAxKQkvKiBUcmFuc21pdCBEYXRhIHJlcXVlc3QgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBJRVJfUkFWSUUJKDEgPDwgMCkJLyogUmVjZWl2ZXIgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0IEVuYWJsZSAqLwotCi0jZGVmaW5lIElJUl9GSUZPRVMxCSgxIDw8IDcpCS8qIEZJRk8gTW9kZSBFbmFibGUgU3RhdHVzICovCi0jZGVmaW5lIElJUl9GSUZPRVMwCSgxIDw8IDYpCS8qIEZJRk8gTW9kZSBFbmFibGUgU3RhdHVzICovCi0jZGVmaW5lIElJUl9UT0QJCSgxIDw8IDMpCS8qIFRpbWUgT3V0IERldGVjdGVkICovCi0jZGVmaW5lIElJUl9JSUQyCSgxIDw8IDIpCS8qIEludGVycnVwdCBTb3VyY2UgRW5jb2RlZCAqLwotI2RlZmluZSBJSVJfSUlEMQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgU291cmNlIEVuY29kZWQgKi8KLSNkZWZpbmUgSUlSX0lQCQkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgUGVuZGluZyAoYWN0aXZlIGxvdykgKi8KLQotI2RlZmluZSBGQ1JfSVRMMgkoMSA8PCA3KQkvKiBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbCAqLwotI2RlZmluZSBGQ1JfSVRMMQkoMSA8PCA2KQkvKiBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbCAqLwotI2RlZmluZSBGQ1JfUkVTRVRURgkoMSA8PCAyKQkvKiBSZXNldCBUcmFuc21pdHRlciBGSUZPICovCi0jZGVmaW5lIEZDUl9SRVNFVFJGCSgxIDw8IDEpCS8qIFJlc2V0IFJlY2VpdmVyIEZJRk8gKi8KLSNkZWZpbmUgRkNSX1RSRklGT0UJKDEgPDwgMCkJLyogVHJhbnNtaXQgYW5kIFJlY2VpdmUgRklGTyBFbmFibGUgKi8KLSNkZWZpbmUgRkNSX0lUTF8xCSgwKQotI2RlZmluZSBGQ1JfSVRMXzgJKEZDUl9JVEwxKQotI2RlZmluZSBGQ1JfSVRMXzE2CShGQ1JfSVRMMikKLSNkZWZpbmUgRkNSX0lUTF8zMgkoRkNSX0lUTDJ8RkNSX0lUTDEpCi0KLSNkZWZpbmUgTENSX0RMQUIJKDEgPDwgNykJLyogRGl2aXNvciBMYXRjaCBBY2Nlc3MgQml0ICovCi0jZGVmaW5lIExDUl9TQgkJKDEgPDwgNikJLyogU2V0IEJyZWFrICovCi0jZGVmaW5lIExDUl9TVEtZUAkoMSA8PCA1KQkvKiBTdGlja3kgUGFyaXR5ICovCi0jZGVmaW5lIExDUl9FUFMJCSgxIDw8IDQpCS8qIEV2ZW4gUGFyaXR5IFNlbGVjdCAqLwotI2RlZmluZSBMQ1JfUEVOCQkoMSA8PCAzKQkvKiBQYXJpdHkgRW5hYmxlICovCi0jZGVmaW5lIExDUl9TVEIJCSgxIDw8IDIpCS8qIFN0b3AgQml0ICovCi0jZGVmaW5lIExDUl9XTFMxCSgxIDw8IDEpCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAqLwotI2RlZmluZSBMQ1JfV0xTMAkoMSA8PCAwKQkvKiBXb3JkIExlbmd0aCBTZWxlY3QgKi8KLQotI2RlZmluZSBMU1JfRklGT0UJKDEgPDwgNykJLyogRklGTyBFcnJvciBTdGF0dXMgKi8KLSNkZWZpbmUgTFNSX1RFTVQJKDEgPDwgNikJLyogVHJhbnNtaXR0ZXIgRW1wdHkgKi8KLSNkZWZpbmUgTFNSX1REUlEJKDEgPDwgNSkJLyogVHJhbnNtaXQgRGF0YSBSZXF1ZXN0ICovCi0jZGVmaW5lIExTUl9CSQkJKDEgPDwgNCkJLyogQnJlYWsgSW50ZXJydXB0ICovCi0jZGVmaW5lIExTUl9GRQkJKDEgPDwgMykJLyogRnJhbWluZyBFcnJvciAqLwotI2RlZmluZSBMU1JfUEUJCSgxIDw8IDIpCS8qIFBhcml0eSBFcnJvciAqLwotI2RlZmluZSBMU1JfT0UJCSgxIDw8IDEpCS8qIE92ZXJydW4gRXJyb3IgKi8KLSNkZWZpbmUgTFNSX0RSCQkoMSA8PCAwKQkvKiBEYXRhIFJlYWR5ICovCi0KLSNkZWZpbmUgTUNSX0xPT1AJKDEgPDwgNCkJLyogKi8KLSNkZWZpbmUgTUNSX09VVDIJKDEgPDwgMykJLyogZm9yY2UgTVNSX0RDRCBpbiBsb29wYmFjayBtb2RlICovCi0jZGVmaW5lIE1DUl9PVVQxCSgxIDw8IDIpCS8qIGZvcmNlIE1TUl9SSSBpbiBsb29wYmFjayBtb2RlICovCi0jZGVmaW5lIE1DUl9SVFMJCSgxIDw8IDEpCS8qIFJlcXVlc3QgdG8gU2VuZCAqLwotI2RlZmluZSBNQ1JfRFRSCQkoMSA8PCAwKQkvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCi0KLSNkZWZpbmUgTVNSX0RDRAkJKDEgPDwgNykJLyogRGF0YSBDYXJyaWVyIERldGVjdCAqLwotI2RlZmluZSBNU1JfUkkJCSgxIDw8IDYpCS8qIFJpbmcgSW5kaWNhdG9yICovCi0jZGVmaW5lIE1TUl9EU1IJCSgxIDw8IDUpCS8qIERhdGEgU2V0IFJlYWR5ICovCi0jZGVmaW5lIE1TUl9DVFMJCSgxIDw8IDQpCS8qIENsZWFyIFRvIFNlbmQgKi8KLSNkZWZpbmUgTVNSX0REQ0QJKDEgPDwgMykJLyogRGVsdGEgRGF0YSBDYXJyaWVyIERldGVjdCAqLwotI2RlZmluZSBNU1JfVEVSSQkoMSA8PCAyKQkvKiBUcmFpbGluZyBFZGdlIFJpbmcgSW5kaWNhdG9yICovCi0jZGVmaW5lIE1TUl9ERFNSCSgxIDw8IDEpCS8qIERlbHRhIERhdGEgU2V0IFJlYWR5ICovCi0jZGVmaW5lIE1TUl9EQ1RTCSgxIDw8IDApCS8qIERlbHRhIENsZWFyIFRvIFNlbmQgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCiAgKiBJclNSIChJbmZyYXJlZCBTZWxlY3Rpb24gUmVnaXN0ZXIpCiAgKi8KICNkZWZpbmUgSXJTUl9PRkZTRVQgMHgyMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1weGEvcmVncy11YXJ0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoLXB4YS9yZWdzLXVhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTVlODkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaC1weGEvcmVncy11YXJ0LmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmCV9fUkVHU19VQVJUX0hfXworI2RlZmluZQlfX1JFR1NfVUFSVF9IX18KKworI2RlZmluZQlGRlVBUlRfQkFTRQkJMHg0MDEwMDAwMAorI2RlZmluZQlCVFVBUlRfQkFTRQkJMHg0MDIwMDAwMAorI2RlZmluZQlTVFVBUlRfQkFTRQkJMHg0MDcwMDAwMAorI2RlZmluZQlIV1VBUlRfQkFTRQkJMHg0MTYwMDAwMAorCitzdHJ1Y3QgcHhhX3VhcnRfcmVncyB7CisJdW5pb24geworCQl1aW50MzJfdAl0aHI7CisJCXVpbnQzMl90CXJicjsKKwkJdWludDMyX3QJZGxsOworCX07CisJdW5pb24geworCQl1aW50MzJfdAlpZXI7CisJCXVpbnQzMl90CWRsaDsKKwl9OworCXVuaW9uIHsKKwkJdWludDMyX3QJZmNyOworCQl1aW50MzJfdAlpaXI7CisJfTsKKwl1aW50MzJfdAlsY3I7CisJdWludDMyX3QJbWNyOworCXVpbnQzMl90CWxzcjsKKwl1aW50MzJfdAltc3I7CisJdWludDMyX3QJc3ByOworCXVpbnQzMl90CWlzcjsKK307CisKKyNkZWZpbmUJSUVSX0RNQUUJKDEgPDwgNykKKyNkZWZpbmUJSUVSX1VVRQkJKDEgPDwgNikKKyNkZWZpbmUJSUVSX05SWkUJKDEgPDwgNSkKKyNkZWZpbmUJSUVSX1JUSU9FCSgxIDw8IDQpCisjZGVmaW5lCUlFUl9NSUUJCSgxIDw8IDMpCisjZGVmaW5lCUlFUl9STFNFCSgxIDw8IDIpCisjZGVmaW5lCUlFUl9USUUJCSgxIDw8IDEpCisjZGVmaW5lCUlFUl9SQVZJRQkoMSA8PCAwKQorCisjZGVmaW5lCUlJUl9GSUZPRVMxCSgxIDw8IDcpCisjZGVmaW5lCUlJUl9GSUZPRVMwCSgxIDw8IDYpCisjZGVmaW5lCUlJUl9UT0QJCSgxIDw8IDMpCisjZGVmaW5lCUlJUl9JSUQyCSgxIDw8IDIpCisjZGVmaW5lCUlJUl9JSUQxCSgxIDw8IDEpCisjZGVmaW5lCUlJUl9JUAkJKDEgPDwgMCkKKworI2RlZmluZQlGQ1JfSVRMMgkoMSA8PCA3KQorI2RlZmluZQlGQ1JfSVRMMQkoMSA8PCA2KQorI2RlZmluZQlGQ1JfUkVTRVRURgkoMSA8PCAyKQorI2RlZmluZQlGQ1JfUkVTRVRSRgkoMSA8PCAxKQorI2RlZmluZQlGQ1JfVFJGSUZPRQkoMSA8PCAwKQorI2RlZmluZQlGQ1JfSVRMXzEJMAorI2RlZmluZQlGQ1JfSVRMXzgJKEZDUl9JVEwxKQorI2RlZmluZQlGQ1JfSVRMXzE2CShGQ1JfSVRMMikKKyNkZWZpbmUJRkNSX0lUTF8zMgkoRkNSX0lUTDJ8RkNSX0lUTDEpCisKKyNkZWZpbmUJTENSX0RMQUIJKDEgPDwgNykKKyNkZWZpbmUJTENSX1NCCQkoMSA8PCA2KQorI2RlZmluZQlMQ1JfU1RLWVAJKDEgPDwgNSkKKyNkZWZpbmUJTENSX0VQUwkJKDEgPDwgNCkKKyNkZWZpbmUJTENSX1BFTgkJKDEgPDwgMykKKyNkZWZpbmUJTENSX1NUQgkJKDEgPDwgMikKKyNkZWZpbmUJTENSX1dMUzEJKDEgPDwgMSkKKyNkZWZpbmUJTENSX1dMUzAJKDEgPDwgMCkKKworI2RlZmluZQlMU1JfRklGT0UJKDEgPDwgNykKKyNkZWZpbmUJTFNSX1RFTVQJKDEgPDwgNikKKyNkZWZpbmUJTFNSX1REUlEJKDEgPDwgNSkKKyNkZWZpbmUJTFNSX0JJCQkoMSA8PCA0KQorI2RlZmluZQlMU1JfRkUJCSgxIDw8IDMpCisjZGVmaW5lCUxTUl9QRQkJKDEgPDwgMikKKyNkZWZpbmUJTFNSX09FCQkoMSA8PCAxKQorI2RlZmluZQlMU1JfRFIJCSgxIDw8IDApCisKKyNkZWZpbmUJTUNSX0xPT1AJKDEgPDwgNCkKKyNkZWZpbmUJTUNSX09VVDIJKDEgPDwgMykKKyNkZWZpbmUJTUNSX09VVDEJKDEgPDwgMikKKyNkZWZpbmUJTUNSX1JUUwkJKDEgPDwgMSkKKyNkZWZpbmUJTUNSX0RUUgkJKDEgPDwgMCkKKworI2RlZmluZQlNU1JfRENECQkoMSA8PCA3KQorI2RlZmluZQlNU1JfUkkJCSgxIDw8IDYpCisjZGVmaW5lCU1TUl9EU1IJCSgxIDw8IDUpCisjZGVmaW5lCU1TUl9DVFMJCSgxIDw8IDQpCisjZGVmaW5lCU1TUl9ERENECSgxIDw8IDMpCisjZGVmaW5lCU1TUl9URVJJCSgxIDw8IDIpCisjZGVmaW5lCU1TUl9ERFNSCSgxIDw8IDEpCisjZGVmaW5lCU1TUl9EQ1RTCSgxIDw8IDApCisKKyNlbmRpZgkvKiBfX1JFR1NfVUFSVF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FybXY3LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcm12Ny5oCmluZGV4IDlhZGM1NjMuLmFkOWE4NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FybXY3LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJtdjcuaApAQCAtMzEsNiArMzEsOSBAQAogI2RlZmluZSBNSURSX0NPUlRFWF9BOV9SMVAzCTB4NDExRkMwOTMKICNkZWZpbmUgTUlEUl9DT1JURVhfQTlfUjJQMTAJMHg0MTJGQzA5QQogCisvKiBDb3J0ZXgtQTE1IHJldmlzaW9ucyAqLworI2RlZmluZSBNSURSX0NPUlRFWF9BMTVfUjBQMAkweDQxMEZDMEYwCisKIC8qIENDU0lEUiAqLwogI2RlZmluZSBDQ1NJRFJfTElORV9TSVpFX09GRlNFVAkJMAogI2RlZmluZSBDQ1NJRFJfTElORV9TSVpFX01BU0sJCTB4NwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZW1pZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZW1pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YzdkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbWlmLmgKQEAgLTAsMCArMSwxMDM1IEBACisvKgorICogT01BUDQ0eHggRU1JRiBoZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIEFuZWVzaCBWIDxhbmVlc2hAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfRU1JRl9IXworI2RlZmluZSBfRU1JRl9IXworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGNvbW1vbi5oPgorCisvKiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRU1JRjFfQkFTRQkJCQkweDRjMDAwMDAwCisjZGVmaW5lIEVNSUYyX0JBU0UJCQkJMHg0ZDAwMDAwMAorCisvKiBSZWdpc3RlcnMgc2hpZnRzIGFuZCBtYXNrcyAqLworCisvKiBFTUlGX01PRF9JRF9SRVYgKi8KKyNkZWZpbmUgRU1JRl9SRUdfU0NIRU1FX1NISUZUCQkJMzAKKyNkZWZpbmUgRU1JRl9SRUdfU0NIRU1FX01BU0sJCQkoMHgzIDw8IDMwKQorI2RlZmluZSBFTUlGX1JFR19NT0RVTEVfSURfU0hJRlQJCQkxNgorI2RlZmluZSBFTUlGX1JFR19NT0RVTEVfSURfTUFTSwkJCSgweGZmZiA8PCAxNikKKyNkZWZpbmUgRU1JRl9SRUdfUlRMX1ZFUlNJT05fU0hJRlQJCQkxMQorI2RlZmluZSBFTUlGX1JFR19SVExfVkVSU0lPTl9NQVNLCQkJKDB4MWYgPDwgMTEpCisjZGVmaW5lIEVNSUZfUkVHX01BSk9SX1JFVklTSU9OX1NISUZUCQk4CisjZGVmaW5lIEVNSUZfUkVHX01BSk9SX1JFVklTSU9OX01BU0sJCSgweDcgPDwgOCkKKyNkZWZpbmUgRU1JRl9SRUdfTUlOT1JfUkVWSVNJT05fU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfTUlOT1JfUkVWSVNJT05fTUFTSwkJKDB4M2YgPDwgMCkKKworLyogU1RBVFVTICovCisjZGVmaW5lIEVNSUZfUkVHX0JFX1NISUZUCQkJCTMxCisjZGVmaW5lIEVNSUZfUkVHX0JFX01BU0sJCQkJKDEgPDwgMzEpCisjZGVmaW5lIEVNSUZfUkVHX0RVQUxfQ0xLX01PREVfU0hJRlQJCTMwCisjZGVmaW5lIEVNSUZfUkVHX0RVQUxfQ0xLX01PREVfTUFTSwkJCSgxIDw8IDMwKQorI2RlZmluZSBFTUlGX1JFR19GQVNUX0lOSVRfU0hJRlQJCQkyOQorI2RlZmluZSBFTUlGX1JFR19GQVNUX0lOSVRfTUFTSwkJCSgxIDw8IDI5KQorI2RlZmluZSBFTUlGX1JFR19QSFlfRExMX1JFQURZX1NISUZUCQkyCisjZGVmaW5lIEVNSUZfUkVHX1BIWV9ETExfUkVBRFlfTUFTSwkJCSgxIDw8IDIpCisKKy8qIFNEUkFNX0NPTkZJRyAqLworI2RlZmluZSBFTUlGX1JFR19TRFJBTV9UWVBFX1NISUZUCQkJMjkKKyNkZWZpbmUgRU1JRl9SRUdfU0RSQU1fVFlQRV9NQVNLCQkJKDB4NyA8PCAyOSkKKyNkZWZpbmUgRU1JRl9SRUdfSUJBTktfUE9TX1NISUZUCQkJMjcKKyNkZWZpbmUgRU1JRl9SRUdfSUJBTktfUE9TX01BU0sJCQkoMHgzIDw8IDI3KQorI2RlZmluZSBFTUlGX1JFR19ERFJfVEVSTV9TSElGVAkJCTI0CisjZGVmaW5lIEVNSUZfUkVHX0REUl9URVJNX01BU0sJCQkoMHg3IDw8IDI0KQorI2RlZmluZSBFTUlGX1JFR19ERFIyX0REUVNfU0hJRlQJCQkyMworI2RlZmluZSBFTUlGX1JFR19ERFIyX0REUVNfTUFTSwkJCSgxIDw8IDIzKQorI2RlZmluZSBFTUlGX1JFR19EWU5fT0RUX1NISUZUCQkJMjEKKyNkZWZpbmUgRU1JRl9SRUdfRFlOX09EVF9NQVNLCQkJKDB4MyA8PCAyMSkKKyNkZWZpbmUgRU1JRl9SRUdfRERSX0RJU0FCTEVfRExMX1NISUZUCQkyMAorI2RlZmluZSBFTUlGX1JFR19ERFJfRElTQUJMRV9ETExfTUFTSwkJKDEgPDwgMjApCisjZGVmaW5lIEVNSUZfUkVHX1NEUkFNX0RSSVZFX1NISUZUCQkJMTgKKyNkZWZpbmUgRU1JRl9SRUdfU0RSQU1fRFJJVkVfTUFTSwkJCSgweDMgPDwgMTgpCisjZGVmaW5lIEVNSUZfUkVHX0NXTF9TSElGVAkJCQkxNgorI2RlZmluZSBFTUlGX1JFR19DV0xfTUFTSwkJCQkoMHgzIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19OQVJST1dfTU9ERV9TSElGVAkJCTE0CisjZGVmaW5lIEVNSUZfUkVHX05BUlJPV19NT0RFX01BU0sJCQkoMHgzIDw8IDE0KQorI2RlZmluZSBFTUlGX1JFR19DTF9TSElGVAkJCQkxMAorI2RlZmluZSBFTUlGX1JFR19DTF9NQVNLCQkJCSgweGYgPDwgMTApCisjZGVmaW5lIEVNSUZfUkVHX1JPV1NJWkVfU0hJRlQJCQk3CisjZGVmaW5lIEVNSUZfUkVHX1JPV1NJWkVfTUFTSwkJCSgweDcgPDwgNykKKyNkZWZpbmUgRU1JRl9SRUdfSUJBTktfU0hJRlQJCQk0CisjZGVmaW5lIEVNSUZfUkVHX0lCQU5LX01BU0sJCQkJKDB4NyA8PCA0KQorI2RlZmluZSBFTUlGX1JFR19FQkFOS19TSElGVAkJCTMKKyNkZWZpbmUgRU1JRl9SRUdfRUJBTktfTUFTSwkJCQkoMSA8PCAzKQorI2RlZmluZSBFTUlGX1JFR19QQUdFU0laRV9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUEFHRVNJWkVfTUFTSwkJCSgweDcgPDwgMCkKKworLyogU0RSQU1fQ09ORklHXzIgKi8KKyNkZWZpbmUgRU1JRl9SRUdfQ1MxTlZNRU5fU0hJRlQJCQkzMAorI2RlZmluZSBFTUlGX1JFR19DUzFOVk1FTl9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIEVNSUZfUkVHX0VCQU5LX1BPU19TSElGVAkJCTI3CisjZGVmaW5lIEVNSUZfUkVHX0VCQU5LX1BPU19NQVNLCQkJKDEgPDwgMjcpCisjZGVmaW5lIEVNSUZfUkVHX1JEQk5VTV9TSElGVAkJCTQKKyNkZWZpbmUgRU1JRl9SRUdfUkRCTlVNX01BU0sJCQkoMHgzIDw8IDQpCisjZGVmaW5lIEVNSUZfUkVHX1JEQlNJWkVfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX1JEQlNJWkVfTUFTSwkJCSgweDcgPDwgMCkKKworLyogU0RSQU1fUkVGX0NUUkwgKi8KKyNkZWZpbmUgRU1JRl9SRUdfSU5JVFJFRl9ESVNfU0hJRlQJCQkzMQorI2RlZmluZSBFTUlGX1JFR19JTklUUkVGX0RJU19NQVNLCQkJKDEgPDwgMzEpCisjZGVmaW5lIEVNSUZfUkVHX1NSVF9TSElGVAkJCQkyOQorI2RlZmluZSBFTUlGX1JFR19TUlRfTUFTSwkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgRU1JRl9SRUdfQVNSX1NISUZUCQkJCTI4CisjZGVmaW5lIEVNSUZfUkVHX0FTUl9NQVNLCQkJCSgxIDw8IDI4KQorI2RlZmluZSBFTUlGX1JFR19QQVNSX1NISUZUCQkJCTI0CisjZGVmaW5lIEVNSUZfUkVHX1BBU1JfTUFTSwkJCQkoMHg3IDw8IDI0KQorI2RlZmluZSBFTUlGX1JFR19SRUZSRVNIX1JBVEVfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX1JFRlJFU0hfUkFURV9NQVNLCQkJKDB4ZmZmZiA8PCAwKQorCisvKiBTRFJBTV9SRUZfQ1RSTF9TSERXICovCisjZGVmaW5lIEVNSUZfUkVHX1JFRlJFU0hfUkFURV9TSERXX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX1JFRlJFU0hfUkFURV9TSERXX01BU0sJCSgweGZmZmYgPDwgMCkKKworLyogU0RSQU1fVElNXzEgKi8KKyNkZWZpbmUgRU1JRl9SRUdfVF9SUF9TSElGVAkJCQkyNQorI2RlZmluZSBFTUlGX1JFR19UX1JQX01BU0sJCQkJKDB4ZiA8PCAyNSkKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQ0RfU0hJRlQJCQkyMQorI2RlZmluZSBFTUlGX1JFR19UX1JDRF9NQVNLCQkJCSgweGYgPDwgMjEpCisjZGVmaW5lIEVNSUZfUkVHX1RfV1JfU0hJRlQJCQkJMTcKKyNkZWZpbmUgRU1JRl9SRUdfVF9XUl9NQVNLCQkJCSgweGYgPDwgMTcpCisjZGVmaW5lIEVNSUZfUkVHX1RfUkFTX1NISUZUCQkJMTIKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQVNfTUFTSwkJCQkoMHgxZiA8PCAxMikKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQ19TSElGVAkJCQk2CisjZGVmaW5lIEVNSUZfUkVHX1RfUkNfTUFTSwkJCQkoMHgzZiA8PCA2KQorI2RlZmluZSBFTUlGX1JFR19UX1JSRF9TSElGVAkJCTMKKyNkZWZpbmUgRU1JRl9SRUdfVF9SUkRfTUFTSwkJCQkoMHg3IDw8IDMpCisjZGVmaW5lIEVNSUZfUkVHX1RfV1RSX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19UX1dUUl9NQVNLCQkJCSgweDcgPDwgMCkKKworLyogU0RSQU1fVElNXzFfU0hEVyAqLworI2RlZmluZSBFTUlGX1JFR19UX1JQX1NIRFdfU0hJRlQJCQkyNQorI2RlZmluZSBFTUlGX1JFR19UX1JQX1NIRFdfTUFTSwkJCSgweGYgPDwgMjUpCisjZGVmaW5lIEVNSUZfUkVHX1RfUkNEX1NIRFdfU0hJRlQJCQkyMQorI2RlZmluZSBFTUlGX1JFR19UX1JDRF9TSERXX01BU0sJCQkoMHhmIDw8IDIxKQorI2RlZmluZSBFTUlGX1JFR19UX1dSX1NIRFdfU0hJRlQJCQkxNworI2RlZmluZSBFTUlGX1JFR19UX1dSX1NIRFdfTUFTSwkJCSgweGYgPDwgMTcpCisjZGVmaW5lIEVNSUZfUkVHX1RfUkFTX1NIRFdfU0hJRlQJCQkxMgorI2RlZmluZSBFTUlGX1JFR19UX1JBU19TSERXX01BU0sJCQkoMHgxZiA8PCAxMikKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQ19TSERXX1NISUZUCQkJNgorI2RlZmluZSBFTUlGX1JFR19UX1JDX1NIRFdfTUFTSwkJCSgweDNmIDw8IDYpCisjZGVmaW5lIEVNSUZfUkVHX1RfUlJEX1NIRFdfU0hJRlQJCQkzCisjZGVmaW5lIEVNSUZfUkVHX1RfUlJEX1NIRFdfTUFTSwkJCSgweDcgPDwgMykKKyNkZWZpbmUgRU1JRl9SRUdfVF9XVFJfU0hEV19TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfVF9XVFJfU0hEV19NQVNLCQkJKDB4NyA8PCAwKQorCisvKiBTRFJBTV9USU1fMiAqLworI2RlZmluZSBFTUlGX1JFR19UX1hQX1NISUZUCQkJCTI4CisjZGVmaW5lIEVNSUZfUkVHX1RfWFBfTUFTSwkJCQkoMHg3IDw8IDI4KQorI2RlZmluZSBFTUlGX1JFR19UX09EVF9TSElGVAkJCTI1CisjZGVmaW5lIEVNSUZfUkVHX1RfT0RUX01BU0sJCQkJKDB4NyA8PCAyNSkKKyNkZWZpbmUgRU1JRl9SRUdfVF9YU05SX1NISUZUCQkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfVF9YU05SX01BU0sJCQkoMHgxZmYgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX1RfWFNSRF9TSElGVAkJCTYKKyNkZWZpbmUgRU1JRl9SRUdfVF9YU1JEX01BU0sJCQkoMHgzZmYgPDwgNikKKyNkZWZpbmUgRU1JRl9SRUdfVF9SVFBfU0hJRlQJCQkzCisjZGVmaW5lIEVNSUZfUkVHX1RfUlRQX01BU0sJCQkJKDB4NyA8PCAzKQorI2RlZmluZSBFTUlGX1JFR19UX0NLRV9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfVF9DS0VfTUFTSwkJCQkoMHg3IDw8IDApCisKKy8qIFNEUkFNX1RJTV8yX1NIRFcgKi8KKyNkZWZpbmUgRU1JRl9SRUdfVF9YUF9TSERXX1NISUZUCQkJMjgKKyNkZWZpbmUgRU1JRl9SRUdfVF9YUF9TSERXX01BU0sJCQkoMHg3IDw8IDI4KQorI2RlZmluZSBFTUlGX1JFR19UX09EVF9TSERXX1NISUZUCQkJMjUKKyNkZWZpbmUgRU1JRl9SRUdfVF9PRFRfU0hEV19NQVNLCQkJKDB4NyA8PCAyNSkKKyNkZWZpbmUgRU1JRl9SRUdfVF9YU05SX1NIRFdfU0hJRlQJCQkxNgorI2RlZmluZSBFTUlGX1JFR19UX1hTTlJfU0hEV19NQVNLCQkJKDB4MWZmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19UX1hTUkRfU0hEV19TSElGVAkJCTYKKyNkZWZpbmUgRU1JRl9SRUdfVF9YU1JEX1NIRFdfTUFTSwkJCSgweDNmZiA8PCA2KQorI2RlZmluZSBFTUlGX1JFR19UX1JUUF9TSERXX1NISUZUCQkJMworI2RlZmluZSBFTUlGX1JFR19UX1JUUF9TSERXX01BU0sJCQkoMHg3IDw8IDMpCisjZGVmaW5lIEVNSUZfUkVHX1RfQ0tFX1NIRFdfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX1RfQ0tFX1NIRFdfTUFTSwkJCSgweDcgPDwgMCkKKworLyogU0RSQU1fVElNXzMgKi8KKyNkZWZpbmUgRU1JRl9SRUdfVF9DS0VTUl9TSElGVAkJCTIxCisjZGVmaW5lIEVNSUZfUkVHX1RfQ0tFU1JfTUFTSwkJCSgweDcgPDwgMjEpCisjZGVmaW5lIEVNSUZfUkVHX1pRX1pRQ1NfU0hJRlQJCQkxNQorI2RlZmluZSBFTUlGX1JFR19aUV9aUUNTX01BU0sJCQkoMHgzZiA8PCAxNSkKKyNkZWZpbmUgRU1JRl9SRUdfVF9URFFTQ0tNQVhfU0hJRlQJCQkxMworI2RlZmluZSBFTUlGX1JFR19UX1REUVNDS01BWF9NQVNLCQkJKDB4MyA8PCAxMykKKyNkZWZpbmUgRU1JRl9SRUdfVF9SRkNfU0hJRlQJCQk0CisjZGVmaW5lIEVNSUZfUkVHX1RfUkZDX01BU0sJCQkJKDB4MWZmIDw8IDQpCisjZGVmaW5lIEVNSUZfUkVHX1RfUkFTX01BWF9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfVF9SQVNfTUFYX01BU0sJCQkoMHhmIDw8IDApCisKKy8qIFNEUkFNX1RJTV8zX1NIRFcgKi8KKyNkZWZpbmUgRU1JRl9SRUdfVF9DS0VTUl9TSERXX1NISUZUCQkJMjEKKyNkZWZpbmUgRU1JRl9SRUdfVF9DS0VTUl9TSERXX01BU0sJCQkoMHg3IDw8IDIxKQorI2RlZmluZSBFTUlGX1JFR19aUV9aUUNTX1NIRFdfU0hJRlQJCQkxNQorI2RlZmluZSBFTUlGX1JFR19aUV9aUUNTX1NIRFdfTUFTSwkJCSgweDNmIDw8IDE1KQorI2RlZmluZSBFTUlGX1JFR19UX1REUVNDS01BWF9TSERXX1NISUZUCQkxMworI2RlZmluZSBFTUlGX1JFR19UX1REUVNDS01BWF9TSERXX01BU0sJCSgweDMgPDwgMTMpCisjZGVmaW5lIEVNSUZfUkVHX1RfUkZDX1NIRFdfU0hJRlQJCQk0CisjZGVmaW5lIEVNSUZfUkVHX1RfUkZDX1NIRFdfTUFTSwkJCSgweDFmZiA8PCA0KQorI2RlZmluZSBFTUlGX1JFR19UX1JBU19NQVhfU0hEV19TSElGVAkJMAorI2RlZmluZSBFTUlGX1JFR19UX1JBU19NQVhfU0hEV19NQVNLCQkoMHhmIDw8IDApCisKKy8qIExQRERSMl9OVk1fVElNICovCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1hQX1NISUZUCQkJMjgKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfWFBfTUFTSwkJCSgweDcgPDwgMjgpCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1dUUl9TSElGVAkJCTI0CisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1dUUl9NQVNLCQkJKDB4NyA8PCAyNCkKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfUlBfU0hJRlQJCQkyMAorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SUF9NQVNLCQkJKDB4ZiA8PCAyMCkKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfV1JBX1NISUZUCQkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfV1JBX01BU0sJCQkoMHhmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SUkRfU0hJRlQJCQk4CisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JSRF9NQVNLCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfUkNETUlOX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SQ0RNSU5fTUFTSwkJCSgweGZmIDw8IDApCisKKy8qIExQRERSMl9OVk1fVElNX1NIRFcgKi8KKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfWFBfU0hEV19TSElGVAkJMjgKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfWFBfU0hEV19NQVNLCQkJKDB4NyA8PCAyOCkKKyNkZWZpbmUgRU1JRl9SRUdfTlZNX1RfV1RSX1NIRFdfU0hJRlQJCTI0CisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1dUUl9TSERXX01BU0sJCSgweDcgPDwgMjQpCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JQX1NIRFdfU0hJRlQJCTIwCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1JQX1NIRFdfTUFTSwkJCSgweGYgPDwgMjApCisjZGVmaW5lIEVNSUZfUkVHX05WTV9UX1dSQV9TSERXX1NISUZUCQkxNgorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9XUkFfU0hEV19NQVNLCQkoMHhmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SUkRfU0hEV19TSElGVAkJOAorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SUkRfU0hEV19NQVNLCQkoMHhmZiA8PCA4KQorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SQ0RNSU5fU0hEV19TSElGVAkJMAorI2RlZmluZSBFTUlGX1JFR19OVk1fVF9SQ0RNSU5fU0hEV19NQVNLCQkoMHhmZiA8PCAwKQorCisvKiBQV1JfTUdNVF9DVFJMICovCisjZGVmaW5lIEVNSUZfUkVHX0lETEVNT0RFX1NISUZUCQkJMzAKKyNkZWZpbmUgRU1JRl9SRUdfSURMRU1PREVfTUFTSwkJCSgweDMgPDwgMzApCisjZGVmaW5lIEVNSUZfUkVHX1BEX1RJTV9TSElGVAkJCTEyCisjZGVmaW5lIEVNSUZfUkVHX1BEX1RJTV9NQVNLCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgRU1JRl9SRUdfRFBEX0VOX1NISUZUCQkJMTEKKyNkZWZpbmUgRU1JRl9SRUdfRFBEX0VOX01BU0sJCQkoMSA8PCAxMSkKKyNkZWZpbmUgRU1JRl9SRUdfTFBfTU9ERV9TSElGVAkJCTgKKyNkZWZpbmUgRU1JRl9SRUdfTFBfTU9ERV9NQVNLCQkJKDB4NyA8PCA4KQorI2RlZmluZSBFTUlGX1JFR19TUl9USU1fU0hJRlQJCQk0CisjZGVmaW5lIEVNSUZfUkVHX1NSX1RJTV9NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZSBFTUlGX1JFR19DU19USU1fU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX0NTX1RJTV9NQVNLCQkJKDB4ZiA8PCAwKQorCisvKiBQV1JfTUdNVF9DVFJMX1NIRFcgKi8KKyNkZWZpbmUgRU1JRl9SRUdfUERfVElNX1NIRFdfU0hJRlQJCQk4CisjZGVmaW5lIEVNSUZfUkVHX1BEX1RJTV9TSERXX01BU0sJCQkoMHhmIDw8IDgpCisjZGVmaW5lIEVNSUZfUkVHX1NSX1RJTV9TSERXX1NISUZUCQkJNAorI2RlZmluZSBFTUlGX1JFR19TUl9USU1fU0hEV19NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZSBFTUlGX1JFR19DU19USU1fU0hEV19TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfQ1NfVElNX1NIRFdfTUFTSwkJCSgweGYgPDwgMCkKKworLyogTFBERFIyX01PREVfUkVHX0RBVEEgKi8KKyNkZWZpbmUgRU1JRl9SRUdfVkFMVUVfMF9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfVkFMVUVfMF9NQVNLCQkJKDB4N2YgPDwgMCkKKworLyogTFBERFIyX01PREVfUkVHX0NGRyAqLworI2RlZmluZSBFTUlGX1JFR19DU19TSElGVAkJCQkzMQorI2RlZmluZSBFTUlGX1JFR19DU19NQVNLCQkJCSgxIDw8IDMxKQorI2RlZmluZSBFTUlGX1JFR19SRUZSRVNIX0VOX1NISUZUCQkJMzAKKyNkZWZpbmUgRU1JRl9SRUdfUkVGUkVTSF9FTl9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIEVNSUZfUkVHX0FERFJFU1NfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX0FERFJFU1NfTUFTSwkJCSgweGZmIDw8IDApCisKKy8qIE9DUF9DT05GSUcgKi8KKyNkZWZpbmUgRU1JRl9SRUdfU1lTX1RIUkVTSF9NQVhfU0hJRlQJCTI0CisjZGVmaW5lIEVNSUZfUkVHX1NZU19USFJFU0hfTUFYX01BU0sJCSgweGYgPDwgMjQpCisjZGVmaW5lIEVNSUZfUkVHX01QVV9USFJFU0hfTUFYX1NISUZUCQkyMAorI2RlZmluZSBFTUlGX1JFR19NUFVfVEhSRVNIX01BWF9NQVNLCQkoMHhmIDw8IDIwKQorI2RlZmluZSBFTUlGX1JFR19MTF9USFJFU0hfTUFYX1NISUZUCQkxNgorI2RlZmluZSBFTUlGX1JFR19MTF9USFJFU0hfTUFYX01BU0sJCQkoMHhmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19QUl9PTERfQ09VTlRfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX1BSX09MRF9DT1VOVF9NQVNLCQkJKDB4ZmYgPDwgMCkKKworLyogT0NQX0NGR19WQUxfMSAqLworI2RlZmluZSBFTUlGX1JFR19TWVNfQlVTX1dJRFRIX1NISUZUCQkzMAorI2RlZmluZSBFTUlGX1JFR19TWVNfQlVTX1dJRFRIX01BU0sJCQkoMHgzIDw8IDMwKQorI2RlZmluZSBFTUlGX1JFR19MTF9CVVNfV0lEVEhfU0hJRlQJCQkyOAorI2RlZmluZSBFTUlGX1JFR19MTF9CVVNfV0lEVEhfTUFTSwkJCSgweDMgPDwgMjgpCisjZGVmaW5lIEVNSUZfUkVHX1dSX0ZJRk9fREVQVEhfU0hJRlQJCTgKKyNkZWZpbmUgRU1JRl9SRUdfV1JfRklGT19ERVBUSF9NQVNLCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgRU1JRl9SRUdfQ01EX0ZJRk9fREVQVEhfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfQ01EX0ZJRk9fREVQVEhfTUFTSwkJKDB4ZmYgPDwgMCkKKworLyogT0NQX0NGR19WQUxfMiAqLworI2RlZmluZSBFTUlGX1JFR19SUkVHX0ZJRk9fREVQVEhfU0hJRlQJCTE2CisjZGVmaW5lIEVNSUZfUkVHX1JSRUdfRklGT19ERVBUSF9NQVNLCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgRU1JRl9SRUdfUlNEX0ZJRk9fREVQVEhfU0hJRlQJCTgKKyNkZWZpbmUgRU1JRl9SRUdfUlNEX0ZJRk9fREVQVEhfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgRU1JRl9SRUdfUkNNRF9GSUZPX0RFUFRIX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX1JDTURfRklGT19ERVBUSF9NQVNLCQkoMHhmZiA8PCAwKQorCisvKiBJT0RGVF9UTEdDICovCisjZGVmaW5lIEVNSUZfUkVHX1RMRUNfU0hJRlQJCQkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfVExFQ19NQVNLCQkJCSgweGZmZmYgPDwgMTYpCisjZGVmaW5lIEVNSUZfUkVHX01UX1NISUZUCQkJCTE0CisjZGVmaW5lIEVNSUZfUkVHX01UX01BU0sJCQkJKDEgPDwgMTQpCisjZGVmaW5lIEVNSUZfUkVHX0FDVF9DQVBfRU5fU0hJRlQJCQkxMworI2RlZmluZSBFTUlGX1JFR19BQ1RfQ0FQX0VOX01BU0sJCQkoMSA8PCAxMykKKyNkZWZpbmUgRU1JRl9SRUdfT1BHX0xEX1NISUZUCQkJMTIKKyNkZWZpbmUgRU1JRl9SRUdfT1BHX0xEX01BU0sJCQkoMSA8PCAxMikKKyNkZWZpbmUgRU1JRl9SRUdfUkVTRVRfUEhZX1NISUZUCQkJMTAKKyNkZWZpbmUgRU1JRl9SRUdfUkVTRVRfUEhZX01BU0sJCQkoMSA8PCAxMCkKKyNkZWZpbmUgRU1JRl9SRUdfTU1TX1NISUZUCQkJCTgKKyNkZWZpbmUgRU1JRl9SRUdfTU1TX01BU0sJCQkJKDEgPDwgOCkKKyNkZWZpbmUgRU1JRl9SRUdfTUNfU0hJRlQJCQkJNAorI2RlZmluZSBFTUlGX1JFR19NQ19NQVNLCQkJCSgweDMgPDwgNCkKKyNkZWZpbmUgRU1JRl9SRUdfUENfU0hJRlQJCQkJMQorI2RlZmluZSBFTUlGX1JFR19QQ19NQVNLCQkJCSgweDcgPDwgMSkKKyNkZWZpbmUgRU1JRl9SRUdfVE1fU0hJRlQJCQkJMAorI2RlZmluZSBFTUlGX1JFR19UTV9NQVNLCQkJCSgxIDw8IDApCisKKy8qIElPREZUX0NUUkxfTUlTUl9SU0xUICovCisjZGVmaW5lIEVNSUZfUkVHX0RRTV9UTE1SX1NISUZUCQkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfRFFNX1RMTVJfTUFTSwkJCSgweDNmZiA8PCAxNikKKyNkZWZpbmUgRU1JRl9SRUdfQ1RMX1RMTVJfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX0NUTF9UTE1SX01BU0sJCQkoMHg3ZmYgPDwgMCkKKworLyogSU9ERlRfQUREUl9NSVNSX1JTTFQgKi8KKyNkZWZpbmUgRU1JRl9SRUdfQUREUl9UTE1SX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19BRERSX1RMTVJfTUFTSwkJCSgweDFmZmZmZiA8PCAwKQorCisvKiBJT0RGVF9EQVRBX01JU1JfUlNMVF8xICovCisjZGVmaW5lIEVNSUZfUkVHX0RBVEFfVExNUl8zMV8wX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX0RBVEFfVExNUl8zMV8wX01BU0sJCSgweGZmZmZmZmZmIDw8IDApCisKKy8qIElPREZUX0RBVEFfTUlTUl9SU0xUXzIgKi8KKyNkZWZpbmUgRU1JRl9SRUdfREFUQV9UTE1SXzYzXzMyX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX0RBVEFfVExNUl82M18zMl9NQVNLCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBJT0RGVF9EQVRBX01JU1JfUlNMVF8zICovCisjZGVmaW5lIEVNSUZfUkVHX0RBVEFfVExNUl82Nl82NF9TSElGVAkJMAorI2RlZmluZSBFTUlGX1JFR19EQVRBX1RMTVJfNjZfNjRfTUFTSwkJKDB4NyA8PCAwKQorCisvKiBQRVJGX0NOVF8xICovCisjZGVmaW5lIEVNSUZfUkVHX0NPVU5URVIxX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19DT1VOVEVSMV9NQVNLCQkJKDB4ZmZmZmZmZmYgPDwgMCkKKworLyogUEVSRl9DTlRfMiAqLworI2RlZmluZSBFTUlGX1JFR19DT1VOVEVSMl9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfQ09VTlRFUjJfTUFTSwkJCSgweGZmZmZmZmZmIDw8IDApCisKKy8qIFBFUkZfQ05UX0NGRyAqLworI2RlZmluZSBFTUlGX1JFR19DTlRSMl9NQ09OTklEX0VOX1NISUZUCQkzMQorI2RlZmluZSBFTUlGX1JFR19DTlRSMl9NQ09OTklEX0VOX01BU0sJCSgxIDw8IDMxKQorI2RlZmluZSBFTUlGX1JFR19DTlRSMl9SRUdJT05fRU5fU0hJRlQJCTMwCisjZGVmaW5lIEVNSUZfUkVHX0NOVFIyX1JFR0lPTl9FTl9NQVNLCQkoMSA8PCAzMCkKKyNkZWZpbmUgRU1JRl9SRUdfQ05UUjJfQ0ZHX1NISUZUCQkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfQ05UUjJfQ0ZHX01BU0sJCQkoMHhmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19DTlRSMV9NQ09OTklEX0VOX1NISUZUCQkxNQorI2RlZmluZSBFTUlGX1JFR19DTlRSMV9NQ09OTklEX0VOX01BU0sJCSgxIDw8IDE1KQorI2RlZmluZSBFTUlGX1JFR19DTlRSMV9SRUdJT05fRU5fU0hJRlQJCTE0CisjZGVmaW5lIEVNSUZfUkVHX0NOVFIxX1JFR0lPTl9FTl9NQVNLCQkoMSA8PCAxNCkKKyNkZWZpbmUgRU1JRl9SRUdfQ05UUjFfQ0ZHX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19DTlRSMV9DRkdfTUFTSwkJCSgweGYgPDwgMCkKKworLyogUEVSRl9DTlRfU0VMICovCisjZGVmaW5lIEVNSUZfUkVHX01DT05OSUQyX1NISUZUCQkJMjQKKyNkZWZpbmUgRU1JRl9SRUdfTUNPTk5JRDJfTUFTSwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBFTUlGX1JFR19SRUdJT05fU0VMMl9TSElGVAkJCTE2CisjZGVmaW5lIEVNSUZfUkVHX1JFR0lPTl9TRUwyX01BU0sJCQkoMHgzIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19NQ09OTklEMV9TSElGVAkJCTgKKyNkZWZpbmUgRU1JRl9SRUdfTUNPTk5JRDFfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lIEVNSUZfUkVHX1JFR0lPTl9TRUwxX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19SRUdJT05fU0VMMV9NQVNLCQkJKDB4MyA8PCAwKQorCisvKiBQRVJGX0NOVF9USU0gKi8KKyNkZWZpbmUgRU1JRl9SRUdfVE9UQUxfVElNRV9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfVE9UQUxfVElNRV9NQVNLCQkJKDB4ZmZmZmZmZmYgPDwgMCkKKworLyogUkVBRF9JRExFX0NUUkwgKi8KKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9JRExFX0xFTl9TSElGVAkJMTYKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9JRExFX0xFTl9NQVNLCQkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9JRExFX0lOVEVSVkFMX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX1JFQURfSURMRV9JTlRFUlZBTF9NQVNLCQkoMHgxZmYgPDwgMCkKKworLyogUkVBRF9JRExFX0NUUkxfU0hEVyAqLworI2RlZmluZSBFTUlGX1JFR19SRUFEX0lETEVfTEVOX1NIRFdfU0hJRlQJCTE2CisjZGVmaW5lIEVNSUZfUkVHX1JFQURfSURMRV9MRU5fU0hEV19NQVNLCQkoMHhmIDw8IDE2KQorI2RlZmluZSBFTUlGX1JFR19SRUFEX0lETEVfSU5URVJWQUxfU0hEV19TSElGVAkwCisjZGVmaW5lIEVNSUZfUkVHX1JFQURfSURMRV9JTlRFUlZBTF9TSERXX01BU0sJKDB4MWZmIDw8IDApCisKKy8qIElSUV9FT0kgKi8KKyNkZWZpbmUgRU1JRl9SRUdfRU9JX1NISUZUCQkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfRU9JX01BU0sJCQkJKDEgPDwgMCkKKworLyogSVJRU1RBVFVTX1JBV19TWVMgKi8KKyNkZWZpbmUgRU1JRl9SRUdfRE5WX1NZU19TSElGVAkJCTIKKyNkZWZpbmUgRU1JRl9SRUdfRE5WX1NZU19NQVNLCQkJKDEgPDwgMikKKyNkZWZpbmUgRU1JRl9SRUdfVEFfU1lTX1NISUZUCQkJMQorI2RlZmluZSBFTUlGX1JFR19UQV9TWVNfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIEVNSUZfUkVHX0VSUl9TWVNfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX0VSUl9TWVNfTUFTSwkJCSgxIDw8IDApCisKKy8qIElSUVNUQVRVU19SQVdfTEwgKi8KKyNkZWZpbmUgRU1JRl9SRUdfRE5WX0xMX1NISUZUCQkJMgorI2RlZmluZSBFTUlGX1JFR19ETlZfTExfTUFTSwkJCSgxIDw8IDIpCisjZGVmaW5lIEVNSUZfUkVHX1RBX0xMX1NISUZUCQkJMQorI2RlZmluZSBFTUlGX1JFR19UQV9MTF9NQVNLCQkJCSgxIDw8IDEpCisjZGVmaW5lIEVNSUZfUkVHX0VSUl9MTF9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfRVJSX0xMX01BU0sJCQkoMSA8PCAwKQorCisvKiBJUlFTVEFUVVNfU1lTICovCisKKy8qIElSUVNUQVRVU19MTCAqLworCisvKiBJUlFFTkFCTEVfU0VUX1NZUyAqLworI2RlZmluZSBFTUlGX1JFR19FTl9ETlZfU1lTX1NISUZUCQkJMgorI2RlZmluZSBFTUlGX1JFR19FTl9ETlZfU1lTX01BU0sJCQkoMSA8PCAyKQorI2RlZmluZSBFTUlGX1JFR19FTl9UQV9TWVNfU0hJRlQJCQkxCisjZGVmaW5lIEVNSUZfUkVHX0VOX1RBX1NZU19NQVNLCQkJKDEgPDwgMSkKKyNkZWZpbmUgRU1JRl9SRUdfRU5fRVJSX1NZU19TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfRU5fRVJSX1NZU19NQVNLCQkJKDEgPDwgMCkKKworLyogSVJRRU5BQkxFX1NFVF9MTCAqLworI2RlZmluZSBFTUlGX1JFR19FTl9ETlZfTExfU0hJRlQJCQkyCisjZGVmaW5lIEVNSUZfUkVHX0VOX0ROVl9MTF9NQVNLCQkJKDEgPDwgMikKKyNkZWZpbmUgRU1JRl9SRUdfRU5fVEFfTExfU0hJRlQJCQkxCisjZGVmaW5lIEVNSUZfUkVHX0VOX1RBX0xMX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBFTUlGX1JFR19FTl9FUlJfTExfU0hJRlQJCQkwCisjZGVmaW5lIEVNSUZfUkVHX0VOX0VSUl9MTF9NQVNLCQkJKDEgPDwgMCkKKworLyogSVJRRU5BQkxFX0NMUl9TWVMgKi8KKworLyogSVJRRU5BQkxFX0NMUl9MTCAqLworCisvKiBaUV9DT05GSUcgKi8KKyNkZWZpbmUgRU1JRl9SRUdfWlFfQ1MxRU5fU0hJRlQJCQkzMQorI2RlZmluZSBFTUlGX1JFR19aUV9DUzFFTl9NQVNLCQkJKDEgPDwgMzEpCisjZGVmaW5lIEVNSUZfUkVHX1pRX0NTMEVOX1NISUZUCQkJMzAKKyNkZWZpbmUgRU1JRl9SRUdfWlFfQ1MwRU5fTUFTSwkJCSgxIDw8IDMwKQorI2RlZmluZSBFTUlGX1JFR19aUV9EVUFMQ0FMRU5fU0hJRlQJCQkyOQorI2RlZmluZSBFTUlGX1JFR19aUV9EVUFMQ0FMRU5fTUFTSwkJCSgxIDw8IDI5KQorI2RlZmluZSBFTUlGX1JFR19aUV9TRkVYSVRFTl9TSElGVAkJCTI4CisjZGVmaW5lIEVNSUZfUkVHX1pRX1NGRVhJVEVOX01BU0sJCQkoMSA8PCAyOCkKKyNkZWZpbmUgRU1JRl9SRUdfWlFfWlFJTklUX01VTFRfU0hJRlQJCTE4CisjZGVmaW5lIEVNSUZfUkVHX1pRX1pRSU5JVF9NVUxUX01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lIEVNSUZfUkVHX1pRX1pRQ0xfTVVMVF9TSElGVAkJCTE2CisjZGVmaW5lIEVNSUZfUkVHX1pRX1pRQ0xfTVVMVF9NQVNLCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUgRU1JRl9SRUdfWlFfUkVGSU5URVJWQUxfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfWlFfUkVGSU5URVJWQUxfTUFTSwkJKDB4ZmZmZiA8PCAwKQorCisvKiBURU1QX0FMRVJUX0NPTkZJRyAqLworI2RlZmluZSBFTUlGX1JFR19UQV9DUzFFTl9TSElGVAkJCTMxCisjZGVmaW5lIEVNSUZfUkVHX1RBX0NTMUVOX01BU0sJCQkoMSA8PCAzMSkKKyNkZWZpbmUgRU1JRl9SRUdfVEFfQ1MwRU5fU0hJRlQJCQkzMAorI2RlZmluZSBFTUlGX1JFR19UQV9DUzBFTl9NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIEVNSUZfUkVHX1RBX1NGRVhJVEVOX1NISUZUCQkJMjgKKyNkZWZpbmUgRU1JRl9SRUdfVEFfU0ZFWElURU5fTUFTSwkJCSgxIDw8IDI4KQorI2RlZmluZSBFTUlGX1JFR19UQV9ERVZXRFRfU0hJRlQJCQkyNgorI2RlZmluZSBFTUlGX1JFR19UQV9ERVZXRFRfTUFTSwkJCSgweDMgPDwgMjYpCisjZGVmaW5lIEVNSUZfUkVHX1RBX0RFVkNOVF9TSElGVAkJCTI0CisjZGVmaW5lIEVNSUZfUkVHX1RBX0RFVkNOVF9NQVNLCQkJKDB4MyA8PCAyNCkKKyNkZWZpbmUgRU1JRl9SRUdfVEFfUkVGSU5URVJWQUxfU0hJRlQJCTAKKyNkZWZpbmUgRU1JRl9SRUdfVEFfUkVGSU5URVJWQUxfTUFTSwkJKDB4M2ZmZmZmIDw8IDApCisKKy8qIE9DUF9FUlJfTE9HICovCisjZGVmaW5lIEVNSUZfUkVHX01BRERSU1BBQ0VfU0hJRlQJCQkxNAorI2RlZmluZSBFTUlGX1JFR19NQUREUlNQQUNFX01BU0sJCQkoMHgzIDw8IDE0KQorI2RlZmluZSBFTUlGX1JFR19NQlVSU1RTRVFfU0hJRlQJCQkxMQorI2RlZmluZSBFTUlGX1JFR19NQlVSU1RTRVFfTUFTSwkJCSgweDcgPDwgMTEpCisjZGVmaW5lIEVNSUZfUkVHX01DTURfU0hJRlQJCQkJOAorI2RlZmluZSBFTUlGX1JFR19NQ01EX01BU0sJCQkJKDB4NyA8PCA4KQorI2RlZmluZSBFTUlGX1JFR19NQ09OTklEX1NISUZUCQkJMAorI2RlZmluZSBFTUlGX1JFR19NQ09OTklEX01BU0sJCQkoMHhmZiA8PCAwKQorCisvKiBERFJfUEhZX0NUUkxfMSAqLworI2RlZmluZSBFTUlGX1JFR19ERFJfUEhZX0NUUkxfMV9TSElGVAkJNAorI2RlZmluZSBFTUlGX1JFR19ERFJfUEhZX0NUUkxfMV9NQVNLCQkoMHhmZmZmZmZmIDw8IDQpCisjZGVmaW5lIEVNSUZfUkVHX1JFQURfTEFURU5DWV9TSElGVAkJCTAKKyNkZWZpbmUgRU1JRl9SRUdfUkVBRF9MQVRFTkNZX01BU0sJCQkoMHhmIDw8IDApCisjZGVmaW5lIEVNSUZfUkVHX0RMTF9TTEFWRV9ETFlfQ1RSTF9TSElGVAkJNAorI2RlZmluZSBFTUlGX1JFR19ETExfU0xBVkVfRExZX0NUUkxfTUFTSwkJKDB4RkYgPDwgNCkKKyNkZWZpbmUgRU1JRl9FTUlGX0REUl9QSFlfQ1RSTF8xX0JBU0VfVkFMX1NISUZUCTEyCisjZGVmaW5lIEVNSUZfRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTF9NQVNLCSgweEZGRkZGIDw8IDEyKQorCisvKiBERFJfUEhZX0NUUkxfMV9TSERXICovCisjZGVmaW5lIEVNSUZfUkVHX0REUl9QSFlfQ1RSTF8xX1NIRFdfU0hJRlQJCTQKKyNkZWZpbmUgRU1JRl9SRUdfRERSX1BIWV9DVFJMXzFfU0hEV19NQVNLCQkoMHhmZmZmZmZmIDw8IDQpCisjZGVmaW5lIEVNSUZfUkVHX1JFQURfTEFURU5DWV9TSERXX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX1JFQURfTEFURU5DWV9TSERXX01BU0sJCSgweGYgPDwgMCkKKyNkZWZpbmUgRU1JRl9SRUdfRExMX1NMQVZFX0RMWV9DVFJMX1NIRFdfU0hJRlQJNAorI2RlZmluZSBFTUlGX1JFR19ETExfU0xBVkVfRExZX0NUUkxfU0hEV19NQVNLCSgweEZGIDw8IDQpCisjZGVmaW5lIEVNSUZfRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTF9TSERXX1NISUZUIDEyCisjZGVmaW5lIEVNSUZfRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTF9TSERXX01BU0sJKDB4RkZGRkYgPDwgMTIpCisKKy8qIEREUl9QSFlfQ1RSTF8yICovCisjZGVmaW5lIEVNSUZfUkVHX0REUl9QSFlfQ1RSTF8yX1NISUZUCQkwCisjZGVmaW5lIEVNSUZfUkVHX0REUl9QSFlfQ1RSTF8yX01BU0sJCSgweGZmZmZmZmZmIDw8IDApCisKKy8qIERNTSAqLworI2RlZmluZSBETU1fQkFTRQkJCTB4NEUwMDAwNDAKKworLyogTWVtb3J5IEFkYXB0ZXIgKi8KKyNkZWZpbmUgTUFfQkFTRQkJCQkweDQ4MkFGMDQwCisKKy8qIERNTV9MSVNBX01BUCAqLworI2RlZmluZSBFTUlGX1NZU19BRERSX1NISUZUCQkyNAorI2RlZmluZSBFTUlGX1NZU19BRERSX01BU0sJCSgweGZmIDw8IDI0KQorI2RlZmluZSBFTUlGX1NZU19TSVpFX1NISUZUCQkyMAorI2RlZmluZSBFTUlGX1NZU19TSVpFX01BU0sJCSgweDcgPDwgMjApCisjZGVmaW5lIEVNSUZfU0RSQ19JTlRMX1NISUZUCTE4CisjZGVmaW5lIEVNSUZfU0RSQ19JTlRMX01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lIEVNSUZfU0RSQ19BRERSU1BDX1NISUZUCTE2CisjZGVmaW5lIEVNSUZfU0RSQ19BRERSU1BDX01BU0sJKDB4MyA8PCAxNikKKyNkZWZpbmUgRU1JRl9TRFJDX01BUF9TSElGVAkJOAorI2RlZmluZSBFTUlGX1NEUkNfTUFQX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUgRU1JRl9TRFJDX0FERFJfU0hJRlQJMAorI2RlZmluZSBFTUlGX1NEUkNfQUREUl9NQVNLCQkoMHhmZiA8PCAwKQorCisvKiBETU1fTElTQV9NQVAgZmllbGRzICovCisjZGVmaW5lIERNTV9TRFJDX01BUF9VTk1BUFBFRAkJMAorI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjFfT05MWQkJMQorI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjJfT05MWQkJMgorI2RlZmluZSBETU1fU0RSQ19NQVBfRU1JRjFfQU5EX0VNSUYyCTMKKworI2RlZmluZSBETU1fU0RSQ19JTlRMX05PTkUJCTAKKyNkZWZpbmUgRE1NX1NEUkNfSU5UTF8xMjhCCQkxCisjZGVmaW5lIERNTV9TRFJDX0lOVExfMjU2QgkJMgorI2RlZmluZSBETU1fU0RSQ19JTlRMXzUxMgkJMworCisjZGVmaW5lIERNTV9TRFJDX0FERFJfU1BDX1NEUkFNCQkwCisjZGVmaW5lIERNTV9TRFJDX0FERFJfU1BDX05WTQkJMQorI2RlZmluZSBETU1fU0RSQ19BRERSX1NQQ19JTlZBTElECTIKKworI2RlZmluZSBETU1fTElTQV9NQVBfSU5URVJMRUFWRURfQkFTRV9WQUwJCShcCisJKERNTV9TRFJDX01BUF9FTUlGMV9BTkRfRU1JRjIgPDwgRU1JRl9TRFJDX01BUF9TSElGVCkgfFwKKwkoRE1NX1NEUkNfQUREUl9TUENfU0RSQU0gPDwgRU1JRl9TRFJDX0FERFJTUENfU0hJRlQpIHxcCisJKERNTV9TRFJDX0lOVExfMTI4QiA8PCBFTUlGX1NEUkNfSU5UTF9TSElGVCkgfFwKKwkoQ09ORklHX1NZU19TRFJBTV9CQVNFIDw8IEVNSUZfU1lTX0FERFJfU0hJRlQpKQorCisjZGVmaW5lIERNTV9MSVNBX01BUF9FTUlGMV9PTkxZX0JBU0VfVkFMCShcCisJKERNTV9TRFJDX01BUF9FTUlGMV9PTkxZIDw8IEVNSUZfU0RSQ19NQVBfU0hJRlQpfFwKKwkoRE1NX1NEUkNfQUREUl9TUENfU0RSQU0gPDwgRU1JRl9TRFJDX0FERFJTUENfU0hJRlQpfFwKKwkoRE1NX1NEUkNfSU5UTF9OT05FIDw8IEVNSUZfU0RSQ19JTlRMX1NISUZUKSkKKworI2RlZmluZSBETU1fTElTQV9NQVBfRU1JRjJfT05MWV9CQVNFX1ZBTAkoXAorCShETU1fU0RSQ19NQVBfRU1JRjJfT05MWSA8PCBFTUlGX1NEUkNfTUFQX1NISUZUKXxcCisJKERNTV9TRFJDX0FERFJfU1BDX1NEUkFNIDw8IEVNSUZfU0RSQ19BRERSU1BDX1NISUZUKXxcCisJKERNTV9TRFJDX0lOVExfTk9ORSA8PCBFTUlGX1NEUkNfSU5UTF9TSElGVCkpCisKKy8qIFRyYXAgZm9yIGludmFsaWQgVElMRVIgUEFUIGVudHJpZXMgKi8KKyNkZWZpbmUgRE1NX0xJU0FfTUFQXzBfSU5WQUxfQUREUl9UUkFQCQkoXAorCSgwICA8PCBFTUlGX1NEUkNfQUREUl9TSElGVCkgfFwKKwkoRE1NX1NEUkNfTUFQX0VNSUYxX09OTFkgPDwgRU1JRl9TRFJDX01BUF9TSElGVCl8XAorCShETU1fU0RSQ19BRERSX1NQQ19JTlZBTElEIDw8IEVNSUZfU0RSQ19BRERSU1BDX1NISUZUKXxcCisJKERNTV9TRFJDX0lOVExfTk9ORSA8PCBFTUlGX1NEUkNfSU5UTF9TSElGVCl8XAorCSgweEZGIDw8IEVNSUZfU1lTX0FERFJfU0hJRlQpKQorCisKKy8qIFJlZyBtYXBwaW5nIHN0cnVjdHVyZSAqLworc3RydWN0IGVtaWZfcmVnX3N0cnVjdCB7CisJdTMyIGVtaWZfbW9kX2lkX3JldjsKKwl1MzIgZW1pZl9zdGF0dXM7CisJdTMyIGVtaWZfc2RyYW1fY29uZmlnOworCXUzMiBlbWlmX2xwZGRyMl9udm1fY29uZmlnOworCXUzMiBlbWlmX3NkcmFtX3JlZl9jdHJsOworCXUzMiBlbWlmX3NkcmFtX3JlZl9jdHJsX3NoZHc7CisJdTMyIGVtaWZfc2RyYW1fdGltXzE7CisJdTMyIGVtaWZfc2RyYW1fdGltXzFfc2hkdzsKKwl1MzIgZW1pZl9zZHJhbV90aW1fMjsKKwl1MzIgZW1pZl9zZHJhbV90aW1fMl9zaGR3OworCXUzMiBlbWlmX3NkcmFtX3RpbV8zOworCXUzMiBlbWlmX3NkcmFtX3RpbV8zX3NoZHc7CisJdTMyIGVtaWZfbHBkZHIyX252bV90aW07CisJdTMyIGVtaWZfbHBkZHIyX252bV90aW1fc2hkdzsKKwl1MzIgZW1pZl9wd3JfbWdtdF9jdHJsOworCXUzMiBlbWlmX3B3cl9tZ210X2N0cmxfc2hkdzsKKwl1MzIgZW1pZl9scGRkcjJfbW9kZV9yZWdfZGF0YTsKKwl1MzIgcGFkZGluZzFbMV07CisJdTMyIGVtaWZfbHBkZHIyX21vZGVfcmVnX2RhdGFfZXMyOworCXUzMiBwYWRkaW5nMTFbMV07CisJdTMyIGVtaWZfbHBkZHIyX21vZGVfcmVnX2NmZzsKKwl1MzIgZW1pZl9sM19jb25maWc7CisJdTMyIGVtaWZfbDNfY2ZnX3ZhbF8xOworCXUzMiBlbWlmX2wzX2NmZ192YWxfMjsKKwl1MzIgZW1pZl9pb2RmdF90bGdjOworCXUzMiBwYWRkaW5nMls3XTsKKwl1MzIgZW1pZl9wZXJmX2NudF8xOworCXUzMiBlbWlmX3BlcmZfY250XzI7CisJdTMyIGVtaWZfcGVyZl9jbnRfY2ZnOworCXUzMiBlbWlmX3BlcmZfY250X3NlbDsKKwl1MzIgZW1pZl9wZXJmX2NudF90aW07CisJdTMyIHBhZGRpbmczOworCXUzMiBlbWlmX3JlYWRfaWRsZWN0cmw7CisJdTMyIGVtaWZfcmVhZF9pZGxlY3RybF9zaGR3OworCXUzMiBwYWRkaW5nNDsKKwl1MzIgZW1pZl9pcnFzdGF0dXNfcmF3X3N5czsKKwl1MzIgZW1pZl9pcnFzdGF0dXNfcmF3X2xsOworCXUzMiBlbWlmX2lycXN0YXR1c19zeXM7CisJdTMyIGVtaWZfaXJxc3RhdHVzX2xsOworCXUzMiBlbWlmX2lycWVuYWJsZV9zZXRfc3lzOworCXUzMiBlbWlmX2lycWVuYWJsZV9zZXRfbGw7CisJdTMyIGVtaWZfaXJxZW5hYmxlX2Nscl9zeXM7CisJdTMyIGVtaWZfaXJxZW5hYmxlX2Nscl9sbDsKKwl1MzIgcGFkZGluZzU7CisJdTMyIGVtaWZfenFfY29uZmlnOworCXUzMiBlbWlmX3RlbXBfYWxlcnRfY29uZmlnOworCXUzMiBlbWlmX2wzX2Vycl9sb2c7CisJdTMyIHBhZGRpbmc2WzRdOworCXUzMiBlbWlmX2Rkcl9waHlfY3RybF8xOworCXUzMiBlbWlmX2Rkcl9waHlfY3RybF8xX3NoZHc7CisJdTMyIGVtaWZfZGRyX3BoeV9jdHJsXzI7Cit9OworCitzdHJ1Y3QgZG1tX2xpc2FfbWFwX3JlZ3MgeworCXUzMiBkbW1fbGlzYV9tYXBfMDsKKwl1MzIgZG1tX2xpc2FfbWFwXzE7CisJdTMyIGRtbV9saXNhX21hcF8yOworCXUzMiBkbW1fbGlzYV9tYXBfMzsKK307CisKKyNkZWZpbmUgQ1MwCTAKKyNkZWZpbmUgQ1MxCTEKKy8qIFRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBhdCB3aGljaCB0aGUgTFBERFIyIGludGVyZmFjZSBjYW4gb3BlcmF0ZSBpbiBIeiovCisjZGVmaW5lIE1BWF9MUEREUjJfRlJFUQk0MDAwMDAwMDAJLyogNDAwIE1IeiAqLworCisvKgorICogVGhlIHBlcmlvZCBvZiBERFIgY2xrIGlzIHJlcHJlc2VudGVkIGFzIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgZm9yCisgKiBiZXR0ZXIgYWNjdXJhY3kgaW4gaW50ZWdlciBiYXNlZCBjYWxjdWxhdGlvbnMuIEhvd2V2ZXIsIGlmIHRoZSBudW1lcmF0b3IKKyAqIGFuZCBkZW5vbWluYXRvciBhcmUgdmVyeSBodWdlIHRoZXJlIG1heSBiZSBjaGFuY2VzIG9mIG92ZXJmbG93IGluCisgKiBjYWxjdWxhdGlvbnMuIFNvLCBhcyBhIHRyYWRlLW9mZiBrZWVwIGRlbm9taW5hdG9yKGFuZCBjb25zZXF1ZW50bHkKKyAqIG51bWVyYXRvcikgd2l0aGluIGEgbGltaXQgc2FjcmlmaWNpbmcgc29tZSBhY2N1cmFjeSAtIGJ1dCBub3QgbXVjaAorICogSWYgZGVub21pbmF0b3IgYW5kIG51bWVyYXRvciBhcmUgYWxyZWFkeSBzbWFsbCAoc3VjaCBhcyBhdCA0MDAgTUh6KQorICogbm8gYWRqdXN0bWVudCBpcyBuZWVkZWQKKyAqLworI2RlZmluZSBFTUlGX1BFUklPRF9ERU5fTElNSVQJMTAwMAorLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGRpZmZlcmVudCBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgRU1JRiBkcml2ZXIKKyAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBwb2ludGVyIGFycmF5IGZvciByZWdpc3RlcgorICogY2FjaGUKKyAqLworI2RlZmluZSBFTUlGX01BWF9OVU1fRlJFUVVFTkNJRVMJNgorLyoKKyAqIEluZGljZXMgaW50byB0aGUgQWRkcmVzc2luZyBUYWJsZSBhcnJheS4KKyAqIE9uZSBlbnRyeSBlYWNoIGZvciBhbGwgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBkZXZpY2VzIHdpdGggZGlmZmVyZW50CisgKiBhZGRyZXNzaW5nIHNjaGVtZXMKKyAqLworI2RlZmluZSBBRERSX1RBQkxFX0lOREVYNjRNCTAKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDEyOE0JMQorI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMjU2TQkyCisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVg1MTJNCTMKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDFHUzQJNAorI2RlZmluZSBBRERSX1RBQkxFX0lOREVYMkdTNAk1CisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVg0Rwk2CisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVg4Rwk3CisjZGVmaW5lIEFERFJfVEFCTEVfSU5ERVgxR1MyCTgKKyNkZWZpbmUgQUREUl9UQUJMRV9JTkRFWDJHUzIJOQorI2RlZmluZSBBRERSX1RBQkxFX0lOREVYTUFYCTEwCisKKy8qIE51bWJlciBvZiBSb3cgYml0cyAqLworI2RlZmluZSBST1dfOSAgMAorI2RlZmluZSBST1dfMTAgMQorI2RlZmluZSBST1dfMTEgMgorI2RlZmluZSBST1dfMTIgMworI2RlZmluZSBST1dfMTMgNAorI2RlZmluZSBST1dfMTQgNQorI2RlZmluZSBST1dfMTUgNgorI2RlZmluZSBST1dfMTYgNworCisvKiBOdW1iZXIgb2YgQ29sdW1uIGJpdHMgKi8KKyNkZWZpbmUgQ09MXzggICAwCisjZGVmaW5lIENPTF85ICAgMQorI2RlZmluZSBDT0xfMTAgIDIKKyNkZWZpbmUgQ09MXzExICAzCisjZGVmaW5lIENPTF83ICAgNCAvKk5vdCBzdXBwb3J0ZWQgYnkgT01BUCBpbmNsdWRlZCBmb3IgY29tcGxldGVuZXNzICovCisKKy8qIE51bWJlciBvZiBCYW5rcyovCisjZGVmaW5lIEJBTktTMSAwCisjZGVmaW5lIEJBTktTMiAxCisjZGVmaW5lIEJBTktTNCAyCisjZGVmaW5lIEJBTktTOCAzCisKKy8qIFJlZnJlc2ggcmF0ZSBpbiBtaWNybyBzZWNvbmRzIHggMTAgKi8KKyNkZWZpbmUgVF9SRUZJXzE1XzYJMTU2CisjZGVmaW5lIFRfUkVGSV83XzgJNzgKKyNkZWZpbmUgVF9SRUZJXzNfOQkzOQorCisjZGVmaW5lIEVCQU5LX0NTMV9ESVMJMAorI2RlZmluZSBFQkFOS19DUzFfRU4JMQorCisvKiBSZWFkIExhdGVuY3kgdXNlZCBieSB0aGUgZGV2aWNlIGF0IHJlc2V0ICovCisjZGVmaW5lIFJMX0JPT1QJCTMKKy8qIFJlYWQgTGF0ZW5jeSBmb3IgdGhlIGhpZ2hlc3QgZnJlcXVlbmN5IHlvdSB3YW50IHRvIHVzZSAqLworI2lmZGVmIENPTkZJR19PTUFQNTRYWAorI2RlZmluZSBSTF9GSU5BTAk4CisjZWxzZQorI2RlZmluZSBSTF9GSU5BTAk2CisjZW5kaWYKKworCisvKiBJbnRlcmxlYXZpbmcgcG9saWNpZXMgYXQgRU1JRiBsZXZlbC0gYmV0d2VlbiBiYW5rcyBhbmQgQ2hpcCBTZWxlY3RzICovCisjZGVmaW5lIEVNSUZfSU5URVJMRUFWSU5HX1BPTElDWV9NQVhfSU5URVJMRUFWSU5HCTAKKyNkZWZpbmUgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZX05PX0JBTktfSU5URVJMRUFWSU5HCTMKKworLyoKKyAqIEludGVybGVhdmluZyBwb2xpY3kgdG8gYmUgdXNlZAorICogQ3VycmVudGx5IHNldCB0byBNQVggaW50ZXJsZWF2aW5nIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKKyAqLworI2RlZmluZSBFTUlGX0lOVEVSTEVBVklOR19QT0xJQ1kgRU1JRl9JTlRFUkxFQVZJTkdfUE9MSUNZX01BWF9JTlRFUkxFQVZJTkcKKworLyogU3RhdGUgb2YgdGhlIGNvcmUgdm9sdGFnZToKKyAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzb21lIHBhcmFtZXRlcnMgc3VjaCBhcyByZWFkIGlkbGUgY29udHJvbCBhbmQKKyAqIFpRIGNhbGlicmF0aW9uIHRpbWluZ3MuIFRpbWluZ3MgYXJlIG11Y2ggc3RyaWN0ZXIgd2hlbiB2b2x0YWdlIHJhbXAKKyAqIGlzIGhhcHBlbmluZyBjb21wYXJlZCB0byB3aGVuIHRoZSB2b2x0YWdlIGlzIHN0YWJsZS4KKyAqIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHR3byBzZXRzIG9mIHZhbHVlcyBmb3IgdGhlc2UgcGFyYW1ldGVycyBhbmQgdXNlCisgKiB0aGVtIGFjY29yZGluZ2x5CisgKi8KKyNkZWZpbmUgTFBERFIyX1ZPTFRBR0VfU1RBQkxFCTAKKyNkZWZpbmUgTFBERFIyX1ZPTFRBR0VfUkFNUElORwkxCisKKy8qIExlbmd0aCBvZiB0aGUgZm9yY2VkIHJlYWQgaWRsZSBwZXJpb2QgaW4gdGVybXMgb2YgY3ljbGVzICovCisjZGVmaW5lIEVNSUZfUkVHX1JFQURfSURMRV9MRU5fVkFMCTUKKworLyogSW50ZXJ2YWwgYmV0d2VlbiBmb3JjZWQgJ3JlYWQgaWRsZXMnICovCisvKiBUbyBiZSB1c2VkIHdoZW4gdm9sdGFnZSBpcyBjaGFuZ2VkIGZvciBEUFMvRFZGUyAtIDF1cyAqLworI2RlZmluZSBSRUFEX0lETEVfSU5URVJWQUxfRFZGUwkJKDEqMTAwMCkKKy8qCisgKiBUbyBiZSB1c2VkIHdoZW4gdm9sdGFnZSBpcyBub3Qgc2NhbGVkIGV4Y2VwdCBieSBTbWFydCBSZWZsZXgKKyAqIDUwdXMgLSBvciBtYXhpbXVtIHZhbHVlIHdpbGwgZG8KKyAqLworI2RlZmluZSBSRUFEX0lETEVfSU5URVJWQUxfTk9STUFMCSg1MCoxMDAwKQorCisKKy8qCisgKiBVbmxlc3Mgdm9sdGFnZSBpcyBjaGFuZ2luZyBkdWUgdG8gRFZGUyBvbmUgWlFDUyBjb21tYW5kIGV2ZXJ5IDUwbXMgc2hvdWxkCisgKiBiZSBlbm91Z2guIFRoaXMgc2hvdWxlIGJlIGVub3VnaCBhbHNvIGluIHRoZSBjYXNlIHdoZW4gdm9sdGFnZSBpcyBjaGFuZ2luZworICogZHVlIHRvIHNtYXJ0LXJlZmxleC4KKyAqLworI2RlZmluZSBFTUlGX1pRQ1NfSU5URVJWQUxfTk9STUFMX0lOX1VTCSg1MCoxMDAwKQorLyoKKyAqIElmIHZvbHRhZ2UgaXMgY2hhbmdpbmcgZHVlIHRvIERWRlMgWlFDUyBzaG91bGQgYmUgcGVyZm9ybWVkIG1vcmUKKyAqIG9mdGVuKGV2ZXJ5IDUwdXMpCisgKi8KKyNkZWZpbmUgRU1JRl9aUUNTX0lOVEVSVkFMX0RWRlNfSU5fVVMJNTAKKworLyogVGhlIGludGVydmFsIGJldHdlZW4gWlFDTCBjb21tYW5kcyBhcyBhIG11bHRpcGxlIG9mIFpRQ1MgaW50ZXJ2YWwgKi8KKyNkZWZpbmUgUkVHX1pRX1pRQ0xfTVVMVAkJNAorLyogVGhlIGludGVydmFsIGJldHdlZW4gWlFJTklUIGNvbW1hbmRzIGFzIGEgbXVsdGlwbGUgb2YgWlFDTCBpbnRlcnZhbCAqLworI2RlZmluZSBSRUdfWlFfWlFJTklUX01VTFQJCTMKKy8qIEVuYWJsZSBaUSBDYWxpYnJhdGlvbiBvbiBleGl0aW5nIFNlbGYtcmVmcmVzaCAqLworI2RlZmluZSBSRUdfWlFfU0ZFWElURU5fRU5BQkxFCQkxCisvKgorICogWlEgQ2FsaWJyYXRpb24gc2ltdWx0YW5lb3VzbHkgb24gYm90aCBjaGlwLXNlbGVjdHM6CisgKiBOZWVkcyBvbmUgY2FsaWJyYXRpb24gcmVzaXN0b3IgcGVyIENTCisgKiBOb25lIG9mIHRoZSBib2FyZHMgdGhhdCB3ZSBrbm93IG9mIGhhdmUgdGhpcyBjYXBhYmlsaXR5CisgKiBTbyBkaXNhYmxlZCBieSBkZWZhdWx0CisgKi8KKyNkZWZpbmUgUkVHX1pRX0RVQUxDQUxFTl9ESVNBQkxFCTAKKy8qCisgKiBFbmFibGUgWlEgQ2FsaWJyYXRpb24gYnkgZGVmYXVsdCBvbiBDUzAuIElmIHdlIGFyZSBhc2tlZCB0byBwcm9ncmFtCisgKiB0aGUgRU1JRiB0aGVyZSB3aWxsIGJlIHNvbWV0aGluZyBjb25uZWN0ZWQgdG8gQ1MwIGZvciBzdXJlCisgKi8KKyNkZWZpbmUgUkVHX1pRX0NTMEVOX0VOQUJMRQkJMQorCisvKiBFTUlGX1BXUl9NR01UX0NUUkwgcmVnaXN0ZXIgKi8KKy8qIExvdyBwb3dlciBtb2RlcyAqLworI2RlZmluZSBMUF9NT0RFX0RJU0FCTEUJCTAKKyNkZWZpbmUgTFBfTU9ERV9DTE9DS19TVE9QCTEKKyNkZWZpbmUgTFBfTU9ERV9TRUxGX1JFRlJFU0gJMgorI2RlZmluZSBMUF9NT0RFX1BXUl9ETgkJMworCisvKiBSRUdfRFBEX0VOICovCisjZGVmaW5lIERQRF9ESVNBQkxFCTAKKyNkZWZpbmUgRFBEX0VOQUJMRQkxCisKKy8qIE1heGltdW0gZGVsYXkgYmVmb3JlIExvdyBQb3dlciBNb2RlcyAqLworI2RlZmluZSBSRUdfQ1NfVElNCQkweEYKKyNkZWZpbmUgUkVHX1NSX1RJTQkJMHhGCisjZGVmaW5lIFJFR19QRF9USU0JCTB4RgorCisvKiBFTUlGX1BXUl9NR01UX0NUUkwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRU1JRl9QV1JfTUdNVF9DVFJMIChcCisJKChSRUdfQ1NfVElNIDw8IEVNSUZfUkVHX0NTX1RJTV9TSElGVCkgJiBFTUlGX1JFR19DU19USU1fTUFTSyl8XAorCSgoUkVHX1NSX1RJTSA8PCBFTUlGX1JFR19TUl9USU1fU0hJRlQpICYgRU1JRl9SRUdfU1JfVElNX01BU0spfFwKKwkoKFJFR19QRF9USU0gPDwgRU1JRl9SRUdfUERfVElNX1NISUZUKSAmIEVNSUZfUkVHX1BEX1RJTV9NQVNLKXxcCisJKChSRUdfUERfVElNIDw8IEVNSUZfUkVHX1BEX1RJTV9TSElGVCkgJiBFTUlGX1JFR19QRF9USU1fTUFTSyl8XAorCSgoTFBfTU9ERV9ESVNBQkxFIDw8IEVNSUZfUkVHX0xQX01PREVfU0hJRlQpXAorCQkJJiBFTUlGX1JFR19MUF9NT0RFX01BU0spIHxcCisJKChEUERfRElTQUJMRSA8PCBFTUlGX1JFR19EUERfRU5fU0hJRlQpXAorCQkJJiBFTUlGX1JFR19EUERfRU5fTUFTSykpXAorCisjZGVmaW5lIEVNSUZfUFdSX01HTVRfQ1RSTF9TSERXIChcCisJKChSRUdfQ1NfVElNIDw8IEVNSUZfUkVHX0NTX1RJTV9TSERXX1NISUZUKVwKKwkJCSYgRU1JRl9SRUdfQ1NfVElNX1NIRFdfTUFTSykgfFwKKwkoKFJFR19TUl9USU0gPDwgRU1JRl9SRUdfU1JfVElNX1NIRFdfU0hJRlQpXAorCQkJJiBFTUlGX1JFR19TUl9USU1fU0hEV19NQVNLKSB8XAorCSgoUkVHX1BEX1RJTSA8PCBFTUlGX1JFR19QRF9USU1fU0hEV19TSElGVClcCisJCQkmIEVNSUZfUkVHX1BEX1RJTV9TSERXX01BU0spIHxcCisJKChSRUdfUERfVElNIDw8IEVNSUZfUkVHX1BEX1RJTV9TSERXX1NISUZUKVwKKwkJCSYgRU1JRl9SRUdfUERfVElNX1NIRFdfTUFTSykpCisKKy8qIEVNSUZfTDNfQ09ORklHIHJlZ2lzdGVyIHZhbHVlICovCisjZGVmaW5lIEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTExfMAkweDBBMDAwMEZGCisjZGVmaW5lIEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTVBVXzNfTExfMAkweDBBMzAwMDAwCisjZGVmaW5lIEVNSUZfTDNfQ09ORklHX1ZBTF9TWVNfMTBfTVBVXzVfTExfMAkweDBBMzAwMDAwCisKKy8qCisgKiBWYWx1ZSBvZiBiaXRzIDEyOjMxIG9mIEREUl9QSFlfQ1RSTF8xIHJlZ2lzdGVyOgorICogQWxsIHRoZXNlIGZpZWxkcyBoYXZlIG1hZ2ljIHZhbHVlcyBkZXBlbmRlbnQgb24gZnJlcXVlbmN5IGFuZAorICogZGV0ZXJtaW5lZCBieSBQSFkgYW5kIERMTCBpbnRlZ3JhdGlvbiB3aXRoIEVNSUYuIFNldHRpbmcgdGhlIG1hZ2ljCisgKiB2YWx1ZXMgc3VnZ2VzdGVkIGJ5IGh3IHRlYW0uCisgKi8KKyNkZWZpbmUgRU1JRl9ERFJfUEhZX0NUUkxfMV9CQVNFX1ZBTAkJCTB4MDQ5RkYKKyNkZWZpbmUgRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfNDAwX01IWgkJCTB4NDEKKyNkZWZpbmUgRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfMjAwX01IWgkJCTB4ODAKKyNkZWZpbmUgRU1JRl9ETExfU0xBVkVfRExZX0NUUkxfMTAwX01IWl9BTkRfTEVTUwkweEZGCisKKy8qCisqIE1SMSB2YWx1ZToKKyogQnVyc3QgbGVuZ3RoCTogOAorKiBCdXJzdCB0eXBlCTogc2VxdWVudGlhbAorKiBXcmFwCQk6IGVuYWJsZWQKKyogbldSCQk6IDMoZGVmYXVsdCkuIEVNSUYgZG9lcyBub3QgZG8gcHJlLWNoYXJnZS4KKyoJCTogU28gbldSIGlzIGRvbid0IGNhcmUKKyovCisjZGVmaW5lIE1SMV9CTF84X0JUX1NFUV9XUkFQX0VOX05XUl8zCTB4MjMKKworLyogTVIyICovCisjZGVmaW5lIE1SMl9STDNfV0wxCQkJMQorI2RlZmluZSBNUjJfUkw0X1dMMgkJCTIKKyNkZWZpbmUgTVIyX1JMNV9XTDIJCQkzCisjZGVmaW5lIE1SMl9STDZfV0wzCQkJNAorCisvKiBNUjEwOiBaUSBjYWxpYnJhdGlvbiBjb2RlcyAqLworI2RlZmluZSBNUjEwX1pRX1pRQ1MJCTB4NTYKKyNkZWZpbmUgTVIxMF9aUV9aUUNMCQkweEFCCisjZGVmaW5lIE1SMTBfWlFfWlFJTklUCQkweEZGCisjZGVmaW5lIE1SMTBfWlFfWlFSRVNFVAkJMHhDMworCisvKiBURU1QX0FMRVJUX0NPTkZJRyAqLworI2RlZmluZSBURU1QX0FMRVJUX1BPTExfSU5URVJWQUxfTVMJMzYwIC8qIGZvciB0ZW1wIGdyYWRpZW50IC0gNSBDL3MgKi8KKyNkZWZpbmUgVEVNUF9BTEVSVF9DT05GSUdfREVWQ1RfMQkwCisjZGVmaW5lIFRFTVBfQUxFUlRfQ09ORklHX0RFVldEVF8zMgkyCisKKy8qIE1SMTYgdmFsdWU6IHJlZnJlc2ggZnVsbCBhcnJheShubyBwYXJ0aWFsIGFycmF5IHNlbGYgcmVmcmVzaCkgKi8KKyNkZWZpbmUgTVIxNl9SRUZfRlVMTF9BUlJBWQkwCisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHdlIGtlZXAgaW4gb3VyIGFycmF5IG9mIHRpbWluZyB0YWJsZXMKKyAqIFdlIG5lZWQgbm90IGtlZXAgYWxsIHRoZSBzcGVlZCBiaW5zIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlCisgKiBXZSBuZWVkIHRvIGtlZXAgdGltaW5nIHRhYmxlcyBmb3Igb25seSB0aGUgc3BlZWQgYmlucyB0aGF0IHdlCisgKiBhcmUgaW50ZXJlc3RlZCBpbgorICovCisjZGVmaW5lIE1BWF9OVU1fU1BFRURCSU5TCTQKKworLyogTFBERFIyIERlbnNpdGllcyAqLworI2RlZmluZSBMUEREUjJfREVOU0lUWV82NE1iCTAKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMTI4TWIJMQorI2RlZmluZSBMUEREUjJfREVOU0lUWV8yNTZNYgkyCisjZGVmaW5lIExQRERSMl9ERU5TSVRZXzUxMk1iCTMKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMUdiCTQKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMkdiCTUKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfNEdiCTYKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfOEdiCTcKKyNkZWZpbmUgTFBERFIyX0RFTlNJVFlfMTZHYgk4CisjZGVmaW5lIExQRERSMl9ERU5TSVRZXzMyR2IJOQorCisvKiBMUEREUjIgdHlwZSAqLworI2RlZmluZQlMUEREUjJfVFlQRV9TNAkwCisjZGVmaW5lCUxQRERSMl9UWVBFX1MyCTEKKyNkZWZpbmUJTFBERFIyX1RZUEVfTlZNCTIKKworLyogTFBERFIyIElPIHdpZHRoICovCisjZGVmaW5lCUxQRERSMl9JT19XSURUSF8zMgkwCisjZGVmaW5lCUxQRERSMl9JT19XSURUSF8xNgkxCisjZGVmaW5lCUxQRERSMl9JT19XSURUSF84CTIKKworLyogTW9kZSByZWdpc3RlciBudW1iZXJzICovCisjZGVmaW5lIExQRERSMl9NUjAJMAorI2RlZmluZSBMUEREUjJfTVIxCTEKKyNkZWZpbmUgTFBERFIyX01SMgkyCisjZGVmaW5lIExQRERSMl9NUjMJMworI2RlZmluZSBMUEREUjJfTVI0CTQKKyNkZWZpbmUgTFBERFIyX01SNQk1CisjZGVmaW5lIExQRERSMl9NUjYJNgorI2RlZmluZSBMUEREUjJfTVI3CTcKKyNkZWZpbmUgTFBERFIyX01SOAk4CisjZGVmaW5lIExQRERSMl9NUjkJOQorI2RlZmluZSBMUEREUjJfTVIxMAkxMAorI2RlZmluZSBMUEREUjJfTVIxMQkxMQorI2RlZmluZSBMUEREUjJfTVIxNgkxNgorI2RlZmluZSBMUEREUjJfTVIxNwkxNworI2RlZmluZSBMUEREUjJfTVIxOAkxOAorCisvKiBNUjAgKi8KKyNkZWZpbmUgTFBERFIyX01SMF9EQUlfU0hJRlQJMAorI2RlZmluZSBMUEREUjJfTVIwX0RBSV9NQVNLCTEKKyNkZWZpbmUgTFBERFIyX01SMF9ESV9TSElGVAkxCisjZGVmaW5lIExQRERSMl9NUjBfRElfTUFTSwkoMSA8PCAxKQorI2RlZmluZSBMUEREUjJfTVIwX0ROVklfU0hJRlQJMgorI2RlZmluZSBMUEREUjJfTVIwX0ROVklfTUFTSwkoMSA8PCAyKQorCisvKiBNUjQgKi8KKyNkZWZpbmUgTVI0X1NEUkFNX1JFRl9SQVRFX1NISUZUCTAKKyNkZWZpbmUgTVI0X1NEUkFNX1JFRl9SQVRFX01BU0sJCTcKKyNkZWZpbmUgTVI0X1RVRl9TSElGVAkJCTcKKyNkZWZpbmUgTVI0X1RVRl9NQVNLCQkJKDEgPDwgNykKKworLyogTVI0IFNEUkFNIFJlZnJlc2ggUmF0ZSBmaWVsZCB2YWx1ZXMgKi8KKyNkZWZpbmUgU0RSQU1fVEVNUF9MRVNTX0xPV19TSFVURE9XTgkJCTB4MAorI2RlZmluZSBTRFJBTV9URU1QX0xFU1NfNFhfUkVGUkVTSF9BTkRfVElNSU5HUwkJMHgxCisjZGVmaW5lIFNEUkFNX1RFTVBfTEVTU18yWF9SRUZSRVNIX0FORF9USU1JTkdTCQkweDIKKyNkZWZpbmUgU0RSQU1fVEVNUF9OT01JTkFMCQkJCTB4MworI2RlZmluZSBTRFJBTV9URU1QX1JFU0VSVkVEXzQJCQkJMHg0CisjZGVmaW5lIFNEUkFNX1RFTVBfSElHSF9ERVJBVEVfUkVGUkVTSAkJCTB4NQorI2RlZmluZSBTRFJBTV9URU1QX0hJR0hfREVSQVRFX1JFRlJFU0hfQU5EX1RJTUlOR1MJMHg2CisjZGVmaW5lIFNEUkFNX1RFTVBfVkVSWV9ISUdIX1NIVVRET1dOCQkJMHg3CisKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9TQU1TVU5HCTEKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9RSU1PTkRBCTIKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9FTFBJREEJMworI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX0VUUk9OCTQKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9OQU5ZQQk1CisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfSFlOSVgJNgorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX01PU0VMCTcKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9XSU5CT05ECTgKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9FU01UCTkKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9TUEFOU0lPTiAxMQorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX1NTVAkJMTIKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9aTU9TCTEzCisjZGVmaW5lIExQRERSMl9NQU5VRkFDVFVSRVJfSU5URUwJMTQKKyNkZWZpbmUgTFBERFIyX01BTlVGQUNUVVJFUl9OVU1PTllYCTI1NAorI2RlZmluZSBMUEREUjJfTUFOVUZBQ1RVUkVSX01JQ1JPTgkyNTUKKworLyogTVI4IHJlZ2lzdGVyIGZpZWxkcyAqLworI2RlZmluZSBNUjhfVFlQRV9TSElGVAkJMHgwCisjZGVmaW5lIE1SOF9UWVBFX01BU0sJCTB4MworI2RlZmluZSBNUjhfREVOU0lUWV9TSElGVAkweDIKKyNkZWZpbmUgTVI4X0RFTlNJVFlfTUFTSwkoMHhGIDw8IDB4MikKKyNkZWZpbmUgTVI4X0lPX1dJRFRIX1NISUZUCTB4NgorI2RlZmluZSBNUjhfSU9fV0lEVEhfTUFTSwkoMHgzIDw8IDB4NikKKworc3RydWN0IGxwZGRyMl9hZGRyZXNzaW5nIHsKKwl1OAludW1fYmFua3M7CisJdTgJdF9SRUZJX3VzX3gxMDsKKwl1OAlyb3dfc3pbMl07IC8qIE9uZSBlbnRyeSBlYWNoIGZvciB4MzIgYW5kIHgxNiAqLworCXU4CWNvbF9zelsyXTsgLyogT25lIGVudHJ5IGVhY2ggZm9yIHgzMiBhbmQgeDE2ICovCit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIHRpbWluZ3MgZnJvbSB0aGUgRERSIGRhdGFzaGVldCAqLworc3RydWN0IGxwZGRyMl9hY190aW1pbmdzIHsKKwl1MzIgbWF4X2ZyZXE7CisJdTggUkw7CisJdTggdFJQYWI7CisJdTggdFJDRDsKKwl1OCB0V1I7CisJdTggdFJBU21pbjsKKwl1OCB0UlJEOworCXU4IHRXVFJ4MjsKKwl1OCB0WFNSOworCXU4IHRYUHgyOworCXU4IHRSRkNhYjsKKwl1OCB0UlRQeDI7CisJdTggdENLRTsKKwl1OCB0Q0tFU1I7CisJdTggdFpRQ1M7CisJdTMyIHRaUUNMOworCXUzMiB0WlFJTklUOworCXU4IHREUVNDS01BWHgyOworCXU4IHRSQVNtYXg7CisJdTggdEZBVzsKKworfTsKKworLyoKKyAqIE1pbiB0Q0sgdmFsdWVzIGZvciBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzOgorICogSWYgdGhlIGNhbGN1bGF0ZWQgY2xvY2sgY3ljbGVzIGZvciB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXIgaXMKKyAqIGxlc3MgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBtaW4gdENLIHZhbHVlLCB3ZSBuZWVkIHRvIHNldCB0aGUgbWluCisgKiB0Q0sgdmFsdWUuIFRoaXMgbWF5IGhhcHBlbiBhdCBsb3dlciBmcmVxdWVuY2llcy4KKyAqLworc3RydWN0IGxwZGRyMl9taW5fdGNrIHsKKwl1MzIgdFJMOworCXUzMiB0UlBfQUI7CisJdTMyIHRSQ0Q7CisJdTMyIHRXUjsKKwl1MzIgdFJBU19NSU47CisJdTMyIHRSUkQ7CisJdTMyIHRXVFI7CisJdTMyIHRYUDsKKwl1MzIgdFJUUDsKKwl1OCAgdENLRTsKKwl1MzIgdENLRVNSOworCXUzMiB0RkFXOworfTsKKworc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyB7CisJdTgJdHlwZTsKKwl1OAlkZW5zaXR5OworCXU4CWlvX3dpZHRoOworCXU4CW1hbnVmYWN0dXJlcjsKK307CisKK3N0cnVjdCBscGRkcjJfZGV2aWNlX3RpbWluZ3MgeworCWNvbnN0IHN0cnVjdCBscGRkcjJfYWNfdGltaW5ncyAqKmFjX3RpbWluZ3M7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9taW5fdGNrICptaW5fdGNrOworfTsKKworLyogRGV0YWlscyBvZiB0aGUgZGV2aWNlcyBjb25uZWN0ZWQgdG8gZWFjaCBjaGlwLXNlbGVjdCBvZiBhbiBFTUlGIGluc3RhbmNlICovCitzdHJ1Y3QgZW1pZl9kZXZpY2VfZGV0YWlscyB7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfZGV0YWlscyAqY3MwX2RldmljZV9kZXRhaWxzOworCWNvbnN0IHN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmNzMV9kZXZpY2VfZGV0YWlsczsKKwljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICpjczBfZGV2aWNlX3RpbWluZ3M7CisJY29uc3Qgc3RydWN0IGxwZGRyMl9kZXZpY2VfdGltaW5ncyAqY3MxX2RldmljZV90aW1pbmdzOworfTsKKworLyoKKyAqIFN0cnVjdHVyZSBjb250YWluaW5nIHNoYWRvdyBvZiBpbXBvcnRhbnQgcmVnaXN0ZXJzIGluIEVNSUYKKyAqIFRoZSBjYWxjdWxhdGlvbiBmdW5jdGlvbiBmaWxscyBpbiB0aGlzIHN0cnVjdHVyZSB0byBiZSBsYXRlciB1c2VkIGZvcgorICogaW5pdGlhbGl6YXRpb24gYW5kIERWRlMKKyAqLworc3RydWN0IGVtaWZfcmVncyB7CisJdTMyIGZyZXE7CisJdTMyIHNkcmFtX2NvbmZpZ19pbml0OworCXUzMiBzZHJhbV9jb25maWc7CisJdTMyIHJlZl9jdHJsOworCXUzMiBzZHJhbV90aW0xOworCXUzMiBzZHJhbV90aW0yOworCXUzMiBzZHJhbV90aW0zOworCXUzMiByZWFkX2lkbGVfY3RybDsKKwl1MzIgenFfY29uZmlnOworCXUzMiB0ZW1wX2FsZXJ0X2NvbmZpZzsKKwl1MzIgZW1pZl9kZHJfcGh5X2N0bHJfMV9pbml0OworCXUzMiBlbWlmX2Rkcl9waHlfY3Rscl8xOworfTsKKworLyogYXNzZXJ0IG1hY3JvcyAqLworI2lmIGRlZmluZWQoREVCVUcpCisjZGVmaW5lIGVtaWZfYXNzZXJ0KGMpCSh7IGlmICghKGMpKSBmb3IgKDs7KTsgfSkKKyNlbHNlCisjZGVmaW5lIGVtaWZfYXNzZXJ0KGMpCSh7IGlmICgwKSBoYW5nKCk7IH0pCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCit2b2lkIGVtaWZfZ2V0X3JlZ19kdW1wKHUzMiBlbWlmX25yLCBjb25zdCBzdHJ1Y3QgZW1pZl9yZWdzICoqcmVncyk7Cit2b2lkIGVtaWZfZ2V0X2RtbV9yZWdzKGNvbnN0IHN0cnVjdCBkbW1fbGlzYV9tYXBfcmVncyAqKmRtbV9saXNhX3JlZ3MpOworI2Vsc2UKK3N0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmVtaWZfZ2V0X2RldmljZV9kZXRhaWxzKHUzMiBlbWlmX25yLCB1OCBjcywKKwkJCXN0cnVjdCBscGRkcjJfZGV2aWNlX2RldGFpbHMgKmxwZGRyMl9kZXZfZGV0YWlscyk7Cit2b2lkIGVtaWZfZ2V0X2RldmljZV90aW1pbmdzKHUzMiBlbWlmX25yLAorCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICoqY3MwX2RldmljZV90aW1pbmdzLAorCQljb25zdCBzdHJ1Y3QgbHBkZHIyX2RldmljZV90aW1pbmdzICoqY3MxX2RldmljZV90aW1pbmdzKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCitleHRlcm4gdTMyICpjb25zdCBUX251bTsKK2V4dGVybiB1MzIgKmNvbnN0IFRfZGVuOworZXh0ZXJuIHUzMiAqY29uc3QgZW1pZl9zaXplczsKKyNlbmRpZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC10eXBlcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC10eXBlcy5oCmluZGV4IDI1NDkwNTEuLjJkNWMzYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoLXR5cGVzLmgKQEAgLTExMDQsNiArMTEwNCw3IEBACiAjZGVmaW5lIE1BQ0hfVFlQRV9USEFMRVNfQURDICAgICAgICAgICAzNDkyCiAjZGVmaW5lIE1BQ0hfVFlQRV9VQklTWVNfUDlEX0VWUCAgICAgICAzNDkzCiAjZGVmaW5lIE1BQ0hfVFlQRV9BVERHUDMxOCAgICAgICAgICAgICAzNDk0CisjZGVmaW5lIE1BQ0hfVFlQRV9PTUFQNV9TRVZNICAgICAgICAgICAzNzc3CiAKICNpZmRlZiBDT05GSUdfQVJDSF9FQlNBMTEwCiAjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCkBAIC0xNDIwOSw2ICsxNDIxMCwxOCBAQAogIyBkZWZpbmUgbWFjaGluZV9pc19hdGRncDMxOCgpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQNV9TRVZNCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlICAgICBfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZSAgICAgTUFDSF9UWVBFX09NQVA1X1NFVk0KKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb21hcDVfc2V2bSgpICAgICAgKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9PTUFQNV9TRVZNKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb21hcDVfc2V2bSgpICAgICAgKDApCisjZW5kaWYKKwogLyoKICAqIFRoZXNlIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vb21hcF9jb21tb24uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL29tYXBfY29tbW9uLmgKaW5kZXggM2YyZjAwNC4uZjE1NjJlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vb21hcF9jb21tb24uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9vbWFwX2NvbW1vbi5oCkBAIC0zNyw3ICszNywxNiBAQAogdm9pZCBwcmVsb2FkZXJfY29uc29sZV9pbml0KHZvaWQpOwogCiAvKiBCb290IGRldmljZSAqLwotI2lmZGVmIENPTkZJR19PTUFQNDRYWCAvKiBPTUFQNCAqLworI2lmZGVmIENPTkZJR19PTUFQNTRYWAorI2RlZmluZSBCT09UX0RFVklDRV9OT05FICAgICAgICAwCisjZGVmaW5lIEJPT1RfREVWSUNFX1hJUCAgICAgICAgIDEKKyNkZWZpbmUgQk9PVF9ERVZJQ0VfWElQV0FJVCAgICAgMgorI2RlZmluZSBCT09UX0RFVklDRV9OQU5EICAgICAgICAzCisjZGVmaW5lIEJPT1RfREVWSUNFX09ORV9OQU5EICAgIDQKKyNkZWZpbmUgQk9PVF9ERVZJQ0VfTU1DMSAgICAgICAgNQorI2RlZmluZSBCT09UX0RFVklDRV9NTUMyICAgICAgICA2CisjZGVmaW5lIEJPT1RfREVWSUNFX01NQzMJNworI2VsaWYgZGVmaW5lZChDT05GSUdfT01BUDQ0WFgpIC8qIE9NQVA0ICovCiAjZGVmaW5lIEJPT1RfREVWSUNFX05PTkUJMAogI2RlZmluZSBCT09UX0RFVklDRV9YSVAJCTEKICNkZWZpbmUgQk9PVF9ERVZJQ0VfWElQV0FJVAkyCkBAIC03MSwxMCArODAsMTAgQEAKIAogZXh0ZXJuIHN0cnVjdCBzcGxfaW1hZ2VfaW5mbyBzcGxfaW1hZ2U7CiAKK2V4dGVybiB1MzIqIGJvb3RfcGFyYW1zX3B0cjsKIHUzMiBvbWFwX2Jvb3RfZGV2aWNlKHZvaWQpOwogdTMyIG9tYXBfYm9vdF9tb2RlKHZvaWQpOwogCi0KIC8qIFNQTCBjb21tb24gZnVuY3Rpb24gcyovCiB2b2lkIHNwbF9wYXJzZV9pbWFnZV9oZWFkZXIoY29uc3Qgc3RydWN0IGltYWdlX2hlYWRlciAqaGVhZGVyKTsKIHZvaWQgb21hcF9yZXZfc3RyaW5nKGNoYXIgKm9tYXBfcmV2X3N0cmluZyk7CkBAIC04NSw0ICs5NCwyMiBAQAogLyogTU1DIFNQTCBmdW5jdGlvbnMgKi8KIHZvaWQgc3BsX21tY19sb2FkX2ltYWdlKHZvaWQpOwogCisvKgorICogc2lsaWNvbiByZXZpc2lvbnMuCisgKiBNb3ZpbmcgdGhpcyB0byBjb21tb24sIHNvIHRoYXQgbW9zdCBvZiBjb2RlIGNhbiBiZSBtb3ZlZCB0byBjb21tb24sCisgKiBkaXJlY3Rvcmllcy4KKyAqLworCisvKiBvbWFwNCAqLworI2RlZmluZSBPTUFQNDQzMF9TSUxJQ09OX0lEX0lOVkFMSUQJMHhGRkZGRkZGRgorI2RlZmluZSBPTUFQNDQzMF9FUzFfMAkweDQ0MzAwMTAwCisjZGVmaW5lIE9NQVA0NDMwX0VTMl8wCTB4NDQzMDAyMDAKKyNkZWZpbmUgT01BUDQ0MzBfRVMyXzEJMHg0NDMwMDIxMAorI2RlZmluZSBPTUFQNDQzMF9FUzJfMgkweDQ0MzAwMjIwCisjZGVmaW5lIE9NQVA0NDMwX0VTMl8zCTB4NDQzMDAyMzAKKyNkZWZpbmUgT01BUDQ0NjBfRVMxXzAJMHg0NDYwMDEwMAorCisvKiBvbWFwNSAqLworI2RlZmluZSBPTUFQNTQzMF9TSUxJQ09OX0lEX0lOVkFMSUQJMAorI2RlZmluZSBPTUFQNTQzMF9FUzFfMAkweDU0MzAwMTAwCiAjZW5kaWYgLyogX09NQVBfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZy5tayBiL2FyY2gvYmxhY2tmaW4vY29uZmlnLm1rCmluZGV4IGY5ZDQ2ZGUuLjM1OTVhYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlnLm1rCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlnLm1rCkBAIC00OCw5ICs0OCwxMCBAQAogZW5kaWYKIGlmZXEgKCQoQ09ORklHX0VOVl9JU19FTUJFRERFRF9JTl9MRFIpLHkpCiBDUkVBVEVfTERSX0VOViA9ICQob2JqKXRvb2xzL2VudmNyYyAtLWJpbmFyeSA+ICQob2JqKWVudi1sZHIubwotSE9TVENGTEFHU19OT1BFRCArPSBcCitIT1NUQ0ZMQUdTX05PUEVEX0FEU1AgOj0gXAogCSQoc2hlbGwgJChDUFApIC1kRCAtIC1tY3B1PSQoQ09ORklHX0JGSU5fQ1BVKSA8L2Rldi9udWxsIFwKIAkJfCBhd2sgJyQkMiB+IC9BRFNQLyB7IHByaW50ICItRCIgJCQyIH0nKQorSE9TVENGTEFHU19OT1BFRCArPSAkKEhPU1RDRkxBR1NfTk9QRURfQURTUCkKIGVsc2UKIENSRUFURV9MRFJfRU5WID0KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NwdS90cmFwcy5jIGIvYXJjaC9ibGFja2Zpbi9jcHUvdHJhcHMuYwppbmRleCAwY2I4MzNhLi4yMGFlYWI4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NwdS90cmFwcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vY3B1L3RyYXBzLmMKQEAgLTE1MCw3ICsxNTAsMTAgQEAKIAkJCQkoZGF0YSA/ICdEJyA6ICdJJyksICh2b2lkICopbmV3X2NwbGJfYWRkcik7CiAJCQliZmluX3BhbmljKHJlZ3MpOwogCQl9IGVsc2UKLQkJCWRlYnVnKCJDUExCIGFkZHIgJXAgbWF0Y2hlcyBtYXAgMHglcCAtIDB4JXBcbiIsIG5ld19jcGxiX2FkZHIsIGJmaW5fbWVtb3J5X21hcFtpXS5zdGFydCwgYmZpbl9tZW1vcnlfbWFwW2ldLmVuZCk7CisJCQlkZWJ1ZygiQ1BMQiBhZGRyICVwIG1hdGNoZXMgbWFwIDB4JXAgLSAweCVwXG4iLAorCQkJCSh2b2lkICopbmV3X2NwbGJfYWRkciwKKwkJCQkodm9pZCAqKWJmaW5fbWVtb3J5X21hcFtpXS5zdGFydCwKKwkJCQkodm9pZCAqKWJmaW5fbWVtb3J5X21hcFtpXS5lbmQpOwogCQluZXdfY3BsYl9kYXRhID0gKGRhdGEgPyBiZmluX21lbW9yeV9tYXBbaV0uZGF0YV9mbGFncyA6IGJmaW5fbWVtb3J5X21hcFtpXS5pbnN0X2ZsYWdzKTsKIAogCQlpZiAoZGF0YSkgewpAQCAtMTYzLDE2ICsxNjYsMTcgQEAKIAogCQkvKiBmaW5kIHRoZSBuZXh0IHVubG9ja2VkIGVudHJ5IGFuZCBldmljdCBpdCAqLwogCQlpID0gbGFzdF9ldmljdGVkICYgMHhGOwotCQlkZWJ1ZygibGFzdCBldmljdGVkID0gJWlcbiIsIGkpOworCQlkZWJ1ZygibGFzdCBldmljdGVkID0gJXp1XG4iLCBpKTsKIAkJQ1BMQl9EQVRBID0gQ1BMQl9EQVRBX0JBU0UgKyBpOwogCQl3aGlsZSAoKkNQTEJfREFUQSAmIENQTEJfTE9DSykgewotCQkJZGVidWcoInNraXBwaW5nICVpICVwIC0gJTA4WFxuIiwgaSwgQ1BMQl9EQVRBLCAqQ1BMQl9EQVRBKTsKKwkJCWRlYnVnKCJza2lwcGluZyAlenUgJXAgLSAlMDhYXG4iLCBpLCBDUExCX0RBVEEsICpDUExCX0RBVEEpOwogCQkJaSA9IChpICsgMSkgJiAweEY7CS8qIHdyYXAgYXJvdW5kICovCiAJCQlDUExCX0RBVEEgPSBDUExCX0RBVEFfQkFTRSArIGk7CiAJCX0KIAkJQ1BMQl9BRERSID0gQ1BMQl9BRERSX0JBU0UgKyBpOwogCi0JCWRlYnVnKCJldmljdGluZyBlbnRyeSAlaTogMHglcCAweCUwOFhcbiIsIGksICpDUExCX0FERFIsICpDUExCX0RBVEEpOworCQlkZWJ1ZygiZXZpY3RpbmcgZW50cnkgJXp1OiAweCVwIDB4JTA4WFxuIiwgaSwKKwkJCSh2b2lkICopKkNQTEJfQUREUiwgKkNQTEJfREFUQSk7CiAJCWxhc3RfZXZpY3RlZCA9IGkgKyAxOwogCiAJCS8qIG5lZWQgdG8gdHVybiBvZmYgY3BsYnMgd2hlbmV2ZXIgd2UgbXVjayB3aXRoIHRoZSBjcGxiIHRhYmxlICovCkBAIC0xOTAsNyArMTk0LDggQEAKIAkJQ1BMQl9BRERSID0gQ1BMQl9BRERSX0JBU0U7CiAJCUNQTEJfREFUQSA9IENQTEJfREFUQV9CQVNFOwogCQlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkKLQkJCWRlYnVnKCIlMmkgMHglcCAweCUwOFhcbiIsIGksICpDUExCX0FERFIrKywgKkNQTEJfREFUQSsrKTsKKwkJCWRlYnVnKCIlMnp1IDB4JXAgMHglMDhYXG4iLCBpLAorCQkJCSh2b2lkICopKkNQTEJfQUREUisrLCAqQ1BMQl9EQVRBKyspOwogCiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2JvYXJkLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9ib2FyZC5jCmluZGV4IGE3MDQ3M2MuLmUzZWU0Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2JvYXJkLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvYm9hcmQuYwpAQCAtMzA4LDcgKzMwOCw2IEBACiAKIHZvaWQgYm9hcmRfaW5pdF9yKGdkX3QgKiBpZCwgdWxvbmcgZGVzdF9hZGRyKQogewotCWNoYXIgKnM7CiAJYmRfdCAqYmQ7CiAJZ2QgPSBpZDsKIAlnZC0+ZmxhZ3MgfD0gR0RfRkxHX1JFTE9DOwkvKiB0ZWxsIG90aGVyczogcmVsb2NhdGlvbiBkb25lICovCmRpZmYgLS1naXQgYS9hcmNoL25kczMyL2NwdS9uMTIxMy91LWJvb3QubGRzIGIvYXJjaC9uZHMzMi9jcHUvbjEyMTMvdS1ib290LmxkcwppbmRleCA0NTIyMWVlLi4xOTAzNDIwIDEwMDY0NAotLS0gYS9hcmNoL25kczMyL2NwdS9uMTIxMy91LWJvb3QubGRzCisrKyBiL2FyY2gvbmRzMzIvY3B1L24xMjEzL3UtYm9vdC5sZHMKQEAgLTQxLDcgKzQxLDcgQEAKIAkucm9kYXRhIDogeyAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKSB9CiAKIAkuID0gQUxJR04oNCk7Ci0JLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuZGF0YSA6IHsgKiguZGF0YSopIH0KIAogCS4gPSBBTElHTig0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9uZHMzMi9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9uZHMzMi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDJjMTA1ZjcuLjM5YzNkYzggMTAwNjQ0Ci0tLSBhL2FyY2gvbmRzMzIvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL25kczMyL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTE2NSw2ICsxNjUsMjQgQEAKICNkZWZpbmUgX19yYXdfYmFzZV9yZWFkdyhiYXNlLCBvZmYpCV9fYXJjaF9iYXNlX2dldHcoYmFzZSwgb2ZmKQogI2RlZmluZSBfX3Jhd19iYXNlX3JlYWRsKGJhc2UsIG9mZikJX19hcmNoX2Jhc2VfZ2V0bChiYXNlLCBvZmYpCiAKKyNkZWZpbmUgb3V0X2FyY2godHlwZSwgZW5kaWFuLCBhLCB2KQlfX3Jhd193cml0ZSMjdHlwZShjcHVfdG9fIyNlbmRpYW4odiksIGEpCisjZGVmaW5lIGluX2FyY2godHlwZSwgZW5kaWFuLCBhKQllbmRpYW4jI190b19jcHUoX19yYXdfcmVhZCMjdHlwZShhKSkKKworI2RlZmluZSBvdXRfbGUzMihhLCB2KQkJCW91dF9hcmNoKGwsIGxlMzIsIGEsIHYpCisjZGVmaW5lIG91dF9sZTE2KGEsIHYpCQkJb3V0X2FyY2godywgbGUxNiwgYSwgdikKKworI2RlZmluZSBpbl9sZTMyKGEpCQkJaW5fYXJjaChsLCBsZTMyLCBhKQorI2RlZmluZSBpbl9sZTE2KGEpCQkJaW5fYXJjaCh3LCBsZTE2LCBhKQorCisjZGVmaW5lIG91dF9iZTMyKGEsIHYpCQkJb3V0X2FyY2gobCwgYmUzMiwgYSwgdikKKyNkZWZpbmUgb3V0X2JlMTYoYSwgdikJCQlvdXRfYXJjaCh3LCBiZTE2LCBhLCB2KQorCisjZGVmaW5lIGluX2JlMzIoYSkJCQlpbl9hcmNoKGwsIGJlMzIsIGEpCisjZGVmaW5lIGluX2JlMTYoYSkJCQlpbl9hcmNoKHcsIGJlMTYsIGEpCisKKyNkZWZpbmUgb3V0XzgoYSwgdikJCQlfX3Jhd193cml0ZWIodiwgYSkKKyNkZWZpbmUgaW5fOChhKQkJCQlfX3Jhd19yZWFkYihhKQorCiAvKgogICogTm93LCBwaWNrIHVwIHRoZSBtYWNoaW5lLWRlZmluZWQgSU8gZGVmaW5pdGlvbnMKICAqICNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9uZHMzMi9pbmNsdWRlL2FzbS9tYWNoLXR5cGVzLmggYi9hcmNoL25kczMyL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaAppbmRleCBhNmYxYzkzLi43YjUyYjk4IDEwMDY0NAotLS0gYS9hcmNoL25kczMyL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaAorKysgYi9hcmNoL25kczMyL2luY2x1ZGUvYXNtL21hY2gtdHlwZXMuaApAQCAtMjYsNCArMjYsMTggQEAKICMgZGVmaW5lIG1hY2hpbmVfaXNfYWRwYWcxMDEoKQkoMCkKICNlbmRpZgogCisjZGVmaW5lIE1BQ0hfVFlQRV9BRFBBRzEwMVAgICAgICAgICAgICAxCisKKyNpZmRlZiBDT05GSUdfQVJDSF9BRFBBRzEwMVAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0FEUEFHMTAxUAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hZHBhZzEwMXAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FEUEFHMTAxUCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2FkcGFnMTAxcCgpCSgxKQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0FTTV9ORFMzMl9NQUNIX1RZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uZHMzMi9saWIvYm9hcmQuYyBiL2FyY2gvbmRzMzIvbGliL2JvYXJkLmMKaW5kZXggMmZkMGU5My4uNjZlNDUzNyAxMDA2NDQKLS0tIGEvYXJjaC9uZHMzMi9saWIvYm9hcmQuYworKysgYi9hcmNoL25kczMyL2xpYi9ib2FyZC5jCkBAIC0zNTEsNiArMzUxLDExIEBACiAJbmFuZF9pbml0KCk7CQkvKiBnbyBpbml0IHRoZSBOQU5EICovCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NNRF9JREUpCisJcHV0cygiSURFOiAgICIpOworCWlkZV9pbml0KCk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19HRU5FUklDX01NQwogCXB1dHMoIk1NQzogICAiKTsKIAltbWNfaW5pdGlhbGl6ZShnZC0+YmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9jcHUvTWFrZWZpbGUgYi9hcmNoL25pb3MyL2NwdS9NYWtlZmlsZQppbmRleCBhYTQxMTYwLi40MDJmZDc0IDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL25pb3MyL2NwdS9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogU1RBUlQJPSBzdGFydC5vCiBTT0JKUwk9IGV4Y2VwdGlvbnMubwogQ09CSlMJPSBjcHUubyBpbnRlcnJ1cHRzLm8gc3lzaWQubyB0cmFwcy5vIGVwY3MubworQ09CSlMJKz0gZmR0Lm8KIAogU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2NwdS9jcHUuYyBiL2FyY2gvbmlvczIvY3B1L2NwdS5jCmluZGV4IGVmMzYwZWUuLmVkZjI1NjAxIDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2NwdS9jcHUuYworKysgYi9hcmNoL25pb3MyL2NwdS9jcHUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPG5pb3MyLmg+CiAjaW5jbHVkZSA8bmlvczItaW8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAogI2lmIGRlZmluZWQgKENPTkZJR19TWVNfTklPU19TWVNJRF9CQVNFKQogZXh0ZXJuIHZvaWQgZGlzcGxheV9zeXNpZCAodm9pZCk7CkBAIC00NywzICs0OCwxOCBAQAogCW5pb3MyX2NhbGxyKENPTkZJR19TWVNfUkVTRVRfQUREUik7CiAJcmV0dXJuIDA7CiB9CisKK2ludCBkY2FjaGVfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZGNhY2hlX2VuYWJsZSh2b2lkKQoreworCWZsdXNoX2RjYWNoZShDT05GSUdfU1lTX0RDQUNIRV9TSVpFLCBDT05GSUdfU1lTX0RDQUNIRUxJTkVfU0laRSk7Cit9CisKK3ZvaWQgZGNhY2hlX2Rpc2FibGUodm9pZCkKK3sKKwlmbHVzaF9kY2FjaGUoQ09ORklHX1NZU19EQ0FDSEVfU0laRSwgQ09ORklHX1NZU19EQ0FDSEVMSU5FX1NJWkUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9jcHUvZmR0LmMgYi9hcmNoL25pb3MyL2NwdS9mZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWVkOWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9uaW9zMi9jcHUvZmR0LmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMSwgTWlzc2luZyBMaW5rIEVsZWN0cm9uaWNzCisgKiAgICAgICAgICAgICAgICAgICAgIEpvYWNoaW0gRm9lcnN0ZXIgPGpvYWNoaW1AbWlzc2luZ2xpbmtlbGVjdHJvbmljcy5jb20+CisgKgorICogVGFrZW4gZnJvbSBhcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9mZHQuYzoKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDctMjAwOAorICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8bGliZmR0X2Vudi5oPgorI2luY2x1ZGUgPGZkdF9zdXBwb3J0Lmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCit2b2lkIF9fZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCit7CisJZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKK30KK3ZvaWQgZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpIFwKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19mdF9ib2FyZF9zZXR1cCIpKSk7CisKK3ZvaWQgZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCS8qCisJICogRml4dXAgYWxsIGV0aGVybmV0IG5vZGVzCisJICogTm90ZTogYWxpYXNlcyBpbiB0aGUgZHRzIGFyZSByZXF1aXJlZCBmb3IgdGhpcworCSAqLworCWZkdF9maXh1cF9ldGhlcm5ldChibG9iKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfT0ZfTElCRkRUICYmIENPTkZJR19PRl9CT0FSRF9TRVRVUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCA0YjIxYzhmLi45MDgzODFmIDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtNSw4ICs1LDggQEAKICAqIGJpdFswXSBkYXRhCiAgKiBiaXRbMV0gb3V0cHV0IGVuYWJsZQogICoKLSAqIHdoZW4gQ09ORklHX1NZU19HUElPX0JBU0UgaXMgbm90IGRlZmluZWQsIGJvYXJkIG1heSBwcm92aWRlCi0gKiBpdHMgb3duIGRyaXZlci4KKyAqIFdoZW4gQ09ORklHX1NZU19HUElPX0JBU0UgaXMgbm90IGRlZmluZWQsIHRoZSBib2FyZCBtYXkgZWl0aGVyCisgKiBwcm92aWRlIGl0cyBvd24gZHJpdmVyIG9yIHRoZSBhbHRlcmFfcGlvIGRyaXZlciBtYXkgYmUgdXNlZC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PgogICoKQEAgLTU4LDYgKzU4LDE1IEBACiAJcmV0dXJuICgodW5zaWduZWQpbnVtYmVyKSA8IENPTkZJR19TWVNfR1BJT19XSURUSDsKIH0KICNlbHNlCisjaWZkZWYgQ09ORklHX0FMVEVSQV9QSU8KK2V4dGVybiBpbnQgYWx0ZXJhX3Bpb19pbml0KHUzMiBiYXNlLCB1OCB3aWR0aCwgY2hhciBpb3QsCisJCQkgICB1MzIgcnN0dmFsLCB1MzIgbmVnbWFzaywKKwkJCSAgIGNvbnN0IGNoYXIgKmxhYmVsKTsKKworZXh0ZXJuIHZvaWQgYWx0ZXJhX3Bpb19pbmZvKHZvaWQpOworI2RlZmluZSBncGlvX3N0YXR1cygpIGFsdGVyYV9waW9faW5mbygpCisjZW5kaWYKKwogZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwogZXh0ZXJuIGludCBncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7CiBleHRlcm4gaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L2kyYy5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L2kyYy5jCmluZGV4IGUyZDkwOTcuLjBlYTEyODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC9pMmMuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvaTJjLmMKQEAgLTc4LDkgKzc4LDggQEAKIAlzdGF0dXMgPSBtcGNfcmVnX2luICgmcmVncy0+bXNyKTsKIAogCXdoaWxlICh0aW1lb3V0LS0gJiYgKHN0YXR1cyAmIEkyQ19CQikpIHsKLQkJdm9sYXRpbGUgaW50IHRlbXA7CiAJCW1wY19yZWdfb3V0ICgmcmVncy0+bWNyLCBJMkNfU1RBLCBJMkNfU1RBKTsKLQkJdGVtcCA9IG1wY19yZWdfaW4gKCZyZWdzLT5tZHIpOworCQkodm9pZCltcGNfcmVnX2luKCZyZWdzLT5tZHIpOwogCQltcGNfcmVnX291dCAoJnJlZ3MtPm1jciwgMCwgSTJDX1NUQSk7CiAJCW1wY19yZWdfb3V0ICgmcmVncy0+bWNyLCAwLCAwKTsKIAkJbXBjX3JlZ19vdXQgKCZyZWdzLT5tY3IsIEkyQ19FTiwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvcGNpLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvcGNpLmMKaW5kZXggMTQxZGI4Yi4uMTZmMDM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC9wY2kuYwpAQCAtNTIsNyArNTIsNiBAQAogCXZvbGF0aWxlIGxhdzUxMnhfdCAqcGNpX2xhdzsKIAl2b2xhdGlsZSBwb3Q1MTJ4X3QgKnBjaV9wb3Q7CiAJdm9sYXRpbGUgcGNpY3RybDUxMnhfdCAqcGNpX2N0cmw7Ci0Jdm9sYXRpbGUgcGNpY29uZjUxMnhfdCAqcGNpX2NvbmY7CiAJdTE2IHJlZzE2OwogCXUzMiByZWczMjsKIAl1MzIgZGV2OwpAQCAtNzMsNyArNzIsNiBAQAogCXBjaV9sYXcgPSBpbS0+c3lzY29uZi5wY2lsYXc7CiAJcGNpX3BvdCA9IGltLT5pb3MucG90OwogCXBjaV9jdHJsID0gJmltLT5wY2lfY3RybDsKLQlwY2lfY29uZiA9ICZpbS0+cGNpX2NvbmY7CiAKIAlob3NlID0gJnBjaV9ob3NlOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvc3BkX3NkcmFtLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvc3BkX3NkcmFtLmMKaW5kZXggMzg1NWJmZC4uMDRkNTE5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3NwZF9zZHJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC9zcGRfc2RyYW0uYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJdW5zaWduZWQgaW50IG1lbXNpemU7CiAJdW5zaWduZWQgaW50IGxhd19zaXplOwogCXVuc2lnbmVkIGNoYXIgY2FzbGF0LCBjYXNsYXRfY3RybDsKLQl1bnNpZ25lZCBpbnQgdHJmYywgdHJmY19jbGssIHRyZmNfbG93LCB0cmZjX2hpZ2g7CisJdW5zaWduZWQgaW50IHRyZmMsIHRyZmNfY2xrLCB0cmZjX2xvdzsKIAl1bnNpZ25lZCBpbnQgdHJjZF9jbGssIHRydHBfY2xrOwogCXVuc2lnbmVkIGNoYXIgY2tlX21pbl9jbGs7CiAJdW5zaWduZWQgY2hhciBhZGRfbGF0LCB3cl9sYXQ7CkBAIC01NDIsNyArNTQyLDYgQEAKIAkgKiBzbyBwcmVhZGp1c3QgaXQgZG93biA4IGZpcnN0IGJlZm9yZSBzcGxpdHRpbmcgaXQgdXAuCiAJICovCiAJdHJmY19sb3cgPSAodHJmY19jbGsgLSA4KSAmIDB4ZjsKLQl0cmZjX2hpZ2ggPSAoKHRyZmNfY2xrIC0gOCkgPj4gNCkgJiAweDM7CiAKIAlkZHItPnRpbWluZ19jZmdfMSA9CiAJICAgICgoKHBpY29zX3RvX2NsayhzcGQudHJwICogMjUwKSAmIDB4MDcpIDw8IDI4ICkgfAkvKiBQUkVUT0FDVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NtZF9lcnJhdGEuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jbWRfZXJyYXRhLmMKaW5kZXggYTA5ZWI5MS4uMjUzYmYwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NtZF9lcnJhdGEuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY21kX2VycmF0YS5jCkBAIC0xMDMsNiArMTAzLDEwIEBACiAjaWZkZWYgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9OTUdfTEJDMTAzCiAJcHV0cygiV29yay1hcm91bmQgZm9yIEVycmF0dW0gTk1HX0xCQzEwMyBlbmFibGVkXG4iKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fTk1HX0VUU0VDMTI5CisJaWYgKChTVlJfTUFKKHN2cikgPT0gMSkgfHwgSVNfU1ZSX1JFVihzdnIsIDIsIDApKQorCQlwdXRzKCJXb3JrLWFyb3VuZCBmb3IgRXJyYXR1bSBOTUcgRVRTRUMxMjkgZW5hYmxlZFxuIik7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY3B1X2luaXQuYwppbmRleCAwYTRjZTUzLi5iOWE4MTkzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY3B1X2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvY3B1X2luaXQuYwpAQCAtMzE3LDcgKzMxNyw2IEBACiAJdm9sYXRpbGUgY2Nzcl9sMmNhY2hlX3QgKmwyY2FjaGUgPSAodm9pZCAqKUNPTkZJR19TWVNfTVBDODV4eF9MMl9BRERSOwogCXZvbGF0aWxlIHVpbnQgY2FjaGVfY3RsOwogCXVpbnQgc3ZyLCB2ZXI7Ci0JdWludCBsMnNyYmFyOwogCXUzMiBsMnNpel9maWVsZDsKIAogCXN2ciA9IGdldF9zdnIoKTsKQEAgLTM4NSw4ICszODQsOCBAQAogCiAJaWYgKGwyY2FjaGUtPmwyY3RsICYgTVBDODV4eF9MMkNUTF9MMkUpIHsKIAkJcHV0cygiYWxyZWFkeSBlbmFibGVkIik7Ci0JCWwyc3JiYXIgPSBsMmNhY2hlLT5sMnNyYmFyMDsKICNpZiBkZWZpbmVkKENPTkZJR19TWVNfSU5JVF9MMl9BRERSKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfRkxBU0hfQkFTRSkKKwkJdTMyIGwyc3JiYXIgPSBsMmNhY2hlLT5sMnNyYmFyMDsKIAkJaWYgKGwyY2FjaGUtPmwyY3RsICYgTVBDODV4eF9MMkNUTF9MMlNSQU1fRU5USVJFCiAJCQkJJiYgbDJzcmJhciA+PSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UpIHsKIAkJCWwyc3JiYXIgPSBDT05GSUdfU1lTX0lOSVRfTDJfQUREUjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9jcHVfaW5pdF9lYXJseS5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKaW5kZXggNGVmM2M5YS4uMDkxYWY3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2NwdV9pbml0X2Vhcmx5LmMKQEAgLTcxLDcgKzcxLDcgQEAKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1NZU19GU0xfRVJSQVRVTV9JRkNfQTAwMzM5OSkgJiYgIWRlZmluZWQoQ09ORklHX1NZU19SQU1CT09UKQogCWNjc3JfbDJjYWNoZV90ICpsMmNhY2hlID0gKHZvaWQgKilDT05GSUdfU1lTX01QQzg1eHhfTDJfQUREUjsKLQl1MzIgICpsMnNyYmFyLCAqZHN0LCAqc3JjOworCXUzMiAgKmRzdCwgKnNyYzsKIAl2b2lkICgqc2V0dXBfaWZjX3NyYW0pKHZvaWQpOwogI2VuZGlmCiAKQEAgLTEzNyw3ICsxMzcsNyBAQAogCWRzdCA9ICh1MzIgKikgU1JBTV9CQVNFX0FERFI7CiAJc3JjID0gKHUzMiAqKSBzZXR1cF9pZmM7CiAJZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLQkJKmwyc3JiYXIrKyA9ICpzcmMrKzsKKwkJKmRzdCsrID0gKnNyYysrOwogCiAJc2V0dXBfaWZjX3NyYW0oKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZzbF9jb3JlbmV0X3NlcmRlcy5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L2ZzbF9jb3JlbmV0X3NlcmRlcy5jCmluZGV4IDg5ZWQ1YjQuLjRiNTJkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9mc2xfY29yZW5ldF9zZXJkZXMuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvZnNsX2NvcmVuZXRfc2VyZGVzLmMKQEAgLTQ5NSw3ICs0OTUsNiBAQAogCWludCBjZmc7CiAJc2VyZGVzX2NvcmVuZXRfdCAqc3Jkc19yZWdzOwogCWludCBsYW5lLCBiYW5rLCBpZHg7Ci0JZW51bSBzcmRzX3BydGNsIGxhbmVfcHJ0Y2w7CiAJaW50IGhhdmVfYmFua1tTUkRTX01BWF9CQU5LXSA9IHt9OwogI2lmZGVmIENPTkZJR19TWVNfUDQwODBfRVJSQVRVTV9TRVJERVM4CiAJdTMyIHNlcmRlczhfZGV2ZGlzciA9IDA7CkBAIC01MDcsNiArNTA2LDcgQEAKICNpZmRlZiBDT05GSUdfU1lTX1A0MDgwX0VSUkFUVU1fU0VSREVTX0EwMDEKIAlpbnQgbmVlZF9zZXJkZXNfYTAwMTsJLyogVFJVRSA9PSBuZWVkIHdvcmstYXJvdW5kIGZvciBTRVJERVMgQTAwMSAqLwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU19QNDA4MF9FUlJBVFVNX1NFUkRFUzgKIAljaGFyIGJ1ZmZlcltIV0NPTkZJR19CVUZGRVJfU0laRV07CiAJY2hhciAqYnVmID0gTlVMTDsKIApAQCAtNTE2LDYgKzUxNiw3IEBACiAJICovCiAJaWYgKGdldGVudl9mKCJod2NvbmZpZyIsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpID4gMCkKIAkJYnVmID0gYnVmZmVyOworI2VuZGlmCiAKIAkvKiBJcyBzZXJkZXMgZW5hYmxlZCBhdCBhbGw/ICovCiAJaWYgKCEoaW5fYmUzMigmZ3VyLT5yY3dzcls1XSkgJiBGU0xfQ09SRU5FVF9SQ1dTUjVfU1JEU19FTikpCkBAIC02MTcsNyArNjE4LDEwIEBACiAJCX0KIAl9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfUDQwODBfRVJSQVRVTV9TRVJERVM4KSB8fCBkZWZpbmVkIChDT05GSUdfU1lTX1A0MDgwX0VSUkFUVU1fU0VSREVTOSkKIAlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgU1JEU19NQVhfTEFORVM7IGxhbmUrKykgeworCQllbnVtIHNyZHNfcHJ0Y2wgbGFuZV9wcnRjbDsKKwogCQlpZHggPSBzZXJkZXNfZ2V0X2xhbmVfaWR4KGxhbmUpOwogCQlsYW5lX3BydGNsID0gc2VyZGVzX2dldF9wcnRjbChjZmcsIGxhbmUpOwogCkBAIC03MjksNiArNzMzLDcgQEAKIAogI2VuZGlmCiAJfQorI2VuZGlmCiAKICNpZmRlZiBERUJVRwogCXB1dHMoIlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvc3RhcnQuUyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9zdGFydC5TCmluZGV4IDVlMGQ3OGQuLjdiZDVjYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9zdGFydC5TCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC9zdGFydC5TCkBAIC0zMTksNiArMzE5LDU1IEBACiAjZW5kaWYgLyogQ09ORklHX01QQzg1NjkgKi8KIAogLyoKKyAqIFNlYXJjaCBmb3IgdGhlIFRMQiB0aGF0IGNvdmVycyB0aGUgY29kZSB3ZSdyZSBleGVjdXRpbmcsIGFuZCBzaHJpbmsgaXQKKyAqIHNvIHRoYXQgaXQgY292ZXJzIG9ubHkgdGhpcyA0SyBwYWdlLiAgVGhhdCB3aWxsIGVuc3VyZSB0aGF0IGFueSBvdGhlcgorICogVExCIHdlIGNyZWF0ZSB3b24ndCBpbnRlcmZlcmUgd2l0aCBpdC4gIFdlIGFzc3VtZSB0aGF0IHRoZSBUTEIgZXhpc3RzLAorICogd2hpY2ggaXMgd2h5IHdlIGRvbid0IGNoZWNrIHRoZSBWYWxpZCBiaXQgb2YgTUFTMS4KKyAqCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsIHdoZW4gYm9vdGluZyBmcm9tIHRoZSBvbi1jaGlwIFJPTSwKKyAqIHdoaWNoIChvZGRseSkgY3JlYXRlcyBhIHNpbmdsZSA0R0IgVExCIHRoYXQgY292ZXJzIENDU1IgYW5kIEREUi4KKyAqIElmIHdlIGRvbid0IHNocmluayB0aGlzIFRMQiBub3csIHRoZW4gd2UnbGwgYWNjaWRlbnRhbGx5IGRlbGV0ZSBpdAorICogaW4gInB1cmdlX29sZF9jY3NyX3RsYiIgYmVsb3cuCisgKi8KKwlibAluZXh0aQkJLyogRmluZCBvdXIgYWRkcmVzcyAqLworbmV4dGk6CW1mbHIJcjEJCS8qIFIxID0gb3VyIFBDICovCisJbGkJcjIsIDAKKwltdHNwcglNQVM2LCByMgkvKiBBc3N1bWUgdGhlIGN1cnJlbnQgUElEIGFuZCBBUyBhcmUgMCAqLworCWlzeW5jCisJbXN5bmMKKwl0bGJzeAkwLCByMQkJLyogVGhpcyBtdXN0IHN1Y2NlZWQgKi8KKworCS8qIFNldCB0aGUgc2l6ZSBvZiB0aGUgVExCIHRvIDRLQiAqLworCW1mc3ByCXIzLCBNQVMxCisJbGkJcjIsIDB4RjAwCisJYW5kYwlyMywgcjMsIHIyCS8qIENsZWFyIHRoZSBUU0laRSBiaXRzICovCisJb3JpCXIzLCByMywgTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspQGwKKwltdHNwcglNQVMxLCByMworCisJLyoKKwkgKiBTZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVExCIHRvIG91ciBQQy4gIFdlIGFzc3VtZSB0aGF0CisJICogdmlydHVhbCA9PSBwaHlzaWNhbC4gIFdlIGFsc28gYXNzdW1lIHRoYXQgTUFTMl9FUE4gPT0gTUFTM19SUE4uCisJICovCisJbGlzCXIzLCBNQVMyX0VQTkBoCisJb3JpCXIzLCByMywgTUFTMl9FUE5AbAkvKiBSMyA9IE1BUzJfRVBOICovCisKKwlhbmQJcjEsIHIxLCByMwkvKiBPdXIgUEMsIHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBwYWdlICovCisKKwltZnNwcglyMiwgTUFTMgorCWFuZGMJcjIsIHIyLCByMworCW9yCXIyLCByMiwgcjEKKwltdHNwcglNQVMyLCByMgkvKiBTZXQgdGhlIEVQTiB0byBvdXIgUEMgYmFzZSBhZGRyZXNzICovCisKKwltZnNwcglyMiwgTUFTMworCWFuZGMJcjIsIHIyLCByMworCW9yCXIyLCByMiwgcjEKKwltdHNwcglNQVMzLCByMgkvKiBTZXQgdGhlIFJQTiB0byBvdXIgUEMgYmFzZSBhZGRyZXNzICovCisKKwlpc3luYworCW1zeW5jCisJdGxid2UKKworLyoKICAqIFJlbG9jYXRlIENDU1IsIGlmIG5lY2Vzc2FyeS4gIFdlIHJlbG9jYXRlIENDU1IgaWYgKG9idmlvdXNseSkgdGhlIGRlZmF1bHQKICAqIGxvY2F0aW9uIGlzIG5vdCB3aGVyZSB3ZSB3YW50IGl0LiAgVGhpcyB0eXBpY2FsbHkgaGFwcGVucyBvbiBhIDM2LWJpdAogICogc3lzdGVtLCB3aGVyZSB3ZSB3YW50IHRvIG1vdmUgQ0NTUiB0byBuZWFyIHRoZSB0b3Agb2YgMzYtYml0IGFkZHJlc3Mgc3BhY2UuCkBAIC0zNTIsNiArNDAxLDggQEAKIAogCWxpCXIxLCAwCiAJbXRzcHIJTUFTNiwgcjEJLyogU2VhcmNoIHRoZSBjdXJyZW50IGFkZHJlc3Mgc3BhY2UgYW5kIFBJRCAqLworCWlzeW5jCisJbXN5bmMKIAl0bGJzeAkwLCByOAogCW1mc3ByCXIxLCBNQVMxCiAJYW5kaXMuICByMiwgcjEsIE1BUzFfVkFMSURAaAkvKiBDaGVjayBmb3IgdGhlIFZhbGlkIGJpdCAqLwpAQCAtMzU5LDYgKzQxMCw4IEBACiAKIAlybHdpbm0JcjEsIHIxLCAwLCAxLCAzMQkvKiBDbGVhciBWYWxpZCBiaXQgKi8KIAltdHNwcglNQVMxLCByMQorCWlzeW5jCisJbXN5bmMKIAl0bGJ3ZQogMToKIApAQCAtMzg3LDcgKzQ0MCw3IEBACiAJdGxid2UKIAogCS8qCi0JICogQ3JlYXRlIGEgVExCIGZvciB0aGUgb2xkIGxvY2F0aW9uIG9mIENDU1IuICBSZWdpc3RlciBSOSBpcyByZXNlcnZlZAorCSAqIENyZWF0ZSBhIFRMQiBmb3IgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgQ0NTUi4gIFJlZ2lzdGVyIFI5IGlzIHJlc2VydmVkCiAJICogZm9yIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhpcyBUTEIgKENPTkZJR19TWVNfQ0NTUkJBUiArIDB4MTAwMCkuCiAJICovCiBjcmVhdGVfY2Nzcl9vbGRfdGxiOgpAQCAtNDA3LDYgKzQ2MCwzMyBAQAogCW1zeW5jCiAJdGxid2UKIAorCS8qCisJICogV2UgaGF2ZSBhIFRMQiBmb3Igd2hhdCB3ZSB0aGluayBpcyB0aGUgY3VycmVudCAob2xkKSBDQ1NSLiAgTGV0J3MKKwkgKiB2ZXJpZnkgdGhhdCwgb3RoZXJ3aXNlIHdlIHdvbid0IGJlIGFibGUgdG8gbW92ZSBpdC4KKwkgKiBDT05GSUdfU1lTX0NDU1JCQVJfREVGQVVMVCBpcyBhbHdheXMgYSAzMi1iaXQgbnVtYmVyLCBzbyB3ZSBvbmx5CisJICogbmVlZCB0byBjb21wYXJlIHRoZSBsb3dlciAzMiBiaXRzIG9mIENDU1JCQVIgb24gQ29yZU5ldCBzeXN0ZW1zLgorCSAqLwordmVyaWZ5X29sZF9jY3NyOgorCWxpcyAgICAgcjAsIENPTkZJR19TWVNfQ0NTUkJBUl9ERUZBVUxUQGgKKwlvcmkgICAgIHIwLCByMCwgQ09ORklHX1NZU19DQ1NSQkFSX0RFRkFVTFRAbAorI2lmZGVmIENPTkZJR19GU0xfQ09SRU5FVAorCWx3eglyMSwgNChyOSkJCS8qIENDU1JCQVJMICovCisjZWxzZQorCWx3eglyMSwgMChyOSkJCS8qIENDU1JCQVIsIHNoaWZ0ZWQgcmlnaHQgYnkgMTIgKi8KKwlzbHdpCXIxLCByMSwgMTIKKyNlbmRpZgorCisJY21wbAkwLCByMCwgcjEKKworCS8qCisJICogSWYgdGhlIHZhbHVlIHdlIHJlYWQgZnJvbSBDQ1NSQkFSTCBpcyBub3Qgd2hhdCB3ZSBleHBlY3QsIHRoZW4KKwkgKiBlbnRlciBhbiBpbmZpbml0ZSBsb29wLiAgVGhpcyB3aWxsIGF0IGxlYXN0IGFsbG93IGEgZGVidWdnZXIgdG8KKwkgKiBoYWx0IGV4ZWN1dGlvbiBhbmQgZXhhbWluZSBUTEJzLCBldGMuICBUaGVyZSdzIG5vIHBvaW50IGluIGdvaW5nCisJICogb24uCisJICovCitpbmZpbml0ZV9kZWJ1Z19sb29wOgorCWJuZQlpbmZpbml0ZV9kZWJ1Z19sb29wCisKICNpZmRlZiBDT05GSUdfRlNMX0NPUkVORVQKIAogI2RlZmluZSBDQ1NSX0xBV0JBUkgwCShDT05GSUdfU1lTX0NDU1JCQVIgKyAweDEwMDApCkBAIC00NDYsNyArNTI2LDcgQEAKIAkgKi8KIHJlYWRfb2xkX2Njc3JiYXI6CiAJbHd6CXIwLCAwKHI5KQkvKiBDQ1NSQkFSSCAqLwotCWx3eglyMCwgNChyOSkJLyogQ0NTUkJBUkggKi8KKwlsd3oJcjAsIDQocjkpCS8qIENDU1JCQVJMICovCiAJaXN5bmMKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdGxiLmMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdGxiLmMKaW5kZXggMDFhMzU2MS4uOTI5ZjZhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC90bGIuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIHZvaWQgZGlzYWJsZV90bGIodTggZXNlbCkKIHsKLQl1MzIgX21hczAsIF9tYXMxLCBfbWFzMiwgX21hczMsIF9tYXM3OworCXUzMiBfbWFzMCwgX21hczEsIF9tYXMyLCBfbWFzMzsKIAogCWZyZWVfdGxiX2NhbShlc2VsKTsKIApAQCAtMTgwLDE0ICsxODAsMTMgQEAKIAlfbWFzMSA9IDA7CiAJX21hczIgPSAwOwogCV9tYXMzID0gMDsKLQlfbWFzNyA9IDA7CiAKIAltdHNwcihNQVMwLCBfbWFzMCk7CiAJbXRzcHIoTUFTMSwgX21hczEpOwogCW10c3ByKE1BUzIsIF9tYXMyKTsKIAltdHNwcihNQVMzLCBfbWFzMyk7CiAjaWZkZWYgQ09ORklHX0VOQUJMRV8zNkJJVF9QSFlTCi0JbXRzcHIoTUFTNywgX21hczcpOworCW10c3ByKE1BUzcsIDApOwogI2VuZGlmCiAJYXNtIHZvbGF0aWxlKCJpc3luYzttc3luYzt0bGJ3ZTtpc3luYyIpOwogCkBAIC0yNTIsMTYgKzI1MSwyMCBAQAogCXVuc2lnbmVkIGludCB0bGJfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgd2ltZ2UgPSAwOwogCXVuc2lnbmVkIGludCByYW1fdGxiX2FkZHJlc3MgPSAodW5zaWduZWQgaW50KUNPTkZJR19TWVNfRERSX1NEUkFNX0JBU0U7Ci0JdW5zaWduZWQgaW50IG1heF9jYW0gPSAobWZzcHIoU1BSTl9UTEIxQ0ZHKSA+PiAxNikgJiAweGY7CisJdW5zaWduZWQgaW50IG1heF9jYW07CiAJdTY0IHNpemUsIG1lbXNpemUgPSAodTY0KW1lbXNpemVfaW5fbWVnIDw8IDIwOwogCiAjaWZkZWYgQ09ORklHX1NZU19QUENfRERSX1dJTUdFCiAJd2ltZ2UgPSBDT05GSUdfU1lTX1BQQ19ERFJfV0lNR0U7CiAjZW5kaWYKIAlzaXplID0gbWluKG1lbXNpemUsIENPTkZJR19NQVhfTUVNX01BUFBFRCk7Ci0KLQkvKiBDb252ZXJ0ICg0Xm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLwotCW1heF9jYW0gPSBtYXhfY2FtICogMiArIDEwOworCWlmICgobWZzcHIoU1BSTl9NTVVDRkcpICYgTU1VQ0ZHX01BVk4pID09IE1NVUNGR19NQVZOX1YxKSB7CisJCS8qIENvbnZlcnQgKDRebWF4KSBrQiB0byAoMl5tYXgpIGJ5dGVzICovCisJCW1heF9jYW0gPSAoKG1mc3ByKFNQUk5fVExCMUNGRykgPj4gMTYpICYgMHhmKSAqIDIgKyAxMDsKKwl9IGVsc2UgeworCQkvKiBDb252ZXJ0ICgyXm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLworCQltYXhfY2FtID0gX19pbG9nMihtZnNwcihTUFJOX1RMQjFQUykpICsgMTA7CisJfQogCiAJZm9yIChpID0gMDsgc2l6ZSAmJiBpIDwgODsgaSsrKSB7CiAJCWludCByYW1fdGxiX2luZGV4ID0gZmluZF9mcmVlX3RsYmNhbSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvdmlkZW8uYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4L3ZpZGVvLmMKaW5kZXggNzcyNWM2Ny4uMWJiZjRjYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHgvdmlkZW8uYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eC92aWRlby5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDx2aWRlb19mb250Lmg+CQkJLyogR2V0IGZvbnQgZGF0YSwgd2lkdGggYW5kIGhlaWdodCAqLworI2luY2x1ZGUgPHZpZGVvX2ZvbnRfZGF0YS5oPgogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0xPR08KICNpbmNsdWRlIDx2aWRlb19sb2dvLmg+CQkJLyogR2V0IGxvZ28gZGF0YSwgd2lkdGggYW5kIGhlaWdodCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2Rkci9jdHJsX3JlZ3MuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9kZHIvY3RybF9yZWdzLmMKaW5kZXggMTVjZDM3NS4uMjA2N2Q1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2Rkci9jdHJsX3JlZ3MuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvZGRyL2N0cmxfcmVncy5jCkBAIC02NzIsNyArNjcyLDYgQEAKIAkJcmN3X2VuID0gMTsKIAkJYXBfZW4gPSBwb3B0cy0+YXBfZW47CiAJfSBlbHNlIHsKLQkJcmN3X2VuID0gMDsKIAkJYXBfZW4gPSAwOwogCX0KIApAQCAtNzAyLDkgKzcwMSw3IEBACiAJCXwgKChvYmNfY2ZnICYgMHgxKSA8PCA2KQogCQl8ICgoYXBfZW4gJiAweDEpIDw8IDUpCiAJCXwgKChkX2luaXQgJiAweDEpIDw8IDQpCi0jaWZkZWYgQ09ORklHX0ZTTF9ERFIzCiAJCXwgKChyY3dfZW4gJiAweDEpIDw8IDIpCi0jZW5kaWYKIAkJfCAoKG1kX2VuICYgMHgxKSA8PCAwKQogCQkpOwogCWRlYnVnKCJGU0xERFI6IGRkcl9zZHJhbV9jZmdfMiA9IDB4JTA4eFxuIiwgZGRyLT5kZHJfc2RyYW1fY2ZnXzIpOwpAQCAtNzQ1LDcgKzc0Miw3IEBACiAKICNpZmRlZiBDT05GSUdfRlNMX0REUjMKIAlpZiAodW5xX21yc19lbikgewkvKiB1bmlxdWUgbW9kZSByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZCAqLwotCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKSB7CisJCWZvciAoaSA9IDE7IGkgPCBDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMOyBpKyspIHsKIAkJCWlmIChwb3B0cy0+cnR0X292ZXJyaWRlKQogCQkJCXJ0dF93ciA9IHBvcHRzLT5ydHRfd3Jfb3ZlcnJpZGVfdmFsdWU7CiAJCQllbHNlCkBAIC05NDQsNyArOTQxLDcgQEAKIAlkZWJ1ZygiRlNMRERSOiBkZHJfc2RyYW1fbW9kZSA9IDB4JTA4eFxuIiwgZGRyLT5kZHJfc2RyYW1fbW9kZSk7CiAKIAlpZiAodW5xX21yc19lbikgewkvKiB1bmlxdWUgbW9kZSByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZCAqLwotCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKSB7CisJCWZvciAoaSA9IDE7IGkgPCBDT05GSUdfQ0hJUF9TRUxFQ1RTX1BFUl9DVFJMOyBpKyspIHsKIAkJCWlmIChwb3B0cy0+cnR0X292ZXJyaWRlKQogCQkJCXJ0dCA9IHBvcHRzLT5ydHRfb3ZlcnJpZGVfdmFsdWU7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvZGRyL29wdGlvbnMuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9kZHIvb3B0aW9ucy5jCmluZGV4IDRkYzc0OGIuLjAwZWM1N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9kZHIvb3B0aW9ucy5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9kZHIvb3B0aW9ucy5jCkBAIC00ODMsNyArNDgzLDkgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAljaGFyIGJ1ZmZlcltIV0NPTkZJR19CVUZGRVJfU0laRV07CiAJY2hhciAqYnVmID0gTlVMTDsKKyNpZiBkZWZpbmVkKENPTkZJR19GU0xfRERSMykgfHwgZGVmaW5lZChDT05GSUdfRlNMX0REUjIpCiAJY29uc3Qgc3RydWN0IGR5bmFtaWNfb2R0ICpwZG9kdCA9IG9kdF91bmtub3duOworI2VuZGlmCiAJdWxvbmcgZGRyX2ZyZXE7CiAKIAkvKgpAQCAtNDkzLDYgKzQ5NSw3IEBACiAJaWYgKGdldGVudl9mKCJod2NvbmZpZyIsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpID4gMCkKIAkJYnVmID0gYnVmZmVyOwogCisjaWYgZGVmaW5lZChDT05GSUdfRlNMX0REUjMpIHx8IGRlZmluZWQoQ09ORklHX0ZTTF9ERFIyKQogCS8qIENoaXAgc2VsZWN0IG9wdGlvbnMuICovCiAJaWYgKENPTkZJR19ESU1NX1NMT1RTX1BFUl9DVExSID09IDEpIHsKIAkJc3dpdGNoIChwZGltbVswXS5uX3JhbmtzKSB7CkBAIC01NDYsNiArNTQ5LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorI2VuZGlmCiAKIAkvKiBQaWNrIGNoaXAtc2VsZWN0IGxvY2FsIG9wdGlvbnMuICovCiAJZm9yIChpID0gMDsgaSA8IENPTkZJR19DSElQX1NFTEVDVFNfUEVSX0NUUkw7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2ZkdC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2ZkdC5jCmluZGV4IDExMmM2MDMuLmQwN2FlMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9mZHQuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvZmR0LmMKQEAgLTg3LDEzICs4NywxMiBAQAogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01QQzg1eHgpIHx8IGRlZmluZWQoQ09ORklHX01QQzg2eHgpICovCiAKICNpZmRlZiBDT05GSUdfSEFTX0ZTTF9EUl9VU0IKLXN0YXRpYyB2b2lkIGZkdF9maXh1cF91c2JfbW9kZV9waHlfdHlwZSh2b2lkICpibG9iLCBjb25zdCBjaGFyICptb2RlLAotCQkJCWNvbnN0IGNoYXIgKnBoeV90eXBlKQorc3RhdGljIGludCBmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUodm9pZCAqYmxvYiwgY29uc3QgY2hhciAqbW9kZSwKKwkJCQljb25zdCBjaGFyICpwaHlfdHlwZSwgaW50IHN0YXJ0X29mZnNldCkKIHsKIAljb25zdCBjaGFyICpjb21wYXQgPSAiZnNsLXVzYjItZHIiOwogCWNvbnN0IGNoYXIgKnByb3BfbW9kZSA9ICJkcl9tb2RlIjsKIAljb25zdCBjaGFyICpwcm9wX3R5cGUgPSAicGh5X3R5cGUiOwotCXN0YXRpYyBpbnQgc3RhcnRfb2Zmc2V0ID0gLTE7CiAJaW50IG5vZGVfb2Zmc2V0OwogCWludCBlcnI7CiAKQEAgLTEwMiw3ICsxMDEsNyBAQAogCWlmIChub2RlX29mZnNldCA8IDApIHsKIAkJcHJpbnRmKCJXQVJOSU5HOiBjb3VsZCBub3QgZmluZCBjb21wYXRpYmxlIG5vZGUgJXM6ICVzLlxuIiwKIAkJCWNvbXBhdCwgZmR0X3N0cmVycm9yKG5vZGVfb2Zmc2V0KSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC0xOwogCX0KIAogCWlmIChtb2RlKSB7CkBAIC0xMjEsMTYgKzEyMCwxOCBAQAogCQkJICAgICAgIHByb3BfdHlwZSwgY29tcGF0LCBmZHRfc3RyZXJyb3IoZXJyKSk7CiAJfQogCi0Jc3RhcnRfb2Zmc2V0ID0gbm9kZV9vZmZzZXQ7CisJcmV0dXJuIG5vZGVfb2Zmc2V0OwogfQogCiB2b2lkIGZkdF9maXh1cF9kcl91c2Iodm9pZCAqYmxvYiwgYmRfdCAqYmQpCiB7CiAJY29uc3QgY2hhciAqbW9kZXNbXSA9IHsgImhvc3QiLCAicGVyaXBoZXJhbCIsICJvdGciIH07Ci0JY29uc3QgY2hhciAqcGh5c1tdID0geyAidWxwaSIsICJ1bXRpIiB9OworCWNvbnN0IGNoYXIgKnBoeXNbXSA9IHsgInVscGkiLCAidXRtaSIgfTsKIAljb25zdCBjaGFyICptb2RlID0gTlVMTDsKIAljb25zdCBjaGFyICpwaHlfdHlwZSA9IE5VTEw7CiAJY2hhciB1c2IxX2RlZmluZWQgPSAwOworCWludCB1c2JfbW9kZV9vZmYgPSAtMTsKKwlpbnQgdXNiX3BoeV9vZmYgPSAtMTsKIAljaGFyIHN0cls1XTsKIAlpbnQgaSwgajsKIApAQCAtMTUzLDExICsxNTQsMTEgQEAKIAkJCQl9CiAJCQl9CiAJCQlpZiAobW9kZV9pZHggPj0gMCkKLQkJCQlmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUoYmxvYiwKLQkJCQkJbW9kZXNbbW9kZV9pZHhdLCBOVUxMKTsKKwkJCQl1c2JfbW9kZV9vZmYgPSBmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUoYmxvYiwKKwkJCQkJbW9kZXNbbW9kZV9pZHhdLCBOVUxMLCB1c2JfbW9kZV9vZmYpOwogCQkJaWYgKHBoeV9pZHggPj0gMCkKLQkJCQlmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUoYmxvYiwKLQkJCQkJTlVMTCwgcGh5c1twaHlfaWR4XSk7CisJCQkJdXNiX3BoeV9vZmYgPSBmZHRfZml4dXBfdXNiX21vZGVfcGh5X3R5cGUoYmxvYiwKKwkJCQkJTlVMTCwgcGh5c1twaHlfaWR4XSwgdXNiX3BoeV9vZmYpOwogCQkJaWYgKCFzdHJjbXAoc3RyLCAidXNiMSIpKQogCQkJCXVzYjFfZGVmaW5lZCA9IDE7CiAJCQlpZiAobW9kZV9pZHggPCAwICYmIHBoeV9pZHggPCAwKQpAQCAtMTY1LDExICsxNjYsMTIgQEAKIAkJfQogCX0KIAlpZiAoIXVzYjFfZGVmaW5lZCkgeworCQlpbnQgdXNiX29mZiA9IC0xOwogCQltb2RlID0gZ2V0ZW52KCJ1c2JfZHJfbW9kZSIpOwogCQlwaHlfdHlwZSA9IGdldGVudigidXNiX3BoeV90eXBlIik7CiAJCWlmICghbW9kZSAmJiAhcGh5X3R5cGUpCiAJCQlyZXR1cm47Ci0JCWZkdF9maXh1cF91c2JfbW9kZV9waHlfdHlwZShibG9iLCBtb2RlLCBwaHlfdHlwZSk7CisJCWZkdF9maXh1cF91c2JfbW9kZV9waHlfdHlwZShibG9iLCBtb2RlLCBwaHlfdHlwZSwgdXNiX29mZik7CiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19IQVNfRlNMX0RSX1VTQiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2ZzbF9sYmMuYyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjOHh4eC9mc2xfbGJjLmMKaW5kZXggZDc4OTYyZi4uNTg3NTc2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4eHh4L2ZzbF9sYmMuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzh4eHgvZnNsX2xiYy5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIHZvaWQgdXBtY29uZmlnKHVpbnQgdXBtLCB1aW50ICp0YWJsZSwgdWludCBzaXplKQogewogCWZzbF9sYmNfdCAqbGJjID0gTEJDX0JBU0VfQUREUjsKLQlpbnQgaSwgbWRyLCBtYWQsIG9sZF9tYWQgPSAwOworCWludCBpLCBtYWQsIG9sZF9tYWQgPSAwOwogCXUzMiBtYXNrID0gKH5NeE1SX09QX01TSyAmIH5NeE1SX01BRF9NU0spOwogCXUzMiBtc2VsID0gQlJfVVBNeF9UT19NU0VMKHVwbSk7CiAJdTMyICpteG1yID0gJmxiYy0+bWFtciArIHVwbTsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJb3V0X2JlMzIobXhtciwgKGluX2JlMzIobXhtcikgJiBtYXNrKSB8IE14TVJfT1BfV0FSUiB8IGkpOwogCQlvdXRfYmUzMigmbGJjLT5tZHIsIHRhYmxlW2ldKTsKLQkJbWRyID0gaW5fYmUzMigmbGJjLT5tZHIpOworCQkodm9pZClpbl9iZTMyKCZsYmMtPm1kcik7CiAJCSpkdW1teSA9IDA7CiAJCWRvIHsKIAkJCW1hZCA9IGluX2JlMzIobXhtcikgJiBNeE1SX01BRF9NU0s7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80MHhfc3BkX3NkcmFtLmMgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80MHhfc3BkX3NkcmFtLmMKaW5kZXggYTMxYjE3ZS4uNDhhYTc1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDB4X3NwZF9zZHJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzQweF9zcGRfc2RyYW0uYwpAQCAtMTE2LDI2ICsxMTYsMjUgQEAKIHsKIAlpbnQgdG1wLHJvdyxjb2w7CiAJaW50IHRvdGFsX3NpemUsYmFua19zaXplLGJhbmtfY29kZTsKLQlpbnQgZWNjX29uOwogCWludCBtb2RlOwogCWludCBiYW5rX2NudDsKIAogCWludCBzZHJhbTBfcG1pdD0weDA3YzAwMDAwOworCWludCBzZHJhbTBfYjBjcjsKKwlpbnQgc2RyYW0wX2IxY3IgPSAwOwogI2lmbmRlZiBDT05GSUdfNDA1RVAgLyogbm90IG9uIFBQQzQwNUVQICovCisJaW50IHNkcmFtMF9iMmNyID0gMDsKKwlpbnQgc2RyYW0wX2IzY3IgPSAwOwogCWludCBzZHJhbTBfYmVzcjAgPSAtMTsKIAlpbnQgc2RyYW0wX2Jlc3IxID0gLTE7CiAJaW50IHNkcmFtMF9lY2Nlc3IgPSAtMTsKLSNlbmRpZgogCWludCBzZHJhbTBfZWNjY2ZnOworCWludCBlY2Nfb247CisjZW5kaWYKIAogCWludCBzZHJhbTBfcnRyPTA7CiAJaW50IHNkcmFtMF90cj0wOwogCi0JaW50IHNkcmFtMF9iMGNyOwotCWludCBzZHJhbTBfYjFjcjsKLQlpbnQgc2RyYW0wX2IyY3I7Ci0JaW50IHNkcmFtMF9iM2NyOwotCiAJaW50IHNkcmFtMF9jZmc9MDsKIAogCWludCB0X3JwOwpAQCAtMjk1LDYgKzI5NCw3IEBACiAJaWYgKGJhbmtfY250ID4gNCkJLyogd2Ugb25seSBoYXZlIDQgYmFua3MgdG8gd29yayB3aXRoICovCiAJCVNQRF9FUlIoIlNEUkFNIC0gdW5zdXBwb3J0ZWQgbW9kdWxlIHJvd3MgZm9yIHRoaXMgd2lkdGhcbiIpOwogCisjaWZuZGVmIENPTkZJR180MDVFUCAvKiBub3Qgb24gUFBDNDA1RVAgKi8KIAkvKiBub3cgY2hlY2sgZm9yIEVDQyBhYmlsaXR5IG9mIG1vZHVsZS4gV2Ugb25seSBzdXBwb3J0IEVDQwogCSAqICAgb24gMzIgYml0IHdpZGUgZGV2aWNlcyB3aXRoIDggYml0IEVDQy4KIAkgKi8KQEAgLTMwNSw2ICszMDUsNyBAQAogCQlzZHJhbTBfZWNjY2ZnID0gMDsKIAkJZWNjX29uID0gMDsKIAl9CisjZW5kaWYKIAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogY2FsY3VsYXRlIHRvdGFsIHNpemUKQEAgLTM3OCw5ICszNzksNiBAQAogCSAqIHVzaW5nIHRoZSBjYWxjdWxhdGVkIHZhbHVlcywgY29tcHV0ZSB0aGUgYmFuawogCSAqIGNvbmZpZyByZWdpc3RlciB2YWx1ZXMuCiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jc2RyYW0wX2IxY3IgPSAwOwotCXNkcmFtMF9iMmNyID0gMDsKLQlzZHJhbTBfYjNjciA9IDA7CiAKIAkvKiBjb21wdXRlIHRoZSBzaXplIG9mIGVhY2ggYmFuayAqLwogCWJhbmtfc2l6ZSA9IHRvdGFsX3NpemUgLyBiYW5rX2NudDsKQEAgLTQ0NCw4ICs0NDIsMTAgQEAKIAkvKiBTRFJBTSBoYXZlIGEgcG93ZXIgb24gZGVsYXksCSA1MDAgbWljcm8gc2hvdWxkIGRvICovCiAJdWRlbGF5KDUwMCk7CiAJc2RyYW0wX2NmZyA9IFNEUkFNMF9DRkdfRENFIHwgU0RSQU0wX0NGR19CUlBGKDEpIHwgU0RSQU0wX0NGR19FQ0NERCB8IFNEUkFNMF9DRkdfRU1EVUxSOworI2lmbmRlZiBDT05GSUdfNDA1RVAgLyogbm90IG9uIFBQQzQwNUVQICovCiAJaWYgKGVjY19vbikKIAkJc2RyYW0wX2NmZyB8PSBTRFJBTTBfQ0ZHX01FTUNISzsKKyNlbmRpZgogCW10c2RyYW0oU0RSQU0wX0NGRywgc2RyYW0wX2NmZyk7CiAKIAlyZXR1cm4gKHRvdGFsX3NpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIuYyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyLmMKaW5kZXggZTA1ZGFmMi4uOGEyMGEyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80NHhfc3BkX2Rkci5jCkBAIC0zODAsOCArMzgwLDYgQEAKIAl1bnNpZ25lZCBjaGFyIGVjYzsKIAl1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXM7CiAJdW5zaWduZWQgbG9uZyBkYXRhX3dpZHRoOwotCXVuc2lnbmVkIGxvbmcgZGltbV8zMmJpdDsKLQl1bnNpZ25lZCBsb25nIGRpbW1fNjRiaXQ7CiAKIAkvKgogCSAqIGdldCBNZW1vcnkgQ29udHJvbGxlciBPcHRpb25zIDAgZGF0YQpAQCAtNDIzLDEwICs0MjEsOCBAQAogCQkJCSh1bnNpZ25lZCBsb25nKXNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSw2KSArCiAJCQkJKCgodW5zaWduZWQgbG9uZylzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sNykpIDw8IDgpOwogCQkJaWYgKGRhdGFfd2lkdGggPT0gNjQgfHwgZGF0YV93aWR0aCA9PSA3MikgewotCQkJCWRpbW1fNjRiaXQgPSBUUlVFOwogCQkJCWNmZzAgfD0gU0RSQU1fQ0ZHMF9ETVdEXzY0OwogCQkJfSBlbHNlIGlmIChkYXRhX3dpZHRoID09IDMyIHx8IGRhdGFfd2lkdGggPT0gNDApIHsKLQkJCQlkaW1tXzMyYml0ID0gVFJVRTsKIAkJCQljZmcwIHw9IFNEUkFNX0NGRzBfRE1XRF8zMjsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRmKCJXQVJOSU5HOiBESU1NIHdpdGggZGF0YXdpZHRoIG9mICVsdSBiaXRzLlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyMi5jIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKaW5kZXggNGEyZjMzNy4uODUyMTdlYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKQEAgLTQ0NSw5ICs0NDUsNiBAQAogcGh5c19zaXplX3QgaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCiB7CiAJdW5zaWduZWQgY2hhciBpaWMwX2RpbW1fYWRkcltdID0gU1BEX0VFUFJPTV9BRERSRVNTOwotCXVuc2lnbmVkIGNoYXIgc3BkMFtNQVhfU1BEX0JZVEVTXTsKLQl1bnNpZ25lZCBjaGFyIHNwZDFbTUFYX1NQRF9CWVRFU107Ci0JdW5zaWduZWQgY2hhciAqZGltbV9zcGRbTUFYRElNTVNdOwogCXVuc2lnbmVkIGxvbmcgZGltbV9wb3B1bGF0ZWRbTUFYRElNTVNdID0ge1NEUkFNX05PTkUsIFNEUkFNX05PTkV9OwogCXVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3M7CQkvKiBvbiBib2FyZCBkaW1tIGJhbmtzICovCiAJdW5zaWduZWQgbG9uZyB2YWw7CkBAIC00NTgsMTIgKzQ1NSw2IEBACiAJbnVtX2RpbW1fYmFua3MgPSBzaXplb2YoaWljMF9kaW1tX2FkZHIpOwogCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBTZXQgdXAgYW4gYXJyYXkgb2YgU1BEIG1hdHJpeGVzLgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCWRpbW1fc3BkWzBdID0gc3BkMDsKLQlkaW1tX3NwZFsxXSA9IHNwZDE7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIFJlc2V0IHRoZSBERFItU0RSQU0gY29udHJvbGxlci4KIAkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAltdHNkcihTRFIwX1NSU1QsIFNEUjBfU1JTVDBfRE1DKTsKQEAgLTEwMDAsNyArOTkxLDYgQEAKIAl1bnNpZ25lZCBsb25nIGF0dHJpYnV0ZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBidWYwLCBidWYxOyAvKiBUT0RPOiBjb2RlIHRvIGJlIGNoYW5nZWQgZm9yIElPUDEuNiB0byBzdXBwb3J0IDQgRElNTXMgKi8KIAl1bnNpZ25lZCBsb25nIGJhbmtjb3VudDsKLQl1bnNpZ25lZCBsb25nIGRkcnR5cGU7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKICNpZmRlZiBDT05GSUdfRERSX0VDQwpAQCAtMTA0NSw4ICsxMDM1LDYgQEAKIAkJCWVsc2UgLyogYmFuayBjb3VudCA9IDggKi8KIAkJCQltY29wdDEgfD0gU0RSQU1fTUNPUFQxXzhfQkFOS1M7CiAKLQkJCS8qIHRlc3QgRERSIHR5cGUgKi8KLQkJCWRkcnR5cGUgPSAodW5zaWduZWQgbG9uZylzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDIpOwogCQkJLyogdGVzdCBmb3IgYnVmZmVyZWQvdW5idWZmZXJlZCwgcmVnaXN0ZXJlZCwgZGlmZmVyZW50aWFsIGNsb2NrcyAqLwogCQkJcmVnaXN0ZXJlZCA9ICh1bnNpZ25lZCBsb25nKXNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjApOwogCQkJYXR0cmlidXRlID0gKHVuc2lnbmVkIGxvbmcpc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAyMSk7CkBAIC0xNTAwLDcgKzE0ODgsNiBAQAogCQkJZWxzZQogCQkJCXNkcmFtX2RkcjEgPSBGQUxTRTsKIAotCQkJLyogdF93cl9ucyA9IG1heCh0X3dyX25zLCAodW5zaWduZWQgbG9uZylkaW1tX3NwZFtkaW1tX251bV1bMzZdID4+IDIpOyAqLyAvKiAgbm90IHVzZWQgaW4gdGhpcyBsb29wLiAqLwogCQkJY2FzX2JpdCA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTgpOwogCQkJZGVidWcoImNhc19iaXRbU1BEIGJ5dGUgMThdPSUwMmx4XG4iLCBjYXNfYml0KTsKIApAQCAtMjQ5MCwxMiArMjQ3Nyw2IEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJbG9uZyByZmZkX2F2ZXJhZ2U7CiAJbG9uZyBtYXhfc3RhcnQ7Ci0JbG9uZyBtaW5fZW5kOwotCXVuc2lnbmVkIGxvbmcgYmVnaW5fcnFmZFtNQVhSQU5LU107Ci0JdW5zaWduZWQgbG9uZyBiZWdpbl9yZmZkW01BWFJBTktTXTsKLQl1bnNpZ25lZCBsb25nIGVuZF9ycWZkW01BWFJBTktTXTsKLQl1bnNpZ25lZCBsb25nIGVuZF9yZmZkW01BWFJBTktTXTsKLQljaGFyIHdpbmRvd19mb3VuZDsKIAl1bnNpZ25lZCBsb25nIGRseWNhbDsKIAl1bnNpZ25lZCBsb25nIGRseV92YWw7CiAJdW5zaWduZWQgbG9uZyBtYXhfcGFzc19sZW5ndGg7CkBAIC0yNTA2LDYgKzI0ODcsNyBAQAogCXVuc2lnbmVkIGNoYXIgZmFpbF9mb3VuZDsKIAl1bnNpZ25lZCBjaGFyIHBhc3NfZm91bmQ7CiAjaWYgIWRlZmluZWQoQ09ORklHX0REUl9SUURDX0ZJWEVEKQorCWludCB3aW5kb3dfZm91bmQ7CiAJdTMyIHJxZGNfcmVnOwogCXUzMiBycWZkOwogCXUzMiBycWZkX3N0YXJ0OwpAQCAtMjU1OSwxNiArMjU0MSw2IEBACiAjZW5kaWYgLyogQ09ORklHX0REUl9SUURDX0ZJWEVEICovCiAKIAltYXhfc3RhcnQgPSAwOwotCW1pbl9lbmQgPSAwOwotCWJlZ2luX3JxZmRbMF0gPSAwOwotCWJlZ2luX3JmZmRbMF0gPSAwOwotCWJlZ2luX3JxZmRbMV0gPSAwOwotCWJlZ2luX3JmZmRbMV0gPSAwOwotCWVuZF9ycWZkWzBdID0gMDsKLQllbmRfcmZmZFswXSA9IDA7Ci0JZW5kX3JxZmRbMV0gPSAwOwotCWVuZF9yZmZkWzFdID0gMDsKLQl3aW5kb3dfZm91bmQgPSBGQUxTRTsKIAogCW1heF9wYXNzX2xlbmd0aCA9IDA7CiAJbWF4X3N0YXJ0ID0gMDsKQEAgLTI1NzYsNyArMjU0OCw2IEBACiAJY3VycmVudF9wYXNzX2xlbmd0aCA9IDA7CiAJY3VycmVudF9mYWlsX2xlbmd0aCA9IDA7CiAJY3VycmVudF9zdGFydCA9IDA7Ci0Jd2luZG93X2ZvdW5kID0gRkFMU0U7CiAJZmFpbF9mb3VuZCA9IEZBTFNFOwogCXBhc3NfZm91bmQgPSBGQUxTRTsKIApAQCAtMjYyMSw3ICsyNTkyLDYgQEAKIAkJCQlpZiAoZmFpbF9mb3VuZCA9PSBGQUxTRSkgewogCQkJCQlmYWlsX2ZvdW5kID0gVFJVRTsKIAkJCQl9IGVsc2UgaWYgKHBhc3NfZm91bmQgPT0gVFJVRSkgewotCQkJCQl3aW5kb3dfZm91bmQgPSBUUlVFOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80eHhfaWJtX2RkcjJfYXV0b2NhbGliLmMgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80eHhfaWJtX2RkcjJfYXV0b2NhbGliLmMKaW5kZXggNGI4ZTY1YS4uM2M4N2JmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNHh4X2libV9kZHIyX2F1dG9jYWxpYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzR4eF9pYm1fZGRyMl9hdXRvY2FsaWIuYwpAQCAtMTU0LDE4ICsxNTQsMjAgQEAKIAogc3RhdGljIHUzMiAqZ2V0X21lbWJhc2UoaW50IGJ4Y3JfbnVtKQogewotCXVsb25nIGJ4Y2Y7CiAJdTMyICptZW1iYXNlOwogCiAjaWYgZGVmaW5lZChTRFJBTV9SMEJBUykKIAkvKiBCQVMgZnJvbSBNZW1vcnkgUXVldWUgcmFuayByZWcuICovCiAJbWVtYmFzZSA9CiAJICAgICh1MzIgKikoU0RSQU1fUlhCQVNfU0RCQV9ERUNPREUobWZkY3JfYW55KFNEUkFNX1IwQkFTK2J4Y3JfbnVtKSkpOwotCWJ4Y2YgPSAwOwkvKiBqdXN0IHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyICovCiAjZWxzZQotCS8qIEJBUyBmcm9tIFNEUkFNX01CeENGIG1lbSByYW5rIHJlZy4gKi8KLQltZnNkcmFtKFNEUkFNX01CMENGICsgKGJ4Y3JfbnVtPDwyKSwgYnhjZik7Ci0JbWVtYmFzZSA9ICh1MzIgKikoKGJ4Y2YgJiAweGZmZjgwMDAwKSA8PCAzKTsKKwl7CisJCXVsb25nIGJ4Y2Y7CisKKwkJLyogQkFTIGZyb20gU0RSQU1fTUJ4Q0YgbWVtIHJhbmsgcmVnLiAqLworCQltZnNkcmFtKFNEUkFNX01CMENGICsgKGJ4Y3JfbnVtPDwyKSwgYnhjZik7CisJCW1lbWJhc2UgPSAodTMyICopKChieGNmICYgMHhmZmY4MDAwMCkgPDwgMyk7CisJfQogI2VuZGlmCiAKIAlyZXR1cm4gbWVtYmFzZTsKQEAgLTcxOSw3ICs3MjEsOSBAQAogc3RhdGljIHUzMiBEUVNfY2FsaWJyYXRpb25fbWV0aG9kQihzdHJ1Y3QgZGRyYXV0b2NhbCAqY2FsKQogewogCXVsb25nIHJmZGNfcmVnOworI2lmbmRlZiBDT05GSUdfRERSX1JGRENfRklYRUQKIAl1bG9uZyByZmZkOworI2VuZGlmCiAKIAl1bG9uZyBycWRjX3JlZzsKIAl1bG9uZyBycWZkOwpAQCAtODM3LDcgKzg0MSw2IEBACiAJbXRzZHJhbShTRFJBTV9SRkRDLCByZmRjX3JlZyB8IFNEUkFNX1JGRENfUkZGRF9FTkNPREUocmZmZF9hdmVyYWdlKSk7CiAjZW5kaWYgLyogQ09ORklHX0REUl9SRkRDX0ZJWEVEICovCiAKLQlyZmZkID0gcmZmZF9hdmVyYWdlOwogCWluX3dpbmRvdyA9IDA7CiAKIAljdXJyX3dpbl9taW4gPSBjdXJyX3dpbl9tYXggPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNHh4X3BjaWUuYyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4LzR4eF9wY2llLmMKaW5kZXggYTg3ZTkzYi4uNDNiOTcyZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvNHh4X3BjaWUuYworKysgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC80eHhfcGNpZS5jCkBAIC0yMjcsNyArMjI3LDYgQEAKIHN0YXRpYyBpbnQgcGNpZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHVuc2lnbmVkIGludCBkZXZmbiwKIAlpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgKnZhbCkgewogCi0JdTggKmFkZHJlc3M7CiAJKnZhbCA9IDA7CiAKIAlpZiAodmFsaWRhdGVfZW5kcG9pbnQoaG9zZSkpCkBAIC0yNTUsNyArMjU0LDcgQEAKIAkJKChQQ0lfQlVTKGRldmZuKSA9PSAwKSB8fCAoUENJX0JVUyhkZXZmbikgPT0gMSkpKQogCQlyZXR1cm4gMDsKIAotCWFkZHJlc3MgPSBwY2llX2dldF9iYXNlKGhvc2UsIGRldmZuKTsKKwlwY2llX2dldF9iYXNlKGhvc2UsIGRldmZuKTsKIAlvZmZzZXQgKz0gZGV2Zm4gPDwgNDsKIAogCS8qCkBAIC0yODcsOCArMjg2LDYgQEAKIHN0YXRpYyBpbnQgcGNpZV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCiAJaW50IG9mZnNldCwgaW50IGxlbiwgdTMyIHZhbCkgewogCi0JdTggKmFkZHJlc3M7Ci0KIAlpZiAodmFsaWRhdGVfZW5kcG9pbnQoaG9zZSkpCiAJCXJldHVybiAwOwkJLyogTm8gdXBzdHJlYW0gY29uZmlnIGFjY2VzcyAqLwogCkBAIC0zMDcsNyArMzA0LDcgQEAKIAkJKChQQ0lfQlVTKGRldmZuKSA9PSAwKSB8fCAoUENJX0JVUyhkZXZmbikgPT0gMSkpKQogCQlyZXR1cm4gMDsKIAotCWFkZHJlc3MgPSBwY2llX2dldF9iYXNlKGhvc2UsIGRldmZuKTsKKwlwY2llX2dldF9iYXNlKGhvc2UsIGRldmZuKTsKIAlvZmZzZXQgKz0gZGV2Zm4gPDwgNDsKIAogCS8qCkBAIC0xMDYzLDcgKzEwNjAsNiBAQAogdm9pZCBwcGM0eHhfc2V0dXBfcGNpZV9yb290cG9pbnQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgcG9ydCkKIHsKIAl2b2xhdGlsZSB2b2lkICptYmFzZSA9IE5VTEw7Ci0Jdm9sYXRpbGUgdm9pZCAqcm1iYXNlID0gTlVMTDsKIAogCXBjaV9zZXRfb3BzKGhvc2UsCiAJCSAgICBwY2llX3JlYWRfY29uZmlnX2J5dGUsCkBAIC0xMDc2LDE4ICsxMDcyLDE1IEBACiAJc3dpdGNoIChwb3J0KSB7CiAJY2FzZSAwOgogCQltYmFzZSA9ICh1MzIgKilDT05GSUdfU1lTX1BDSUUwX1hDRkdCQVNFOwotCQlybWJhc2UgPSAodTMyICopQ09ORklHX1NZU19QQ0lFMF9DRkdCQVNFOwogCQlob3NlLT5jZmdfZGF0YSA9ICh1OCAqKUNPTkZJR19TWVNfUENJRTBfQ0ZHQkFTRTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQltYmFzZSA9ICh1MzIgKilDT05GSUdfU1lTX1BDSUUxX1hDRkdCQVNFOwotCQlybWJhc2UgPSAodTMyICopQ09ORklHX1NZU19QQ0lFMV9DRkdCQVNFOwogCQlob3NlLT5jZmdfZGF0YSA9ICh1OCAqKUNPTkZJR19TWVNfUENJRTFfQ0ZHQkFTRTsKIAkJYnJlYWs7CiAjaWYgQ09ORklHX1NZU19QQ0lFX05SX1BPUlRTID4gMgogCWNhc2UgMjoKIAkJbWJhc2UgPSAodTMyICopQ09ORklHX1NZU19QQ0lFMl9YQ0ZHQkFTRTsKLQkJcm1iYXNlID0gKHUzMiAqKUNPTkZJR19TWVNfUENJRTJfQ0ZHQkFTRTsKIAkJaG9zZS0+Y2ZnX2RhdGEgPSAodTggKilDT05GSUdfU1lTX1BDSUUyX0NGR0JBU0U7CiAJCWJyZWFrOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9jbWRfZWNjdGVzdC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvY21kX2VjY3Rlc3QuYwppbmRleCA1NDJhYjY5Li4yMzFmNjllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9jbWRfZWNjdGVzdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L2NtZF9lY2N0ZXN0LmMKQEAgLTExMyw4ICsxMTMsNiBAQAogICovCiBzdGF0aWMgdm9pZCBpbmplY3RfZWNjX2Vycm9yKHZvaWQgKnB0ciwgaW50IHBhcikKIHsKLQl1MzIgdmFsOwotCiAJLyoKIAkgKiBUYWtlbiBmcm9tIFBQQzQ2MEVYL0VYci9HVCB1c2VycyBtYW51YWwgKFJldiAxLjIxKQogCSAqIDIyLjIuMTcuMTMgRUNDIERpYWdub3N0aWNzCkBAIC0xMjQsNyArMTIyLDcgQEAKIAkgKi8KIAogCW91dF9iZTMyKHB0ciwgMHgwMDAwMDAwMCk7Ci0JdmFsID0gaW5fYmUzMihwdHIpOworCWluX2JlMzIocHRyKTsKIAogCS8qIDYuIFNldCBtZW1vcnkgY29udHJvbGxlciB0byBubyBlcnJvciBjaGVja2luZyAqLwogCXNldF9tY29wdDFfbWNoayhTRFJBTV9NQ09QVDFfTUNIS19OT04pOwpAQCAtMTM2LDcgKzEzNCw3IEBACiAJCW91dF9iZTMyKHB0ciwgaW5fYmUzMihwdHIpIF4gMHgwMDAwMDAwMyk7CiAKIAkvKiA4LiBXYWl0IGZvciBTRFJBTSBpZGxlICovCi0JdmFsID0gaW5fYmUzMihwdHIpOworCWluX2JlMzIocHRyKTsKIAlzZXRfbWNvcHQxX21jaGsoU0RSQU1fTUNPUFQxX01DSEtfQ0hLX1JFUCk7CiAKIAkvKiBXYWl0IGZvciBTRFJBTSBpZGxlICovCkBAIC0xNTEsNyArMTQ5LDYgQEAKIAl1MzIgZW5kX2FkZHJlc3M7CiAJdTMyIGFkZHJlc3NfaW5jcmVtZW50OwogCXUzMiBtY29wdDE7Ci0JdTMyIHZhbDsKIAogCS8qCiAJICogRmlsbCBFQ0MgcGFyaXR5IGJ5dGUgYWdhaW4uIE90aGVyd2lzZSBmdXJ0aGVyIGFjY2Vzc2VzIHRvCkBAIC0xNTksNyArMTU2LDcgQEAKIAkgKi8KIAogCS8qIFdhaXQgZm9yIFNEUkFNIGlkbGUgKi8KLQl2YWwgPSBpbl9iZTMyKDB4MDAwMDAwMDApOworCWluX2JlMzIoMHgwMDAwMDAwMCk7CiAJc2V0X21jb3B0MV9tY2hrKFNEUkFNX01DT1BUMV9NQ0hLX0dFTik7CiAKIAkvKiBFQ0MgYml0IHNldCBtZXRob2QgZm9yIG5vbi1jYWNoZWQgbWVtb3J5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9pb3A0ODBfdWFydC5jIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvaW9wNDgwX3VhcnQuYwppbmRleCAwZTM0MjNmLi4wMjdjYTMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC9pb3A0ODBfdWFydC5jCisrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L2lvcDQ4MF91YXJ0LmMKQEAgLTEzNCw3ICsxMzQsNiBAQAogCiBpbnQgc2VyaWFsX2luaXQgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgY2hhciB2YWw7CiAJdW5zaWduZWQgc2hvcnQgYnJfcmVnOwogCiAJYnJfcmVnID0gKCgoKENPTkZJR19DUFVDTE9DSyAqIDEwMDAwMDApIC8gMTYpIC8gZ2QtPmJhdWRyYXRlKSAtIDEpOwpAQCAtMTQ5LDcgKzE0OCw3IEBACiAJb3V0XzgoKHU4ICopU1BVX0JBU0UgKyBzcHVfUnhDbWQsIDB4YjApOwkvKiBFbmFibGUgUnggKi8KIAlvdXRfOCgodTggKilTUFVfQkFTRSArIHNwdV9UeENtZCwgMHg5Yyk7CS8qIEVuYWJsZSBUeCAqLwogCW91dF84KCh1OCAqKVNQVV9CQVNFICsgc3B1X0hhbmRzaGtfcmMsIDB4ZmYpOwkvKiBDbGVhciBIYW5kc2hha2UgKi8KLQl2YWwgPSBpbl84KCh1OCAqKVNQVV9CQVNFICsgc3B1X1J4QnVmZik7CS8qIER1bW15IHJlYWQsIHRvIGNsZWFyIHJlY2VpdmVyICovCisJaW5fOCgodTggKilTUFVfQkFTRSArIHNwdV9SeEJ1ZmYpOwkvKiBEdW1teSByZWFkLCB0byBjbGVhciByZWNlaXZlciAqLwogCiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3VzYl9vaGNpLmMgYi9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91c2Jfb2hjaS5jCmluZGV4IGZlMDkxZTMuLjA2NTczMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3VzYl9vaGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdXNiX29oY2kuYwpAQCAtNzUzLDEwICs3NTMsOSBAQAogCiBzdGF0aWMgdm9pZCBkbF90cmFuc2Zlcl9sZW5ndGgodGRfdCAqIHRkKQogewotCV9fdTMyIHRkSU5GTywgdGRCRSwgdGRDQlA7CisJX191MzIgdGRCRSwgdGRDQlA7CiAJdXJiX3ByaXZfdCAqbHVyYl9wcml2ID0gJnVyYl9wcml2OwogCi0JdGRJTkZPID0gb2hjaV9jcHVfdG9fbGUzMiAodGQtPmh3SU5GTyk7CiAJdGRCRSAgID0gb2hjaV9jcHVfdG9fbGUzMiAodGQtPmh3QkUpOwogCXRkQ0JQICA9IG9oY2lfY3B1X3RvX2xlMzIgKHRkLT5od0NCUCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb25maWdfbXBjODV4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbmZpZ19tcGM4NXh4LmgKaW5kZXggYzNkNmJhOS4uOTgxZDYzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbmZpZ19tcGM4NXh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbmZpZ19tcGM4NXh4LmgKQEAgLTY0LDYgKzY0LDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSX0RFRkFVTFQJMHhmZjcwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0ZTTF9FUlJBVFVNX05NR19ERFIxMjAKICNkZWZpbmUgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9OTUdfTEJDMTAzCisjZGVmaW5lIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fTk1HX0VUU0VDMTI5CiAKICNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1NTUpCiAjZGVmaW5lIENPTkZJR19NQVhfQ1BVUwkJCTEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBlZjUwNzZiLi4yMDkxMDNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0zOTIsMTcgKzM5MiwxNyBAQAogICovCiAKICNkZWZpbmUgTUFTMF9UTEJTRUxfTVNLCTB4MzAwMDAwMDAKLSNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJKCh4IDw8IDI4KSAmIE1BUzBfVExCU0VMX01TSykKKyNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJKCgoeCkgPDwgMjgpICYgTUFTMF9UTEJTRUxfTVNLKQogI2RlZmluZSBNQVMwX0VTRUxfTVNLCTB4MEZGRjAwMDAKLSNkZWZpbmUgTUFTMF9FU0VMKHgpCSgoeCA8PCAxNikgJiBNQVMwX0VTRUxfTVNLKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJKCgoeCkgPDwgMTYpICYgTUFTMF9FU0VMX01TSykKICNkZWZpbmUgTUFTMF9OVih4KQkoKHgpICYgMHgwMDAwMEZGRikKIAogI2RlZmluZSBNQVMxX1ZBTElECTB4ODAwMDAwMDAKICNkZWZpbmUgTUFTMV9JUFJPVAkweDQwMDAwMDAwCi0jZGVmaW5lIE1BUzFfVElEKHgpCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQorI2RlZmluZSBNQVMxX1RJRCh4KQkoKCh4KSA8PCAxNikgJiAweDNGRkYwMDAwKQogI2RlZmluZSBNQVMxX1RTCQkweDAwMDAxMDAwCi0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCh4IDw8IDgpICYgMHgwMDAwMEYwMCkKLSNkZWZpbmUgVFNJWkVfVE9fQllURVMoeCkgKChwaHlzX2FkZHJfdCkoMVVMIDw8ICgodHNpemUgKiAyKSArIDEwKSkpCisjZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCgoeCkgPDwgOCkgJiAweDAwMDAwRjAwKQorI2RlZmluZSBUU0laRV9UT19CWVRFUyh4KSAoMVVMTCA8PCAoKCh4KSAqIDIpICsgMTApKQogCiAjZGVmaW5lIE1BUzJfRVBOCTB4RkZGRkYwMDAKICNkZWZpbmUgTUFTMl9YMAkJMHgwMDAwMDA0MApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDFiOTZiODQuLjRlMzI2MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTUxMyw3ICs1MTMsMTMgQEAKIAogI2RlZmluZSBTUFJOX1RMQjBDRkcJMHgyQjAJLyogVExCIDAgQ29uZmlnIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fVExCMUNGRwkweDJCMQkvKiBUTEIgMSBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UTEIwUFMJMHgxNTgJLyogVExCIDAgUGFnZSBTaXplIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fVExCMVBTCTB4MTU5CS8qIFRMQiAxIFBhZ2UgU2l6ZSBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX01NVUNTUjAJMHgzZjQJLyogTU1VIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fTU1VQ0ZHCTB4M0Y3CS8qIE1NVSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1NVUNGR19NQVZOCTB4MDAwMDAwMDMJLyogTU1VIEFyY2hpdGVjdHVyZSBWZXJzaW9uIE51bWJlciAqLworI2RlZmluZSBNTVVDRkdfTUFWTl9WMQkweDAwMDAwMDAwCS8qIHYxLjAgKi8KKyNkZWZpbmUgTU1VQ0ZHX01BVk5fVjIJMHgwMDAwMDAwMQkvKiB2Mi4wICovCiAjZGVmaW5lIFNQUk5fTUFTMAkweDI3MAkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9NQVMxCTB4MjcxCS8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMSAqLwogI2RlZmluZSBTUFJOX01BUzIJMHgyNzIJLyogTU1VIEFzc2lzdCBSZWdpc3RlciAyICovCmRpZmYgLS1naXQgYS9ib2FyZC9jc2IyMjYvTWFrZWZpbGUgYi9ib2FyZC9BbmRlc1RlY2gvYWRwLWFnMTAxcC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDc4JQpjb3B5IGZyb20gYm9hcmQvY3NiMjI2L01ha2VmaWxlCmNvcHkgdG8gYm9hcmQvQW5kZXNUZWNoL2FkcC1hZzEwMXAvTWFrZWZpbGUKaW5kZXggNmZlOWJlYy4uMDNjM2ZmNCAxMDA2NDQKLS0tIGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlCisrKyBiL2JvYXJkL0FuZGVzVGVjaC9hZHAtYWcxMDFwL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgotIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgQW5kZXMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorIyBTaGF3biBMaW4sIEFuZGVzIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gPG5vYnVoaXJvQGFuZGVzdGVjaC5jb20+CisjIE1hY3BhdWwgTGluLCBBbmRlcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uIDxtYWNwYXVsQGFuZGVzdGVjaC5jb20+CiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAjIHByb2plY3QuCkBAIC0yNSwxMiArMjYsMTIgQEAKIAogTElCCT0gJChvYmopbGliJChCT0FSRCkubwogCi1DT0JKUwk6PSBjc2IyMjYubyBmbGFzaC5vCitDT0JKUwk6PSBhZHAtYWcxMDFwLm8KIAotU1JDUwk6PSAkKENPQkpTOi5vPS5jKQotT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSAkKFNPQkpTKSkKIAotJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChPQkpTKQogCSQoY2FsbCBjbWRfbGlua19vX3RhcmdldCwgJChPQkpTKSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvQW5kZXNUZWNoL2FkcC1hZzEwMXAvYWRwLWFnMTAxcC5jIGIvYm9hcmQvQW5kZXNUZWNoL2FkcC1hZzEwMXAvYWRwLWFnMTAxcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDIwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9BbmRlc1RlY2gvYWRwLWFnMTAxcC9hZHAtYWcxMDFwLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbmRlcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBTaGF3biBMaW4sIEFuZGVzIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gPG5vYnVoaXJvQGFuZGVzdGVjaC5jb20+CisgKiBNYWNwYXVsIExpbiwgQW5kZXMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiA8bWFjcGF1bEBhbmRlc3RlY2guY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxuZXRkZXYuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGZhcmFkYXkvZnRzZGMwMTAuaD4KKyNpbmNsdWRlIDxmYXJhZGF5L2Z0c21jMDIwLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisvKgorICogTWlzY2VsbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGl6YXRpb25zCisgKi8KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIHJlZmVyIHRvIEJPT1RfUEFSQU1FVEVSX1BBX0JBU0Ugd2l0aGluCisJICogImxpbnV4L2FyY2gvbmRzMzIvaW5jbHVkZS9hc20vbWlzY19zcGVjLmgiCisJICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9BRFBBRzEwMVA7CisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IFBIWVNfU0RSQU1fMCArIDB4NDAwOworCisJZnRzbWMwMjBfaW5pdCgpOwkvKiBpbml0aWFsaXplIEZsYXNoICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNkcmFtX2Jhc2UgPSBQSFlTX1NEUkFNXzA7CisJdW5zaWduZWQgbG9uZyBleHBlY3RlZF9zaXplID0gUEhZU19TRFJBTV8wX1NJWkU7CisJdW5zaWduZWQgbG9uZyBhY3R1YWxfc2l6ZTsKKworCWFjdHVhbF9zaXplID0gZ2V0X3JhbV9zaXplKCh2b2lkICopc2RyYW1fYmFzZSwgZXhwZWN0ZWRfc2l6ZSk7CisKKwlnZC0+cmFtX3NpemUgPSBhY3R1YWxfc2l6ZTsKKworCWlmIChleHBlY3RlZF9zaXplICE9IGFjdHVhbF9zaXplKSB7CisJCXByaW50ZigiV2FybmluZzogT25seSAlbHUgb2YgJWx1IE1pQiBTRFJBTSBpcyB3b3JraW5nXG4iLAorCQkJCWFjdHVhbF9zaXplID4+IDIwLCBleHBlY3RlZF9zaXplID4+IDIwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJkKQoreworCXJldHVybiBmdG1hYzEwMF9pbml0aWFsaXplKGJkKTsKK30KKwordWxvbmcgYm9hcmRfZmxhc2hfZ2V0X2xlZ2FjeSh1bG9uZyBiYXNlLCBpbnQgYmFua251bSwgZmxhc2hfaW5mb190ICppbmZvKQoreworCWlmIChiYW5rbnVtID09IDApIHsJLyogbm9uLUNGSSBib290IGZsYXNoICovCisJCWluZm8tPnBvcnR3aWR0aCA9IEZMQVNIX0NGSV84QklUOworCQlpbmZvLT5jaGlwd2lkdGggPSBGTEFTSF9DRklfQlk4OworCQlpbmZvLT5pbnRlcmZhY2UgPSBGTEFTSF9DRklfWDg7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworaW50IGJvYXJkX21tY19pbml0KGJkX3QgKmJpcykKK3sKKwlmdHNkYzAxMF9tbWNfaW5pdCgwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL01ha2VmaWxlIGIvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvTWFrZWZpbGUKaW5kZXggMzU5ZjU5MC4uNTlmZDQ2NSAxMDA2NDQKLS0tIGEvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvTWFrZWZpbGUKKysrIGIvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvTWFrZWZpbGUKQEAgLTMyLDcgKzMyLDYgQEAKIENPQkpTLXkJOj0gJChCT0FSRCkubwogQ09CSlMtJChDT05GSUdfQ01EX0lERSkgKz0gLi4vY29tbW9uL2NmaWRlLm8KIENPQkpTLSQoQ09ORklHX0VQTEVEKSArPSAuLi9jb21tb24vZXBsZWQubwotQ09CSlMtJChDT05GSUdfR1BJTykgKz0gZ3Bpby5vCiBDT0JKUy0kKENPTkZJR19TRVZFTlNFRykgKz0gLi4vY29tbW9uL3NldmVuc2VnLm8KIAogU09CSlMteQk6PSB0ZXh0X2Jhc2UubwpkaWZmIC0tZ2l0IGEvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvY3VzdG9tX2ZwZ2EuaCBiL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL2N1c3RvbV9mcGdhLmgKaW5kZXggZjdmMzg1My4uZmQzZWM5YSAxMDA2NDQKLS0tIGEvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvY3VzdG9tX2ZwZ2EuaAorKysgYi9ib2FyZC9hbHRlcmEvbmlvczItZ2VuZXJpYy9jdXN0b21fZnBnYS5oCkBAIC01MSw2ICs1MSw3IEBACiAvKiBsZWRfcGlvLnMxIGlzIGEgYWx0ZXJhX2F2YWxvbl9waW8gKi8KICNkZWZpbmUgTEVEX1BJT19CQVNFIDB4ODIxMjA4NzAKICNkZWZpbmUgTEVEX1BJT19XSURUSCA4CisjZGVmaW5lIExFRF9QSU9fUlNUVkFMIDB4MAogCiAvKiBoaWdoX3Jlc190aW1lci5zMSBpcyBhIGFsdGVyYV9hdmFsb25fdGltZXIgKi8KICNkZWZpbmUgQ09ORklHX1NZU19USU1FUl9CQVNFIDB4ODIxMjA4MjAKZGlmZiAtLWdpdCBhL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL2dwaW8uYyBiL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL2dwaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzMDU2NC4uMDAwMDAwMAotLS0gYS9ib2FyZC9hbHRlcmEvbmlvczItZ2VuZXJpYy9ncGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogYm9hcmQgZ3BpbyBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3PgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgotICovCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZm5kZWYgQ09ORklHX1NZU19HUElPX0JBU0UKLQotI2RlZmluZSBBTFRFUkFfUElPX0JBU0UgTEVEX1BJT19CQVNFCi0jZGVmaW5lIEFMVEVSQV9QSU9fV0lEVEggTEVEX1BJT19XSURUSAotI2RlZmluZSBBTFRFUkFfUElPX0RBVEEgKEFMVEVSQV9QSU9fQkFTRSArIDApCi0jZGVmaW5lIEFMVEVSQV9QSU9fRElSIChBTFRFUkFfUElPX0JBU0UgKyA0KQotc3RhdGljIHUzMiBwaW9fZGF0YV9yZWc7Ci1zdGF0aWMgdTMyIHBpb19kaXJfcmVnOwotCi1pbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCXJldHVybiAwOwotfQotCi1pbnQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQotewotCXUzMiBtYXNrID0gMSA8PCBncGlvOwotCXdyaXRlbChwaW9fZGlyX3JlZyAmPSB+bWFzaywgQUxURVJBX1BJT19ESVIpOwotCXJldHVybiAwOwotfQotCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl1MzIgbWFzayA9IDEgPDwgZ3BpbzsKLQlpZiAodmFsdWUpCi0JCXBpb19kYXRhX3JlZyB8PSBtYXNrOwotCWVsc2UKLQkJcGlvX2RhdGFfcmVnICY9IH5tYXNrOwotCXdyaXRlbChwaW9fZGF0YV9yZWcsIEFMVEVSQV9QSU9fREFUQSk7Ci0Jd3JpdGVsKHBpb19kaXJfcmVnIHw9IG1hc2ssIEFMVEVSQV9QSU9fRElSKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JdTMyIG1hc2sgPSAxIDw8IGdwaW87Ci0JaWYgKHBpb19kaXJfcmVnICYgbWFzaykKLQkJcmV0dXJuIChwaW9fZGF0YV9yZWcgJiBtYXNrKSA/IDEgOiAwOwotCWVsc2UKLQkJcmV0dXJuIChyZWFkbChBTFRFUkFfUElPX0RBVEEpICYgbWFzaykgPyAxIDogMDsKLX0KLQotdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JdTMyIG1hc2sgPSAxIDw8IGdwaW87Ci0JaWYgKHZhbHVlKQotCQlwaW9fZGF0YV9yZWcgfD0gbWFzazsKLQllbHNlCi0JCXBpb19kYXRhX3JlZyAmPSB+bWFzazsKLQl3cml0ZWwocGlvX2RhdGFfcmVnLCBBTFRFUkFfUElPX0RBVEEpOwotfQotCi1pbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKQotewotCXJldHVybiAoKHVuc2lnbmVkKW51bWJlcikgPCBBTFRFUkFfUElPX1dJRFRIOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9hbHRlcmEvbmlvczItZ2VuZXJpYy9uaW9zMi1nZW5lcmljLmMgYi9ib2FyZC9hbHRlcmEvbmlvczItZ2VuZXJpYy9uaW9zMi1nZW5lcmljLmMKaW5kZXggNDllZjgwZC4uMGY4ODI3NSAxMDA2NDQKLS0tIGEvYm9hcmQvYWx0ZXJhL25pb3MyLWdlbmVyaWMvbmlvczItZ2VuZXJpYy5jCisrKyBiL2JvYXJkL2FsdGVyYS9uaW9zMi1nZW5lcmljL25pb3MyLWdlbmVyaWMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPG5ldGRldi5oPgogI2luY2x1ZGUgPG10ZC9jZmlfZmxhc2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCiB2b2lkIHRleHRfYmFzZV9ob29rKHZvaWQpOyAvKiBub3AgaG9vayBmb3IgdGV4dF9iYXNlLlMgKi8KIApAQCAtNDMsNiArNDQsMTMgQEAKIGludCBib2FyZF9lYXJseV9pbml0X2Yodm9pZCkKIHsKIAl0ZXh0X2Jhc2VfaG9vaygpOworI2lmZGVmIENPTkZJR19BTFRFUkFfUElPCisjaWZkZWYgTEVEX1BJT19CQVNFCisJYWx0ZXJhX3Bpb19pbml0KExFRF9QSU9fQkFTRSwgTEVEX1BJT19XSURUSCwgJ28nLAorCQkJTEVEX1BJT19SU1RWQUwsICgxIDw8IExFRF9QSU9fV0lEVEgpIC0gMSwKKwkJCSJsZWQiKTsKKyNlbmRpZgorI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfRU5WX0lTX0lOX0ZMQVNIKSAmJiBkZWZpbmVkKENPTkZJR19FTlZfQUREUikKIAllYXJseV9mbGFzaF9jbWRfcmVzZXQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvYXJtLWViaS5oIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvYXJtLWViaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODVlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci9hcm0tZWJpLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMQorICogTGluYXJvCisgKiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgKEVCSSkKKyAqIGZvdW5kIGluIHRoZSBBUk0gSW50ZWdyYXRvciBBUCBhbmQgQ1AgcmVmZXJlbmNlIGRlc2lnbnMKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQVJNX0VCSV9ICisjZGVmaW5lIF9fQVJNX0VCSV9ICisKKyNkZWZpbmUgRUJJX0JBU0UJCTB4MTIwMDAwMDAKKworI2RlZmluZSBFQklfQ1NSMF9SRUcJCTB4MDAgLyogQ1MwID0gQm9vdCBST00gKi8KKyNkZWZpbmUgRUJJX0NTUjFfUkVHCQkweDA0IC8qIENTMSA9IEZsYXNoICovCisjZGVmaW5lIEVCSV9DU1IyX1JFRwkJMHgwOCAvKiBDUzIgPSBTU1JBTSAqLworI2RlZmluZSBFQklfQ1NSM19SRUcJCTB4MEMgLyogQ1MzID0gRXhwYW5zaW9uIG1lbW9yeSAqLworLyoKKyAqIFRoZSBmb3VyIHVwcGVyIGJpdHMgYXJlIHRoZSB3YWl0c3RhdGVzIGZvciBlYWNoIGNoaXAgc2VsZWN0CisgKiAweDAwID0gMiBjeWNsZXMsIDB4MTAgPSAzIGN5Y2xlcywgLi4uIDB4ZTAgPSAxNiBjeWNsZXMsIDB4ZjAgPSAxNiBjeWNsZXMKKyAqLworI2RlZmluZSBFQklfQ1NSX1dBSVRfTUFTSwkweEYwCisvKiBXaGV0aGVyIG1lbW9yeSBpcyBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgKi8KKyNkZWZpbmUgRUJJX0NTUl9TWU5DX01BU0sJMHhGNworI2RlZmluZSBFQklfQ1NSX0FTWU5DCQkweDAwCisjZGVmaW5lIEVCSV9DU1JfU1lOQwkJMHgwOAorLyogV2hldGhlciBtZW1vcnkgaXMgd3JpdGUgZW5hYmxlZCBvciBub3QgKi8KKyNkZWZpbmUgRUJJX0NTUl9XUkVOX01BU0sJMHhGQgorI2RlZmluZSBFQklfQ1NSX1dSRU5fRElTQUJMRQkweDAwCisjZGVmaW5lIEVCSV9DU1JfV1JFTl9FTkFCTEUJMHgwNAorLyogTWVtb3J5IGJpdCB3aWR0aCBmb3IgZWFjaCBjaGlwIHNlbGVjdCAqLworI2RlZmluZSBFQklfQ1NSX01FTVNJWkVfTUFTSwkweEZDCisjZGVmaW5lIEVCSV9DU1JfTUVNU0laRV84QklUCTB4MDAKKyNkZWZpbmUgRUJJX0NTUl9NRU1TSVpFXzE2QklUCTB4MDEKKyNkZWZpbmUgRUJJX0NTUl9NRU1TSVpFXzMyQklUCTB4MDIKKworLyoKKyAqIFRoZSBsb2NrIHJlZ2lzdGVyIG5lZWQgdG8gYmUgd3JpdHRlbiB3aXRoIDB4YTA1ZiBiZWZvcmUgYW55dGhpbmcgaW4gdGhlCisgKiBFQkkgY2FuIGJlIGNoYW5nZWQuCisgKi8KKyNkZWZpbmUgRUJJX0xPQ0tfUkVHCQkweDIwCisjZGVmaW5lIEVCSV9VTkxPQ0tfTUFHSUMJMHhBMDVGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvY29uZmlnLm1rIGIvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvY29uZmlnLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjU3YWYxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL2NvbmZpZy5taworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBpbWFnZSBzaG91bGQgYmUgbG9hZGVkIGF0IDB4MDEwMDAwMDAKLSMKLQotQ09ORklHX1NZU19URVhUX0JBU0UgPSAweDAxMDAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci9pbnRlZ3JhdG9yLXNjLmggYi9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci9pbnRlZ3JhdG9yLXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5ZGM1NQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL2ludGVncmF0b3Itc2MuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDExCisgKiBMaW5hcm8KKyAqIExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgU3lzdGVtIENvbnRyb2xsZXIgKFNDKSBhbmQKKyAqIHRoZSBzaW1pbGFyICJDUCBDb250cm9sbGVyIiBmb3VuZCBpbiB0aGUgQVJNIEludGVncmF0b3IvQVAgYW5kCisgKiBJbnRlZ3JhdG9yL0NQIHJlZmVyZW5jZSBkZXNpZ25zCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FSTV9TQ19ICisjZGVmaW5lIF9fQVJNX1NDX0gKKworI2RlZmluZSBTQ19CQVNFCQkJMHgxMTAwMDAwMAorCisvKgorICogVGhlIHN5c3RlbSBjb250cm9sbGVyIHJlZ2lzdGVycworICovCisjZGVmaW5lIFNDX0lEX09GRlNFVAkJMHgwMAorI2RlZmluZSBTQ19PU0NfT0ZGU0VUCQkweDA0CisvKiBTZXR0aW5nIHRoaXMgYml0IHN3aXRjaGVzIHRvIDI1IE1IeiBtb2RlLCBjbGVhciBtZWFucyAzMyBNSHogKi8KKyNkZWZpbmUgU0NfT1NDX0RJVlhZCQkoMSA8PCA4KQorI2RlZmluZSBTQ19DVFJMU19PRkZTRVQJCTB4MDgKKyNkZWZpbmUgU0NfQ1RSTENfT0ZGU0VUCQkweDBDCisvKiBTZXQgYml0cyBieSB3cml0aW5nIENUUkxTLCBjbGVhciBiaXRzIGJ5IHdyaXRpbmcgQ1RSTEMgKi8KKyNkZWZpbmUgU0NfQ1RSTF9TT0ZUUkVTRVQJKDEgPDwgMCkKKyNkZWZpbmUgU0NfQ1RSTF9GTEFTSFZQUAkoMSA8PCAxKQorI2RlZmluZSBTQ19DVFJMX0ZMQVNIV1AJCSgxIDw8IDIpCisjZGVmaW5lIFNDX0NUUkxfVUFSVDFEVFIJKDEgPDwgNCkKKyNkZWZpbmUgU0NfQ1RSTF9VQVJUMVJUUwkoMSA8PCA1KQorI2RlZmluZSBTQ19DVFJMX1VBUlQwRFRSCSgxIDw8IDYpCisjZGVmaW5lIFNDX0NUUkxfVUFSVDBSVFMJKDEgPDwgNykKKyNkZWZpbmUgU0NfREVDX09GRlNFVAkJMHgxMAorI2RlZmluZSBTQ19BUkJfT0ZGU0VUCQkweDE0CisjZGVmaW5lIFNDX1BDSV9PRkZTRVQJCTB4MTgKKyNkZWZpbmUgU0NfUENJX1BDSUVOCQkoMSA8PCAwKQorI2RlZmluZSBTQ19QQ0lfUENJQklOVF9DTFIJKDEgPDwgMSkKKyNkZWZpbmUgU0NfTE9DS19PRkZTRVQJCTB4MUMKKyNkZWZpbmUgU0NfTEJGQUREUl9PRkZTRVQJMHgyMAorI2RlZmluZSBTQ19MQkZDT0RFX09GRlNFVAkweDI0CisKKyNkZWZpbmUgU0NfSUQgKFNDX0JBU0UgKyBTQ19JRF9PRkZTRVQpCisjZGVmaW5lIFNDX09TQyAoU0NfQkFTRSArIFNDX09TQ19PRkZTRVQpCisjZGVmaW5lIFNDX0NUUkxTIChTQ19CQVNFICsgU0NfQ1RSTFNfT0ZGU0VUKQorI2RlZmluZSBTQ19DVFJMQyAoU0NfQkFTRSArIFNDX0NUUkxDX09GRlNFVCkKKyNkZWZpbmUgU0NfREVDIChTQ19CQVNFICsgU0NfREVDX09GRlNFVCkKKyNkZWZpbmUgU0NfQVJCIChTQ19CQVNFICsgU0NfQVJCX09GRlNFVCkKKyNkZWZpbmUgU0NfUENJIChTQ19CQVNFICsgU0NfUENJX09GRlNFVCkKKyNkZWZpbmUgU0NfTE9DSyAoU0NfQkFTRSArIFNDX0xPQ0tfT0ZGU0VUKQorI2RlZmluZSBTQ19MQkZBRERSIChTQ19CQVNFICsgU0NfTEJGQUREUl9PRkZTRVQpCisjZGVmaW5lIFNDX0xCRkNPREUgKFNDX0JBU0UgKyBTQ19MQkZDT0RFX09GRlNFVCkKKworLyoKKyAqIFRoZSBJbnRlZ3JhdG9yL0NQIGFzIGEgc21hbGxlciBzZXQgb2YgcmVnaXN0ZXJzLCBhdCBhIGRpZmZlcmVudAorICogb2Zmc2V0IC0gcHJvYmFibHkgbm90IHRvIGRpc3R1cmIgb2xkIHNvZnR3YXJlLgorICovCisKKyNkZWZpbmUgQ1BfQkFTRQkJCTB4Q0IwMDAwMDAKKworI2RlZmluZSBDUF9JREZJRUxEX09GRlNFVAkweDAwCisjZGVmaW5lIENQX0ZMQVNIUFJPR19PRkZTRVQJMHgwNAorI2RlZmluZSBDUF9GTEFTSFBST0dfRkxWUFBFTgkoMSA8PCAwKQorI2RlZmluZSBDUF9GTEFTSFBST0dfRkxXUkVOCSgxIDw8IDEpCisjZGVmaW5lIENQX0ZMQVNIUFJPR19GTEFTSFNJWkUJKDEgPDwgMikKKyNkZWZpbmUgQ1BfRkxBU0hQUk9HX0VYVFJBQkFOSwkoMSA8PCAzKQorI2RlZmluZSBDUF9JTlRSRUdfT0ZGU0VUCTB4MDgKKyNkZWZpbmUgQ1BfREVDT0RFX09GRlNFVAkweDBDCisKKyNkZWZpbmUgQ1BfSURGSUVMRCAoQ1BfQkFTRSArIENQX0lEX09GRlNFVCkKKyNkZWZpbmUgQ1BfRkxBU0hQUk9HIChDUF9CQVNFICsgQ1BfRkxBU0hQUk9HX09GRlNFVCkKKyNkZWZpbmUgQ1BfSU5UUkVHIChDUF9CQVNFICsgQ1BfSU5UUkVHX09GRlNFVCkKKyNkZWZpbmUgQ1BfREVDT0RFIChDUF9CQVNFICsgQ1BfREVDT0RFX09GRlNFVCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci9pbnRlZ3JhdG9yLmMgYi9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci9pbnRlZ3JhdG9yLmMKaW5kZXggYzhkMmJjNy4uYTUwN2MwOSAxMDA2NDQKLS0tIGEvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvaW50ZWdyYXRvci5jCisrKyBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL2ludGVncmF0b3IuYwpAQCAtMzUsNiArMzUsOSBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSAiYXJtLWViaS5oIgorI2luY2x1ZGUgImludGVncmF0b3Itc2MuaCIKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKQEAgLTU1LDYgKzU4LDggQEAKIAogaW50IGJvYXJkX2luaXQgKHZvaWQpCiB7CisJdTMyIHZhbDsKKwogCS8qIGFyY2ggbnVtYmVyIG9mIEludGVncmF0b3IgQm9hcmQgKi8KICNpZmRlZiBDT05GSUdfQVJDSF9DSU5URUdSQVRPUgogCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfQ0lOVEVHUkFUT1I7CkBAIC03Miw2ICs3NywzNyBAQAogCWNtX3JlbWFwKCk7CS8qIHJlbWFwcyB3cml0ZWFibGUgbWVtb3J5IHRvIDB4MDAwMDAwMDAgKi8KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfQ0lOVEVHUkFUT1IKKwkvKgorCSAqIEZsYXNoIHByb3RlY3Rpb24gb24gdGhlIEludGVncmF0b3IvQ1AgaXMgaW4gYSBzaW1wbGUgcmVnaXN0ZXIKKwkgKi8KKwl2YWwgPSByZWFkbChDUF9GTEFTSFBST0cpOworCXZhbCB8PSAoQ1BfRkxBU0hQUk9HX0ZMVlBQRU4gfCBDUF9GTEFTSFBST0dfRkxXUkVOKTsKKwl3cml0ZWwodmFsLCBDUF9GTEFTSFBST0cpOworI2Vsc2UKKwkvKgorCSAqIFRoZSBJbnRlZ3JhdG9yL0FQIGhhcyBzb21lIHNwZWNpYWwgcHJvdGVjdGlvbiBtZWNoYW5pc21zCisJICogZm9yIHRoZSBleHRlcm5hbCBtZW1vcmllcywgZmlyc3QgdGhlIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgKEVCSSkKKwkgKiB0aGVuIHRoZSBzeXN0ZW0gY29udHJvbGxlciAoU0MpLgorCSAqCisJICogVGhlIHN5c3RlbSBjb21lcyB1cCB3aXRoIHRoZSBmbGFzaCBtZW1vcnkgbm9uLXdyaXRhYmxlIGFuZAorCSAqIGNvbmZpZ3VyYXRpb24gbG9ja2VkLiBJZiB3ZSB3YW50IFUtQm9vdCB0byBiZSB1c2VkIGZvciBmbGFzaAorCSAqIGFjY2VzcyB3ZSBjYW5ub3QgaGF2ZSB0aGUgZmxhc2ggbWVtb3J5IGxvY2tlZC4KKwkgKi8KKwl3cml0ZWwoRUJJX1VOTE9DS19NQUdJQywgRUJJX0JBU0UgKyBFQklfTE9DS19SRUcpOworCXZhbCA9IHJlYWRsKEVCSV9CQVNFICsgRUJJX0NTUjFfUkVHKTsKKwl2YWwgJj0gRUJJX0NTUl9XUkVOX01BU0s7CisJdmFsIHw9IEVCSV9DU1JfV1JFTl9FTkFCTEU7CisJd3JpdGVsKHZhbCwgRUJJX0JBU0UgKyBFQklfQ1NSMV9SRUcpOworCXdyaXRlbCgwLCBFQklfQkFTRSArIEVCSV9MT0NLX1JFRyk7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgdG8gcmVtb3ZlIHdyaXRlIHByb3RlY3Rpb24gZnJvbQorCSAqIHRoZSBmbGFzaCBtZW1vcnkgYW5kIGVuYWJsZSBWcHAKKwkgKi8KKwl3cml0ZWwoU0NfQ1RSTF9GTEFTSFZQUCB8IFNDX0NUUkxfRkxBU0hXUCwgU0NfQ1RSTFMpOworI2VuZGlmCisKIAlpY2FjaGVfZW5hYmxlICgpOwogCiAJcmV0dXJuIDA7CkBAIC04NiwyMSArMTIyLDMwIEBACiAJcmV0dXJuICgwKTsKIH0KIAorLyoKKyAqIFRoZSBJbnRlZ3JhdG9yIHJlbWFwcyB0aGUgRmxhc2ggbWVtb3J5IHRvIDB4MDAwMDAwMDAgYW5kIGV4ZWN1dGVzIFUtQm9vdAorICogZnJvbSB0aGVyZSwgd2hpY2ggbWVhbnMgd2UgY2Fubm90IHRlc3QgdGhlIFJBTSB1bmRlcm5lYXRoIHRoZSBST00gYXQgdGhpcworICogcG9pbnQuIEl0IHdpbGwgYmUgdW5tYXBwZWQgbGF0ZXIgb24sIHdoZW4gd2UgYXJlIGV4ZWN1dGluZyBmcm9tIHRoZQorICogcmVsb2NhdGVkIGluIFJBTSBVLUJvb3QuIFdlIHNpbXBseSBhc3N1bWUgdGhhdCB0aGlzIFJBTSBpcyB1c2FibGUgaWYgdGhlCisgKiBSQU0gb24gaGlnaGVyIGFkZHJlc3NlcyB3b3JrcyBmaW5lLgorICovCisjZGVmaW5lIFJFTUFQUEVEX0ZMQVNIX1NaIDB4NDAwMDAKKwogaW50IGRyYW1faW5pdCAodm9pZCkKIHsKIAlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBDT05GSUdfU1lTX1NEUkFNX0JBU0U7CiAjaWZkZWYgQ09ORklHX0NNX1NQRF9ERVRFQ1QKIAl7CiBleHRlcm4gdm9pZCBkcmFtX3F1ZXJ5KHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgY21fcmVnX3NkcmFtOwotCXVuc2lnbmVkIGxvbmcgc2RyYW1fc2hpZnQ7CisJdTMyIGNtX3JlZ19zZHJhbTsKKwl1MzIgc2RyYW1fc2hpZnQ7CiAKIAlkcmFtX3F1ZXJ5KCk7CS8qIEFzc2VtYmxlciBhY2Nlc3NlcyB0byBDTSByZWdpc3RlcnMgKi8KIAkJCS8qIFF1ZXJpZXMgdGhlIFNQRCB2YWx1ZXMJICAgICAgKi8KIAogCS8qIE9idGFpbiB0aGUgU0RSQU0gc2l6ZSBmcm9tIHRoZSBDTSBTRFJBTSByZWdpc3RlciAqLwogCi0JY21fcmVnX3NkcmFtID0gKih2b2xhdGlsZSB1bG9uZyAqKShDTV9CQVNFICsgT1NfU0RSQU0pOworCWNtX3JlZ19zZHJhbSA9IHJlYWRsKENNX0JBU0UgKyBPU19TRFJBTSk7CiAJLyogICBSZWdpc3RlcgkgICAgICBTRFJBTSBzaXplCiAJICoKIAkgKiAgIDB4WFhYWFhYYmJiMDAwYmIJIDE2IE1CCkBAIC0xMTAsMTYgKzE1NSwxOCBAQAogCSAqICAgMHhYWFhYWFhiYmIxMDBiYgkyNTYgTUIKIAkgKgogCSAqLwotCXNkcmFtX3NoaWZ0CQkgPSAoKGNtX3JlZ19zZHJhbSAmIDB4MDAwMDAwMUMpLzQpJTQ7Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUJID0gMHgwMTAwMDAwMCA8PCBzZHJhbV9zaGlmdDsKLQlnZC0+cmFtX3NpemUgPSBnZXRfcmFtX3NpemUoKGxvbmcgKilDT05GSUdfU1lTX1NEUkFNX0JBU0UsCisJc2RyYW1fc2hpZnQgPSAoKGNtX3JlZ19zZHJhbSAmIDB4MDAwMDAwMUMpLzQpJTQ7CisJZ2QtPnJhbV9zaXplID0gZ2V0X3JhbV9zaXplKChsb25nICopIENPTkZJR19TWVNfU0RSQU1fQkFTRSArCisJCQkJICAgIFJFTUFQUEVEX0ZMQVNIX1NaLAogCQkJCSAgICAweDAxMDAwMDAwIDw8IHNkcmFtX3NoaWZ0KTsKIAl9CiAjZWxzZQotCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci0JZ2QtPnJhbV9zaXplID0gZ2V0X3JhbV9zaXplKChsb25nICopQ09ORklHX1NZU19TRFJBTV9CQVNFLAorCWdkLT5yYW1fc2l6ZSA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKSBDT05GSUdfU1lTX1NEUkFNX0JBU0UgKworCQkJCSAgICBSRU1BUFBFRF9GTEFTSF9TWiwKIAkJCQkgICAgUEhZU19TRFJBTV8xX1NJWkUpOwogI2VuZGlmIC8qIENNX1NQRF9ERVRFQ1QgKi8KKwkvKiBXZSBvbmx5IGhhdmUgb25lIGJhbmsgb2YgUkFNLCBzZXQgaXQgdG8gd2hhdGV2ZXIgd2FzIGRldGVjdGVkICovCisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUJID0gZ2QtPnJhbV9zaXplOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9jbTQwMDgvZmxhc2guYyBiL2JvYXJkL2NtNDAwOC9mbGFzaC5jCmluZGV4IDJlMTM1NmYuLjU1MjJiZjAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NtNDAwOC9mbGFzaC5jCisrKyBiL2JvYXJkL2NtNDAwOC9mbGFzaC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKIHsKLQlpbnQgZmxhZywgcHJvdCwgc2VjdDsKKwlpbnQgcHJvdCwgc2VjdDsKIAl1bG9uZyB0eXBlOwogCWludCByY29kZSA9IDA7CiAJdWxvbmcgc3RhcnQ7CkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJcHJpbnRmICgiXG4iKTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKIAkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCiAJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgewpAQCAtMzcwLDcgKzM3MCw2IEBACiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIGRlc3Q7CiAJdWxvbmcgc3RhdHVzOwotCWludCBmbGFnOwogCXVsb25nIHN0YXJ0OwogCiAJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCkBAIC0zODAsNyArMzc5LDcgQEAKIAkJcmV0dXJuICgyKTsKIAl9CiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKwlkaXNhYmxlX2ludGVycnVwdHMoKTsKIAogCSphZGRyID0gMHg0MDsJLyogd3JpdGUgc2V0dXAgKi8KIAkqYWRkciA9IGRhdGE7CmRpZmYgLS1naXQgYS9ib2FyZC9jbTQxeHgvZmxhc2guYyBiL2JvYXJkL2NtNDF4eC9mbGFzaC5jCmluZGV4IDJlMTM1NmYuLjU1MjJiZjAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NtNDF4eC9mbGFzaC5jCisrKyBiL2JvYXJkL2NtNDF4eC9mbGFzaC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKIHsKLQlpbnQgZmxhZywgcHJvdCwgc2VjdDsKKwlpbnQgcHJvdCwgc2VjdDsKIAl1bG9uZyB0eXBlOwogCWludCByY29kZSA9IDA7CiAJdWxvbmcgc3RhcnQ7CkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJcHJpbnRmICgiXG4iKTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKIAkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCiAJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgewpAQCAtMzcwLDcgKzM3MCw2IEBACiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIGRlc3Q7CiAJdWxvbmcgc3RhdHVzOwotCWludCBmbGFnOwogCXVsb25nIHN0YXJ0OwogCiAJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCkBAIC0zODAsNyArMzc5LDcgQEAKIAkJcmV0dXJuICgyKTsKIAl9CiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKwlkaXNhYmxlX2ludGVycnVwdHMoKTsKIAogCSphZGRyID0gMHg0MDsJLyogd3JpdGUgc2V0dXAgKi8KIAkqYWRkciA9IGRhdGE7CmRpZmYgLS1naXQgYS9ib2FyZC9jc2IyMjYvY3NiMjI2LmMgYi9ib2FyZC9jc2IyMjYvY3NiMjI2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMjllNjIuLjAwMDAwMDAKLS0tIGEvYm9hcmQvY3NiMjI2L2NzYjIyNi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgsIHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGUKLSAqIEt5bGUgSGFycmlzLCBOZXh1cyBUZWNobm9sb2dpZXMsIEluYy4sIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKLSAqIE1hcml1cyBHcm9lZ2VyLCBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zIEdtYkgsIG1ncm9lZ2VyQHN5c2dvLmRlCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPG5ldGRldi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCi0jaWZkZWYgQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUwotIyBkZWZpbmUgU0hPV19CT09UX1BST0dSRVNTKGFyZykgICAgICAgIHNob3dfYm9vdF9wcm9ncmVzcyhhcmcpCi0jZWxzZQotIyBkZWZpbmUgU0hPV19CT09UX1BST0dSRVNTKGFyZykKLSNlbmRpZgotCi0vKioKLSAqIG1pc2NfaW5pdF9yOiAtIG1pc2MgaW5pdGlhbGlzYXRpb24gcm91dGluZXMKLSAqLwotCi1pbnQgbWlzY19pbml0X3Iodm9pZCkKLXsKLSNpZiAwCi0JdWNoYXIgKnN0cjsKLQotCS8qIGRldGVybWluZSBpZiB0aGUgc29mdHdhcmUgdXBkYXRlIGtleSBpcyBwcmVzc2VkIGR1cmluZyBzdGFydHVwICovCi0JLyogbm90IHBvcnRlZCB5ZXQuLi4gKi8KLQlpZiAoR1BMUjAgJiAweDAwMDAwODAwKSB7Ci0JCXByaW50ZigidXNpbmcgYm9vdGNtZF9ub3JtYWwgKHN3LXVwZGF0ZSBidXR0b24gbm90IHByZXNzZWQpXG4iKTsKLQkJc3RyID0gZ2V0ZW52KCJib290Y21kX25vcm1hbCIpOwotCX0gZWxzZSB7Ci0JCXByaW50ZigidXNpbmcgYm9vdGNtZF91cGRhdGUgKHN3LXVwZGF0ZSBidXR0b24gcHJlc3NlZClcbiIpOwotCQlzdHIgPSBnZXRlbnYoImJvb3RjbWRfdXBkYXRlIik7Ci0JfQotCi0Jc2V0ZW52KCJib290Y21kIixzdHIpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiBib2FyZF9pbml0OiAtIHNldHVwIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzCi0gKgotICogQHJldHVybjogMCBpbiBjYXNlIG9mIHN1Y2Nlc3MKLSAqLwotCi1pbnQgYm9hcmRfaW5pdCAodm9pZCkKLXsKLQkvKiBXZSBoYXZlIFJBTSwgZGlzYWJsZSBjYWNoZSAqLwotCWRjYWNoZV9kaXNhYmxlKCk7Ci0JaWNhY2hlX2Rpc2FibGUoKTsKLQotCS8qIGFyY2ggbnVtYmVyIG9mIENTQjIyNiBib2FyZCAqLwotCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfQ1NCMjI2OwotCi0JLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLwotCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweGEwMDAwMTAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotZXh0ZXJuIHZvaWQgcHhhX2RyYW1faW5pdCh2b2lkKTsKLWludCBkcmFtX2luaXQodm9pZCkKLXsKLQlweGFfZHJhbV9pbml0KCk7Ci0JZ2QtPnJhbV9zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHJhbV9pbml0X2JhbmtzaXplKHZvaWQpCi17Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOwotCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci19Ci0KLS8qKgotICogY3NiMjI2X3NldF9sZWQ6IC0gc3dpdGNoIExFRHMgb24gb3Igb2ZmCi0gKgotICogQHBhcmFtIGxlZDogICBMRUQgdG8gc3dpdGNoICgwLDEsMikKLSAqIEBwYXJhbSBzdGF0ZTogc3dpdGNoIG9uICgxKSBvciBvZmYgKDApCi0gKi8KLQotdm9pZCBjc2IyMjZfc2V0X2xlZChpbnQgbGVkLCBpbnQgc3RhdGUpCi17Ci0Jc3dpdGNoKGxlZCkgewotCi0JCWNhc2UgMDogaWYgKHN0YXRlPT0xKSB7Ci0JCQkJd3JpdGVsKHJlYWRsKEdQQ1IwKSB8IENTQjIyNl9VU0VSX0xFRDAsIEdQQ1IwKTsKLQkJCX0gZWxzZSBpZiAoc3RhdGU9PTApIHsKLQkJCQl3cml0ZWwocmVhZGwoR1BTUjApIHwgQ1NCMjI2X1VTRVJfTEVEMCwgR1BTUjApOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAxOiBpZiAoc3RhdGU9PTEpIHsKLQkJCQl3cml0ZWwocmVhZGwoR1BDUjApIHwgQ1NCMjI2X1VTRVJfTEVEMSwgR1BDUjApOwotCQkJfSBlbHNlIGlmIChzdGF0ZT09MCkgewotCQkJCXdyaXRlbChyZWFkbChHUFNSMCkgfCBDU0IyMjZfVVNFUl9MRUQxLCBHUFNSMCk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIDI6IGlmIChzdGF0ZT09MSkgewotCQkJCXdyaXRlbChyZWFkbChHUENSMCkgfCBDU0IyMjZfVVNFUl9MRUQyLCBHUENSMCk7Ci0JCQl9IGVsc2UgaWYgKHN0YXRlPT0wKSB7Ci0JCQkJd3JpdGVsKHJlYWRsKEdQU1IwKSB8IENTQjIyNl9VU0VSX0xFRDIsIEdQU1IwKTsKLQkJCX0KLQkJCWJyZWFrOwotCX0KLQotCXJldHVybjsKLX0KLQotCi0vKioKLSAqIHNob3dfYm9vdF9wcm9ncmVzczogLSBpbmRpY2F0ZSBzdGF0ZSBvZiB0aGUgYm9vdCBwcm9jZXNzCi0gKgotICogQHBhcmFtIHN0YXR1czogU3RhdHVzIG51bWJlciAtIHNlZSBSRUFETUUgZm9yIGRldGFpbHMuCi0gKgotICogVGhlIENTQjIyNiBkb2VzIG9ubHkgaGF2ZSAzIExFRHMsIHNvIHdlIHN3aXRjaCB0aGVtIG9uIGF0IHRoZSBtb3N0Ci0gKiBpbXBvcnRhbnQgc3RhdGVzICgxLCA1LCAxNSkuCi0gKi8KLQotdm9pZCBzaG93X2Jvb3RfcHJvZ3Jlc3MgKGludCBzdGF0dXMpCi17Ci0Jc3dpdGNoKHN0YXR1cykgewotCQljYXNlICAxOiBjc2IyMjZfc2V0X2xlZCgwLDEpOyBicmVhazsKLQkJY2FzZSAgNTogY3NiMjI2X3NldF9sZWQoMSwxKTsgYnJlYWs7Ci0JCWNhc2UgMTU6IGNzYjIyNl9zZXRfbGVkKDIsMSk7IGJyZWFrOwotCX0KLQotCXJldHVybjsKLX0KLQotI2lmZGVmIENPTkZJR19DTURfTkVUCi1pbnQgYm9hcmRfZXRoX2luaXQoYmRfdCAqYmlzKQotewotCWludCByYyA9IDA7Ci0jaWZkZWYgQ09ORklHX0NTODkwMAotCXJjID0gY3M4OTAwX2luaXRpYWxpemUoMCwgQ09ORklHX0NTODkwMF9CQVNFKTsKLSNlbmRpZgotCXJldHVybiByYzsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjI2L2ZsYXNoLmMgYi9ib2FyZC9jc2IyMjYvZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwMzQ3MC4uMDAwMDAwMAotLS0gYS9ib2FyZC9jc2IyMjYvZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDM2OCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peCwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAzICgyIHggMTYgYml0IEZsYXNoIGJhbmsgcGF0Y2hlcykKLSAqIFJvbGYgUGV1a2VydCwgSU1NUyBnR21iSCwgPHJvbGYucGV1a2VydEBpbW1zLmRlPgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgotCi0jZGVmaW5lIEZMQVNIX0JBTktfU0laRSAweDAyMDAwMDAwCi0jZGVmaW5lIE1BSU5fU0VDVF9TSVpFCTB4NDAwMDAJCS8qIDJ4MTYgPSAyNTZrIHBlciBzZWN0b3IgKi8KLQotZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1NdOwotCi0KLS8qKgotICogZmxhc2hfaW5pdDogLSBpbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcyBmb3IgZmxhc2ggY2hpcHMKLSAqCi0gKiBAcmV0dXJuOiBzaXplIG9mIHRoZSBmbGFzaAotICovCi0KLXVsb25nIGZsYXNoX2luaXQodm9pZCkKLXsKLQlpbnQgaSwgajsKLQl1bG9uZyBzaXplID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7Ci0JCXVsb25nIGZsYXNoYmFzZSA9IDA7Ci0JCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPQotCQkJKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spIHwKLQkJCShJTlRFTF9JRF8yOEYxMjhKMyAmIEZMQVNIX1RZUEVNQVNLKTsKLQkJZmxhc2hfaW5mb1tpXS5zaXplID0gRkxBU0hfQkFOS19TSVpFOwotCQlmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudCA9IENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1Q7Ci0JCW1lbXNldChmbGFzaF9pbmZvW2ldLnByb3RlY3QsIDAsIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QpOwotCi0JCXN3aXRjaCAoaSkgewotCQljYXNlIDA6Ci0JCQlmbGFzaGJhc2UgPSBQSFlTX0ZMQVNIXzE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBhbmljKCJjb25maWd1cmVkIHRvbyBtYW55IGZsYXNoIGJhbmtzIVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlmb3IgKGogPSAwOyBqIDwgZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQ7IGorKykgewotCQkJZmxhc2hfaW5mb1tpXS5zdGFydFtqXSA9IGZsYXNoYmFzZSArIGoqTUFJTl9TRUNUX1NJWkU7Ci0JCX0KLQkJc2l6ZSArPSBmbGFzaF9pbmZvW2ldLnNpemU7Ci0JfQotCi0JLyogUHJvdGVjdCBtb25pdG9yIGFuZCBlbnZpcm9ubWVudCBzZWN0b3JzICovCi0JZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkJQ09ORklHX1NZU19GTEFTSF9CQVNFLAotCQkJQ09ORklHX1NZU19GTEFTSF9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gLSAxLAotCQkJJmZsYXNoX2luZm9bMF0pOwotCi0JZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotCQkJQ09ORklHX0VOVl9BRERSLAotCQkJQ09ORklHX0VOVl9BRERSICsgQ09ORklHX0VOVl9TSVpFIC0gMSwKLQkJCSZmbGFzaF9pbmZvWzBdKTsKLQotCXJldHVybiBzaXplOwotfQotCi0KLS8qKgotICogZmxhc2hfcHJpbnRfaW5mbzogLSBwcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmxhc2ggc2l0dWF0aW9uCi0gKi8KLQotdm9pZCBmbGFzaF9wcmludF9pbmZvICAoZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpLCBqOwotCi0JZm9yIChqPTA7IGo8Q09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1M7IGorKykgewotCi0JCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewotCQljYXNlIChJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKToKLQkJCXByaW50ZiAoIkludGVsOiAiKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotCQljYXNlIChJTlRFTF9JRF8yOEYxMjhKMyAmIEZMQVNIX1RZUEVNQVNLKToKLQkJCXByaW50ZigiMjhGMTI4SjMgKDEyOE1iaXQpXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRmKCJVbmtub3duIENoaXAgVHlwZVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlwcmludGYoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0JCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCi0JCXByaW50ZigiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLQkJCWlmICgoaSAlIDUpID09IDApIHByaW50ZiAoIlxuCSIpOwotCi0JCQlwcmludGYgKCIgJTA4bFglcyIsIGluZm8tPnN0YXJ0W2ldLAotCQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIgkgICAiKTsKLQkJfQotCQlwcmludGYgKCJcbiIpOwotCQlpbmZvKys7Ci0JfQotfQotCi0KLS8qKgotICogZmxhc2hfZXJhc2U6IC0gZXJhc2UgZmxhc2ggc2VjdG9ycwotICovCi0KLWludCBmbGFzaF9lcmFzZShmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQotewotCWludCBmbGFnLCBwcm90LCBzZWN0OwotCWludCByYyA9IEVSUl9PSzsKLQl1bG9uZyBzdGFydDsKLQotCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQotCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVFlQRTsKLQotCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotCQlyZXR1cm4gRVJSX0lOVkFMOwotCX0KLQotCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgIT0gKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spKQotCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVkVORE9SOwotCi0JcHJvdCA9IDA7Ci0JZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSBwcm90Kys7Ci0JfQotCi0JaWYgKHByb3QpIHJldHVybiBFUlJfUFJPVEVDVEVEOwotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0Ci0JICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCi0JICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQotCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCi0JICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgotCSAqLwotCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0JLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdCAmJiAhY3RybGMoKTsgc2VjdCsrKSB7Ci0KLQkJcHJpbnRmKCJFcmFzaW5nIHNlY3RvciAlMmQgLi4uICIsIHNlY3QpOwotCi0JCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCi0JCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwotCi0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgLyogbm90IHByb3RlY3RlZCAqLwotCQkJdTMyICogdm9sYXRpbGUgYWRkciA9ICh1MzIgKiB2b2xhdGlsZSkoaW5mby0+c3RhcnRbc2VjdF0pOwotCi0JCQkvKiBlcmFzZSBzZWN0b3I6CQkJCSAgICAqLwotCQkJLyogVGhlIHN0cmF0YSBmbGFzaHMgYXJlIGFsaWduZWQgc2lkZSBieSBzaWRlIG9uICAgICovCi0JCQkvKiB0aGUgZGF0YSBidXMsIHNvIHdlIGhhdmUgdG8gd3JpdGUgdGhlIGNvbW1hbmRzICAgKi8KLQkJCS8qIHRvIGJvdGggY2hpcHMgaGVyZToJCQkJICAgICovCi0KLQkJCSphZGRyID0gMHgwMDIwMDAyMDsJLyogZXJhc2Ugc2V0dXAgKi8KLQkJCSphZGRyID0gMHgwMEQwMDBEMDsJLyogZXJhc2UgY29uZmlybSAqLwotCi0JCQl3aGlsZSAoKCphZGRyICYgMHgwMDgwMDA4MCkgIT0gMHgwMDgwMDA4MCkgewotCQkJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0JCQkJCSphZGRyID0gMHgwMEIwMDBCMDsgLyogc3VzcGVuZCBlcmFzZSovCi0JCQkJCSphZGRyID0gMHgwMEZGMDBGRjsgLyogcmVhZCBtb2RlICAgICovCi0JCQkJCXJjID0gRVJSX1RJTU9VVDsKLQkJCQkJZ290byBvdXRhaGVyZTsKLQkJCQl9Ci0JCQl9Ci0JCQkqYWRkciA9IDB4MDA1MDAwNTA7IC8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciBjbWQuICAgKi8KLQkJCSphZGRyID0gMHgwMEZGMDBGRjsgLyogcmVzZXQgdG8gcmVhZCBtb2RlCSAgICAqLwotCQl9Ci0JCXByaW50Zigib2suXG4iKTsKLQl9Ci0JaWYgKGN0cmxjKCkpIHByaW50ZigiVXNlciBJbnRlcnJ1cHQhXG4iKTsKLQotb3V0YWhlcmU6Ci0JLyogYWxsb3cgZmxhc2ggdG8gc2V0dGxlIC0gd2FpdCAxMCBtcyAqLwotCXVkZWxheV9tYXNrZWQoMTAwMDApOwotCi0JaWYgKGZsYWcpIGVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogd3JpdGVfbG9uZzogLSBjb3B5IG1lbW9yeSB0byBmbGFzaCwgYXNzdW1lIGEgYmFuayBvZiAyIGRldmljZXMgd2l0aCAxNmJpdCBlYWNoCi0gKi8KLQotc3RhdGljIGludCB3cml0ZV9sb25nIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCi17Ci0JdTMyICogdm9sYXRpbGUgYWRkciA9ICh1MzIgKiB2b2xhdGlsZSlkZXN0LCB2YWw7Ci0JaW50IHJjID0gRVJSX09LOwotCWludCBmbGFnOwotCXVsb25nIHN0YXJ0OwotCi0JLyogcmVhZCBhcnJheSBjb21tYW5kIC0ganVzdCBmb3IgdGhlIGNhc2UuLi4gKi8KLQkqYWRkciA9IDB4MDBGRjAwRkY7Ci0KLQkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KLQlpZiAoKCphZGRyICYgZGF0YSkgIT0gZGF0YSkgcmV0dXJuIEVSUl9OT1RfRVJBU0VEOwotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0Ci0JICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCi0JICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQotCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCi0JICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgotCSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciBjb21tYW5kICovCi0JKmFkZHIgPSAweDAwNTAwMDUwOwotCi0JLyogcHJvZ3JhbSBzZXQtdXAgY29tbWFuZCAqLwotCSphZGRyID0gMHgwMDQwMDA0MDsKLQotCS8qIGxhdGNoIGFkZHJlc3MvZGF0YSAqLwotCSphZGRyID0gZGF0YTsKLQotCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCi0Jc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0KLQkvKiB3YWl0IHdoaWxlIHBvbGxpbmcgdGhlIHN0YXR1cyByZWdpc3RlciAqLwotCXdoaWxlKCgodmFsID0gKmFkZHIpICYgMHgwMDgwMDA4MCkgIT0gMHgwMDgwMDA4MCkgewotCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVCkgewotCQkJcmMgPSBFUlJfVElNT1VUOwotCQkJLyogc3VzcGVuZCBwcm9ncmFtIGNvbW1hbmQgKi8KLQkJCSphZGRyID0gMHgwMEIwMDBCMDsKLQkJCWdvdG8gb3V0YWhlcmU7Ci0JCX0KLQl9Ci0KLQkvKiBjaGVjayBmb3IgZXJyb3JzICovCi0JaWYodmFsICYgMHgwMDFBMDAxQSkgewotCQlwcmludGYoIlxuRmxhc2ggd3JpdGUgZXJyb3IgJTAyeCBhdCBhZGRyZXNzICUwOGx4XG4iLAotCQkJKGludCl2YWwsICh1bnNpZ25lZCBsb25nKWRlc3QpOwotCQlpZih2YWwgJiAweDAwMDgwMDA4KSB7Ci0JCQlwcmludGYoIlZvbHRhZ2UgcmFuZ2UgZXJyb3IuXG4iKTsKLQkJCXJjID0gRVJSX1BST0dfRVJST1I7Ci0JCQlnb3RvIG91dGFoZXJlOwotCQl9Ci0JCWlmKHZhbCAmIDB4MDAwMjAwMDIpIHsKLQkJCXByaW50ZigiRGV2aWNlIHByb3RlY3QgZXJyb3IuXG4iKTsKLQkJCXJjID0gRVJSX1BST1RFQ1RFRDsKLQkJCWdvdG8gb3V0YWhlcmU7Ci0JCX0KLQkJaWYodmFsICYgMHgwMDEwMDAxMCkgewotCQkJcHJpbnRmKCJQcm9ncmFtbWluZyBlcnJvci5cbiIpOwotCQkJcmMgPSBFUlJfUFJPR19FUlJPUjsKLQkJCWdvdG8gb3V0YWhlcmU7Ci0JCX0KLQkJcmMgPSBFUlJfUFJPR19FUlJPUjsKLQkJZ290byBvdXRhaGVyZTsKLQl9Ci0KLW91dGFoZXJlOgotCS8qIHJlYWQgYXJyYXkgY29tbWFuZCAqLwotCSphZGRyID0gMHgwMEZGMDBGRjsKLQlpZiAoZmxhZykgZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCXJldHVybiByYzsKLX0KLQotCi0vKioKLSAqIHdyaXRlX2J1ZjogLSBDb3B5IG1lbW9yeSB0byBmbGFzaC4KLSAqCi0gKiBAcGFyYW0gaW5mbzoKLSAqIEBwYXJhbSBzcmM6CXNvdXJjZSBvZiBjb3B5IHRyYW5zYWN0aW9uCi0gKiBAcGFyYW0gYWRkcjogd2hlcmUgdG8gY29weSB0bwotICogQHBhcmFtIGNudDoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqCi0gKiBAcmV0dXJuCWVycm9yIGNvZGUKLSAqLwotCi0vKiAibG9uZyIgdmVyc2lvbiwgdXNlcyAzMmJpdCB3b3JkcyAqLwotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQotewotCXVsb25nIGNwLCB3cDsKLQl1bG9uZyBkYXRhOwotCWludCBsOwotCWludCBpLCByYzsKLQotCXdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKWNwIDw8IDI0KTsKLQkJfQotCQlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKLQkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqc3JjKysgPDwgMjQpOwotCQkJLS1jbnQ7Ci0JCQkrK2NwOwotCQl9Ci0JCWZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKLQkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopY3AgPDwgMjQpOwotCQl9Ci0KLQkJaWYgKChyYyA9IHdyaXRlX2xvbmcoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0JCQlyZXR1cm4gKHJjKTsKLQkJfQotCQl3cCArPSA0OwotCX0KLQotCS8qCi0JICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0Ci0JICovCi0Jd2hpbGUgKGNudCA+PSA0KSB7Ci0JCWRhdGEgPSAqKCh1bG9uZyopc3JjKTsKLQkJaWYgKChyYyA9IHdyaXRlX2xvbmcoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0JCQlyZXR1cm4gKHJjKTsKLQkJfQotCQlzcmMgKz0gNDsKLQkJd3AgICs9IDQ7Ci0JCWNudCAtPSA0OwotCX0KLQotCWlmIChjbnQgPT0gMCkgcmV0dXJuIEVSUl9PSzsKLQotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCi0JICovCi0JZGF0YSA9IDA7Ci0JZm9yIChpPTAsIGNwPXdwOyBpPDQgJiYgY250PjA7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKnNyYysrIDw8IDI0KTsKLQkJLS1jbnQ7Ci0JfQotCWZvciAoOyBpPDQ7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKWNwIDw8IDI0KTsKLQl9Ci0KLQlyZXR1cm4gd3JpdGVfbG9uZyhpbmZvLCB3cCwgZGF0YSk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9kYXZlZGVueC9xb25nL3FvbmcuYyBiL2JvYXJkL2RhdmVkZW54L3FvbmcvcW9uZy5jCmluZGV4IDY2NWFlZGYuLmM0MWYxMWQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RhdmVkZW54L3FvbmcvcW9uZy5jCisrKyBiL2JvYXJkL2RhdmVkZW54L3FvbmcvcW9uZy5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAogCW14Y19zZXR1cF93ZWltY3MoMywgJmNzMyk7CiAKLQlfX1JFRyhJT01VWENfR1BSKSB8PSAxIDw8IDEzOworCW14MzFfc2V0X2dwcihNVVhfU0RDVExfQ1NEMV9TRUwsIDEpOwogCiAJbXgzMV9ncGlvX211eChJT01VWF9NT0RFKE1VWF9DVExfTkZDX1dQLCBNVVhfQ1RMX0lOX0dQSU8pKTsKIAlteDMxX2dwaW9fbXV4KElPTVVYX01PREUoTVVYX0NUTF9ORkNfQ0UsIE1VWF9DVExfSU5fR1BJTykpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9kbTY0Njdldm0vZG02NDY3ZXZtLmMgYi9ib2FyZC9kYXZpbmNpL2RtNjQ2N2V2bS9kbTY0Njdldm0uYwppbmRleCAxYTAxYzNjLi5hYzgyZDVjIDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL2RtNjQ2N2V2bS9kbTY0Njdldm0uYworKysgYi9ib2FyZC9kYXZpbmNpL2RtNjQ2N2V2bS9kbTY0Njdldm0uYwpAQCAtMjQsNiArMjQsMjYgQEAKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKKyNkZWZpbmUgUkVWX0RNNjQ2N0VWTQkJMAorI2RlZmluZSBSRVZfRE02NDY3VEVWTQkJMQorLyoKKyAqIGdldF9ib2FyZF9yZXYoKSAtIHNldHVwIHRvIHBhc3Mga2VybmVsIGJvYXJkIHJldmlzaW9uIGluZm9ybWF0aW9uCisgKiBSZXR1cm5zOgorICogYml0WzAtM10JU3lzdGVtIGNsb2NrIGZyZXF1ZW5jeQorICogMDAwMGIJLSAyNyBNSHoKKyAqIDAwMDFiCS0gMzMgTUh6CisgKi8KK3UzMiBnZXRfYm9hcmRfcmV2KHZvaWQpCit7CisKKyNpZmRlZiBEQVZJTkNJX0RNNjQ2N1RFVk0KKwlyZXR1cm4gUkVWX0RNNjQ2N1RFVk07CisjZWxzZQorCXJldHVybiBSRVZfRE02NDY3RVZNOworI2VuZGlmCisKK30KKwogaW50IGJvYXJkX2luaXQodm9pZCkKIHsKIAlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0RBVklOQ0lfRE02NDY3X0VWTTsKZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjIyNi9NYWtlZmlsZSBiL2JvYXJkL2RlbngvbTI4ZXZrL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggODQlCmNvcHkgZnJvbSBib2FyZC9jc2IyMjYvTWFrZWZpbGUKY29weSB0byBib2FyZC9kZW54L20yOGV2ay9NYWtlZmlsZQppbmRleCA2ZmU5YmVjLi5iNmYwMDJmIDEwMDY0NAotLS0gYS9ib2FyZC9jc2IyMjYvTWFrZWZpbGUKKysrIGIvYm9hcmQvZGVueC9tMjhldmsvTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDEzIEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLm8KIAotQ09CSlMJOj0gY3NiMjI2Lm8gZmxhc2gubworaWZuZGVmCUNPTkZJR19TUExfQlVJTEQKK0NPQkpTCTo9IG0yOGV2ay5vCitlbmRpZgorCitpZmRlZglDT05GSUdfU1BMX0JVSUxECitDT0JKUwk6PSBtZW1faW5pdC5vIG1tY19ib290Lm8gcG93ZXJfaW5pdC5vIG1lbXNpemUubworZW5kaWYKIAogU1JDUwk6PSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCkBAIC0zMyw2ICszOSwxMyBAQAogJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKGNhbGwgY21kX2xpbmtfb190YXJnZXQsICQoT0JKUykpCiAKK2FsbDoJJChBTEwpCisKK2lmZGVmCUNPTkZJR19TUExfQlVJTEQKK21lbXNpemUuYzoKKwlsbiAtc2YgJChUT1BESVIpL2NvbW1vbi9tZW1zaXplLmMgJEAKK2VuZGlmCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CmRpZmYgLS1naXQgYS9ib2FyZC9kZW54L20yOGV2ay9tMjhfaW5pdC5oIGIvYm9hcmQvZGVueC9tMjhldmsvbTI4X2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQzNjMxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZGVueC9tMjhldmsvbTI4X2luaXQuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBTUEwgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZglfX00yOF9JTklUX0hfXworI2RlZmluZQlfX00yOF9JTklUX0hfXworCit2b2lkIGVhcmx5X2RlbGF5KGludCBkZWxheSk7CisKK3ZvaWQgbXgyOF9wb3dlcl9pbml0KHZvaWQpOworCisjaWZkZWYJQ09ORklHX1NQTF9NWDI4X1BTV0lUQ0hfV0FJVAordm9pZCBteDI4X3Bvd2VyX3dhaXRfcHN3aXRjaCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbXgyOF9wb3dlcl93YWl0X3Bzd2l0Y2godm9pZCkgeyB9CisjZW5kaWYKKwordm9pZCBteDI4X21lbV9pbml0KHZvaWQpOworCisjZW5kaWYJLyogX19NMjhfSU5JVF9IX18gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2RlbngvbTI4ZXZrL20yOGV2ay5jIGIvYm9hcmQvZGVueC9tMjhldmsvbTI4ZXZrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmM2RjOQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RlbngvbTI4ZXZrL20yOGV2ay5jCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogREVOWCBNMjggbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pb211eC1teDI4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxtaWlwaHkuaD4KKyNpbmNsdWRlIDxuZXRkZXYuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworLyoKKyAqIEZ1bmN0aW9ucworICovCitpbnQgYm9hcmRfZWFybHlfaW5pdF9mKHZvaWQpCit7CisJLyogSU8wIGNsb2NrIGF0IDQ4ME1IeiAqLworCW14Mjhfc2V0X2lvY2xrKE1YQ19JT0NMSzAsIDQ4MDAwMCk7CisJLyogSU8xIGNsb2NrIGF0IDQ4ME1IeiAqLworCW14Mjhfc2V0X2lvY2xrKE1YQ19JT0NMSzEsIDQ4MDAwMCk7CisKKwkvKiBTU1AwIGNsb2NrIGF0IDk2TUh6ICovCisJbXgyOF9zZXRfc3NwY2xrKE1YQ19TU1BDTEswLCA5NjAwMCwgMCk7CisJLyogU1NQMiBjbG9jayBhdCA5Nk1IeiAqLworCW14Mjhfc2V0X3NzcGNsayhNWENfU1NQQ0xLMiwgOTYwMDAsIDApOworCisjaWZkZWYJQ09ORklHX0NNRF9VU0IKKwlteHNfaW9tdXhfc2V0dXBfcGFkKE1YMjhfUEFEX1NTUDJfU1MxX19VU0IxX09WRVJDVVJSRU5UKTsKKwlteHNfaW9tdXhfc2V0dXBfcGFkKE1YMjhfUEFEX0FVQVJUM19UWF9fR1BJT18zXzEzIHwKKwkJCU1YU19QQURfMTJNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChNWDI4X1BBRF9BVUFSVDNfVFhfX0dQSU9fM18xMywgMCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCS8qIEFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gUEhZU19TRFJBTV8xICsgMHgxMDA7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZQlIV19ESUdDVFJMX1NDUkFUQ0gwCTB4ODAwMWMyODAKKyNkZWZpbmUJSFdfRElHQ1RSTF9TQ1JBVENIMQkweDgwMDFjMjkwCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJdWludDMyX3Qgc3pbMl07CisKKwlzelswXSA9IHJlYWRsKEhXX0RJR0NUUkxfU0NSQVRDSDApOworCXN6WzFdID0gcmVhZGwoSFdfRElHQ1RSTF9TQ1JBVENIMSk7CisKKwlpZiAoc3pbMF0gIT0gc3pbMV0pIHsKKwkJcHJpbnRmKCJNWDI4OlxuIgorCQkJIkVycm9yLCB0aGUgUkFNIHNpemUgaW4gSFdfRElHQ1RSTF9TQ1JBVENIMCBhbmRcbiIKKwkJCSJIV19ESUdDVFJMX1NDUkFUQ0gxIGlzIG5vdCB0aGUgc2FtZS4gUGxlYXNlXG4iCisJCQkidmVyaWZ5IHRoZXNlIHR3byByZWdpc3RlcnMgY29udGFpbiB2YWxpZCBSQU0gc2l6ZSFcbiIpOworCQloYW5nKCk7CisJfQorCisJZ2QtPnJhbV9zaXplID0gc3pbMF07CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZglDT05GSUdfQ01EX01NQworc3RhdGljIGludCBtMjhfbW1jX3dwKGludCBpZCkKK3sKKwlpZiAoaWQgIT0gMCkgeworCQlwcmludGYoIk1YUyBNTUM6IEludmFsaWQgY2FyZCBzZWxlY3RlZCAoY2FyZCBpZCA9ICVkKVxuIiwgaWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoTVgyOF9QQURfQVVBUlQyX0NUU19fR1BJT18zXzEwKTsKK30KKworaW50IGJvYXJkX21tY19pbml0KGJkX3QgKmJpcykKK3sKKwkvKiBDb25maWd1cmUgV1AgYXMgb3V0cHV0ICovCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoTVgyOF9QQURfQVVBUlQyX0NUU19fR1BJT18zXzEwKTsKKworCXJldHVybiBteHNtbWNfaW5pdGlhbGl6ZShiaXMsIDAsIG0yOF9tbWNfd3ApOworfQorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfQ01EX05FVAorCisjZGVmaW5lCU1JSV9PUE1PREVfU1RSQVBfT1ZFUlJJREUJMHgxNgorI2RlZmluZQlNSUlfUEhZX0NUUkwxCQkJMHgxZQorI2RlZmluZQlNSUlfUEhZX0NUUkwyCQkJMHgxZgorCitpbnQgZmVjbXhjX21paV9wb3N0Y2FsbChpbnQgcGh5KQoreworCW1paXBoeV93cml0ZSgiRkVDMSIsIHBoeSwgTUlJX0JNQ1IsIDB4OTAwMCk7CisJbWlpcGh5X3dyaXRlKCJGRUMxIiwgcGh5LCBNSUlfT1BNT0RFX1NUUkFQX09WRVJSSURFLCAweDAyMDIpOworCWlmIChwaHkgPT0gMykKKwkJbWlpcGh5X3dyaXRlKCJGRUMxIiwgMywgTUlJX1BIWV9DVFJMMiwgMHg4MTgwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCXN0cnVjdCBldGhfZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCXJldCA9IGNwdV9ldGhfaW5pdChiaXMpOworCisJY2xyc2V0Yml0c19sZTMyKCZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZW5ldCwKKwkJQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMX01BU0sgfCBDTEtDVFJMX0VORVRfQ0xLX09VVF9FTiwKKwkJQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMX1JNSUlfQ0xLKTsKKworCXJldCA9IGZlY214Y19pbml0aWFsaXplX211bHRpKGJpcywgMCwgMCwgTVhTX0VORVQwX0JBU0UpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJGRUMgTVhTOiBVbmFibGUgdG8gaW5pdCBGRUMwXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBmZWNteGNfaW5pdGlhbGl6ZV9tdWx0aShiaXMsIDEsIDMsIE1YU19FTkVUMV9CQVNFKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiRkVDIE1YUzogVW5hYmxlIHRvIGluaXQgRkVDMVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2ID0gZXRoX2dldF9kZXZfYnlfbmFtZSgiRkVDMCIpOworCWlmICghZGV2KSB7CisJCXByaW50ZigiRkVDIE1YUzogVW5hYmxlIHRvIGdldCBGRUMwIGRldmljZSBlbnRyeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGZlY214Y19yZWdpc3Rlcl9taWlfcG9zdGNhbGwoZGV2LCBmZWNteGNfbWlpX3Bvc3RjYWxsKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiRkVDIE1YUzogVW5hYmxlIHRvIHJlZ2lzdGVyIEZFQzAgbWlpIHBvc3RjYWxsXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXYgPSBldGhfZ2V0X2Rldl9ieV9uYW1lKCJGRUMxIik7CisJaWYgKCFkZXYpIHsKKwkJcHJpbnRmKCJGRUMgTVhTOiBVbmFibGUgdG8gZ2V0IEZFQzEgZGV2aWNlIGVudHJ5XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZmVjbXhjX3JlZ2lzdGVyX21paV9wb3N0Y2FsbChkZXYsIGZlY214Y19taWlfcG9zdGNhbGwpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJGRUMgTVhTOiBVbmFibGUgdG8gcmVnaXN0ZXIgRkVDMSBtaWkgcG9zdGNhbGxcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZglDT05GSUdfTTI4X0ZFQ19NQUNfSU5fT0NPVFAKKworI2RlZmluZQlNWFNfT0NPVFBfTUFYX1RJTUVPVVQJMTAwMDAwMAordm9pZCBpbXhfZ2V0X21hY19mcm9tX2Z1c2UoY2hhciAqbWFjKQoreworCXN0cnVjdCBteDI4X29jb3RwX3JlZ3MgKm9jb3RwX3JlZ3MgPQorCQkoc3RydWN0IG14Mjhfb2NvdHBfcmVncyAqKU1YU19PQ09UUF9CQVNFOworCXVpbnQzMl90IGRhdGE7CisKKwltZW1zZXQobWFjLCAwLCA2KTsKKworCXdyaXRlbChPQ09UUF9DVFJMX1JEX0JBTktfT1BFTiwgJm9jb3RwX3JlZ3MtPmh3X29jb3RwX2N0cmxfc2V0KTsKKworCWlmIChteDI4X3dhaXRfbWFza19jbHIoJm9jb3RwX3JlZ3MtPmh3X29jb3RwX2N0cmxfcmVnLCBPQ09UUF9DVFJMX0JVU1ksCisJCQkJTVhTX09DT1RQX01BWF9USU1FT1VUKSkgeworCQlwcmludGYoIk1YUyBGRUM6IENhbid0IGdldCBNQUMgZnJvbSBPQ09UUFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkYXRhID0gcmVhZGwoJm9jb3RwX3JlZ3MtPmh3X29jb3RwX2N1c3QwKTsKKworCW1hY1swXSA9IDB4MDA7CisJbWFjWzFdID0gMHgwNDsKKwltYWNbMl0gPSAoZGF0YSA+PiAyNCkgJiAweGZmOworCW1hY1szXSA9IChkYXRhID4+IDE2KSAmIDB4ZmY7CisJbWFjWzRdID0gKGRhdGEgPj4gOCkgJiAweGZmOworCW1hY1s1XSA9IGRhdGEgJiAweGZmOworfQorI2Vsc2UKK3ZvaWQgaW14X2dldF9tYWNfZnJvbV9mdXNlKGNoYXIgKm1hYykKK3sKKwltZW1zZXQobWFjLCAwLCA2KTsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2RlbngvbTI4ZXZrL21lbV9pbml0LmMgYi9ib2FyZC9kZW54L20yOGV2ay9tZW1faW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDFmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9kZW54L20yOGV2ay9tZW1faW5pdC5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBSQU0gaW5pdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pb211eC1teDI4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKworI2luY2x1ZGUgIm0yOF9pbml0LmgiCisKK3VpbnQzMl90IGRyYW1fdmFsc1tdID0geworCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDEwMTAxLCAweDAxMDEwMTAxLCAweDAwMGYwZjAxLCAweDBmMDIwMjBhLAorCTB4MDAwMDAwMDAsIDB4MDAwMTAxMDEsIDB4MDAwMDAxMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMiwgMHgwMTAxMDAwMCwgMHgwNTA2MDMwMiwgMHgwNjAwNTAwMywgMHgwYTAwMDBjOCwKKwkweDAyMDA5YzQwLCAweDAwMDAwMzBjLCAweDAwMzZhNjA5LCAweDAzMWEwNjEyLCAweDAyMDMwMjAyLAorCTB4MDBjODAwMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTIxMDAsIDB4ZmZmZjAzMDMsCisJMHgwMDAxMjEwMCwgMHhmZmZmMDMwMywgMHgwMDAxMjEwMCwgMHhmZmZmMDMwMywgMHgwMDAxMjEwMCwKKwkweGZmZmYwMzAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDYxMiwgMHgwMTAwMEYwMiwgMHgwNjEyMDYxMiwgMHgwMDAwMDIwMCwKKwkweDAwMDIwMDA3LCAweGY1MDE0YjI3LCAweGY1MDE0YjI3LCAweGY1MDE0YjI3LCAweGY1MDE0YjI3LAorCTB4MDcwMDAzMDAsIDB4MDcwMDAzMDAsIDB4MDcwMDAzMDAsIDB4MDcwMDAzMDAsIDB4MDAwMDAwMDYsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMTAyMDQwOCwgMHgwODA0MDIwMSwKKwkweDAwMGYxMTMzLCAweDAwMDAwMDAwLCAweDAwMDAxZjA0LCAweDAwMDAxZjA0LCAweDAwMDAxZjA0LAorCTB4MDAwMDFmMDQsIDB4MDAwMDFmMDQsIDB4MDAwMDFmMDQsIDB4MDAwMDFmMDQsIDB4MDAwMDFmMDQsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDAwLCAweDAwMDIwMzA0LCAweDAwMDAwMDA0LAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMTAxMDAwMCwgMHgwMTAwMDAwMCwgMHgwMzAzMDAwMCwgMHgwMDAxMDMwMywKKwkweDAxMDIwMjAyLCAweDAwMDAwMDAwLCAweDAyMDQwMzAzLCAweDIxMDAyMTAzLCAweDAwMDYxMjAwLAorCTB4MDYxMjA2MTIsIDB4MDQzMjA0MzIsIDB4MDQzMjA0MzIsIDB4MDAwNDAwMDQsIDB4MDAwNDAwMDQsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMQorfTsKKwordm9pZCBpbml0X20yOF8yMDBtaHpfZGRyMih2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJhbV92YWxzKTsgaSsrKQorCQl3cml0ZWwoZHJhbV92YWxzW2ldLCBNWFNfRFJBTV9CQVNFICsgKDQgKiBpKSk7Cit9CisKK3ZvaWQgbXgyOF9tZW1faW5pdF9jbG9jayh2b2lkKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisKKwkvKiBHYXRlIEVNSSBjbG9jayAqLworCXdyaXRlbChDTEtDVFJMX0ZSQUMwX0NMS0dBVEVFTUksCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZnJhYzBfc2V0KTsKKworCS8qIEVNSSA9IDIwNU1IeiAqLworCXdyaXRlbChDTEtDVFJMX0ZSQUMwX0VNSUZSQUNfTUFTSywKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMF9zZXQpOworCXdyaXRlbCgoMHgyYSA8PCBDTEtDVFJMX0ZSQUMwX0VNSUZSQUNfT0ZGU0VUKSAmCisJCUNMS0NUUkxfRlJBQzBfRU1JRlJBQ19NQVNLLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2ZyYWMwX2Nscik7CisKKwkvKiBVbmdhdGUgRU1JIGNsb2NrICovCisJd3JpdGVsKENMS0NUUkxfRlJBQzBfQ0xLR0FURUVNSSwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMF9jbHIpOworCisJZWFybHlfZGVsYXkoMTEwMDApOworCisJd3JpdGVsKCgyIDw8IENMS0NUUkxfRU1JX0RJVl9FTUlfT0ZGU0VUKSB8CisJCSgxIDw8IENMS0NUUkxfRU1JX0RJVl9YVEFMX09GRlNFVCksCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfZW1pKTsKKworCS8qIFVuYnlwYXNzIEVNSSAqLworCXdyaXRlbChDTEtDVFJMX0NMS1NFUV9CWVBBU1NfRU1JLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2Nsa3NlcV9jbHIpOworCisJZWFybHlfZGVsYXkoMTAwMDApOworfQorCit2b2lkIG14MjhfbWVtX3NldHVwX2NwdV9hbmRfaGJ1cyh2b2lkKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisKKwkvKiBDUFUgPSA0NTRNSHogYW5kIHVuZ2F0ZSBDUFUgY2xvY2sgKi8KKwljbHJzZXRiaXRzX2xlMzIoJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9mcmFjMCwKKwkJQ0xLQ1RSTF9GUkFDMF9DUFVGUkFDX01BU0sgfCBDTEtDVFJMX0ZSQUMwX0NMS0dBVEVDUFUsCisJCTE5IDw8IENMS0NUUkxfRlJBQzBfQ1BVRlJBQ19PRkZTRVQpOworCisJLyogU2V0IENQVSBieXBhc3MgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0NQVSwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXFfc2V0KTsKKworCS8qIEhCVVMgPSAxNTFNSHogKi8KKwl3cml0ZWwoQ0xLQ1RSTF9IQlVTX0RJVl9NQVNLLCAmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2hidXNfc2V0KTsKKwl3cml0ZWwoKCh+MykgPDwgQ0xLQ1RSTF9IQlVTX0RJVl9PRkZTRVQpICYgQ0xLQ1RSTF9IQlVTX0RJVl9NQVNLLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2hidXNfY2xyKTsKKworCWVhcmx5X2RlbGF5KDEwMDAwKTsKKworCS8qIENQVSBjbG9jayBkaXZpZGVyID0gMSAqLworCWNscnNldGJpdHNfbGUzMigmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2NwdSwKKwkJCUNMS0NUUkxfQ1BVX0RJVl9DUFVfTUFTSywgMSk7CisKKwkvKiBEaXNhYmxlIENQVSBieXBhc3MgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0NQVSwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9jbGtzZXFfY2xyKTsKK30KKwordm9pZCBteDI4X21lbV9zZXR1cF92ZGRhKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwl3cml0ZWwoKDB4YyA8PCBQT1dFUl9WRERBQ1RSTF9UUkdfT0ZGU0VUKSB8CisJCSgweDcgPDwgUE9XRVJfVkREQUNUUkxfQk9fT0ZGU0VUX09GRlNFVCkgfAorCQlQT1dFUl9WRERBQ1RSTF9MSU5SRUdfT0ZGU0VUXzFTVEVQU19CRUxPVywKKwkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGFjdHJsKTsKK30KKwordm9pZCBteDI4X21lbV9zZXR1cF92ZGRkKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwl3cml0ZWwoKDB4MWMgPDwgUE9XRVJfVkRERENUUkxfVFJHX09GRlNFVCkgfAorCQkoMHg3IDw8IFBPV0VSX1ZERERDVFJMX0JPX09GRlNFVF9PRkZTRVQpIHwKKwkJUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQkVMT1csCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCk7Cit9CisKKyNkZWZpbmUJSFdfRElHQ1RSTF9TQ1JBVENIMAkweDgwMDFjMjgwCisjZGVmaW5lCUhXX0RJR0NUUkxfU0NSQVRDSDEJMHg4MDAxYzI5MAordm9pZCBkYXRhX2Fib3J0X21lbWRldGVjdF9oYW5kbGVyKHZvaWQpIF9fYXR0cmlidXRlX18oKG5ha2VkKSk7Cit2b2lkIGRhdGFfYWJvcnRfbWVtZGV0ZWN0X2hhbmRsZXIodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUoInN1YnMgcGMsIHIxNCwgIzQiKTsKK30KKwordm9pZCBteDI4X21lbV9nZXRfc2l6ZSh2b2lkKQoreworCXVpbnQzMl90IHN6LCBkYTsKKwl1aW50MzJfdCAqdnQgPSAodWludDMyX3QgKikweDIwOworCisJLyogUmVwbGFjZSB0aGUgREFCVCBoYW5kbGVyLiAqLworCWRhID0gdnRbNF07CisJdnRbNF0gPSAodWludDMyX3QpJmRhdGFfYWJvcnRfbWVtZGV0ZWN0X2hhbmRsZXI7CisKKwlzeiA9IGdldF9yYW1fc2l6ZSgobG9uZyAqKVBIWVNfU0RSQU1fMSwgUEhZU19TRFJBTV8xX1NJWkUpOworCXdyaXRlbChzeiwgSFdfRElHQ1RSTF9TQ1JBVENIMCk7CisJd3JpdGVsKHN6LCBIV19ESUdDVFJMX1NDUkFUQ0gxKTsKKworCS8qIFJlc3RvcmUgdGhlIG9sZCBEQUJUIGhhbmRsZXIuICovCisJdnRbNF0gPSBkYTsKK30KKwordm9pZCBteDI4X21lbV9pbml0KHZvaWQpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKwlzdHJ1Y3QgbXgyOF9waW5jdHJsX3JlZ3MgKnBpbmN0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9waW5jdHJsX3JlZ3MgKilNWFNfUElOQ1RSTF9CQVNFOworCisJLyogU2V0IEREUjIgbW9kZSAqLworCXdyaXRlbChQSU5DVFJMX0VNSV9EU19DVFJMX0REUl9NT0RFX0REUjIsCisJCSZwaW5jdHJsX3JlZ3MtPmh3X3BpbmN0cmxfZW1pX2RzX2N0cmxfc2V0KTsKKworCS8qIFBvd2VyIHVwIFBMTDAgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9QTEwwQ1RSTDBfUE9XRVIsCisJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfcGxsMGN0cmwwX3NldCk7CisKKwllYXJseV9kZWxheSgxMTAwMCk7CisKKwlteDI4X21lbV9pbml0X2Nsb2NrKCk7CisKKwlteDI4X21lbV9zZXR1cF92ZGRhKCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgRFJBTSByZWdpc3RlcnMKKwkgKi8KKworCS8qIENsZWFyIFNUQVJUIGJpdCBmcm9tIERSQU1fQ1RMMTYgKi8KKwljbHJiaXRzX2xlMzIoTVhTX0RSQU1fQkFTRSArIDB4NDAsIDEpOworCisJaW5pdF9tMjhfMjAwbWh6X2RkcjIoKTsKKworCS8qIENsZWFyIFNSRUZSRVNIIGJpdCBmcm9tIERSQU1fQ1RMMTcgKi8KKwljbHJiaXRzX2xlMzIoTVhTX0RSQU1fQkFTRSArIDB4NDQsIDEpOworCisJLyogU2V0IFNUQVJUIGJpdCBpbiBEUkFNX0NUTDE2ICovCisJc2V0Yml0c19sZTMyKE1YU19EUkFNX0JBU0UgKyAweDQwLCAxKTsKKworCS8qIFdhaXQgZm9yIGJpdCAyMCAoRFJBTSBpbml0IGNvbXBsZXRlKSBpbiBEUkFNX0NUTDU4ICovCisJd2hpbGUgKCEocmVhZGwoTVhTX0RSQU1fQkFTRSArIDB4ZTgpICYgKDEgPDwgMjApKSkKKwkJOworCisJbXgyOF9tZW1fc2V0dXBfdmRkZCgpOworCisJZWFybHlfZGVsYXkoMTAwMDApOworCisJbXgyOF9tZW1fc2V0dXBfY3B1X2FuZF9oYnVzKCk7CisKKwlteDI4X21lbV9nZXRfc2l6ZSgpOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZGVueC9tMjhldmsvbW1jX2Jvb3QuYyBiL2JvYXJkL2RlbngvbTI4ZXZrL21tY19ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkM2FiNQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RlbngvbTI4ZXZrL21tY19ib290LmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IEJvb3Qgc2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW9tdXgtbXgyOC5oPgorCisjaW5jbHVkZSAibTI4X2luaXQuaCIKKworLyoKKyAqIFRoaXMgZGVsYXkgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IGluIGVhcmx5IHN0YWdlIG9mIGJvb3QsIHdoZXJlCisgKiBjbG9jayBhcmUgbm90IHNldCB1cCB5ZXQuIFRoZSB0aW1lciB1c2VkIGhlcmUgaXMgcmVzZXQgb24gZXZlcnkgYm9vdCBhbmQKKyAqIHRha2VzIGEgZmV3IHNlY29uZHMgdG8gcm9sbC4gVGhlIGJvb3QgZG9lc24ndCB0YWtlIHRoYXQgbG9uZywgc28gdG8ga2VlcCB0aGUKKyAqIGNvZGUgc2ltcGxlLCBpdCBkb2Vzbid0IHRha2Ugcm9sbGluZyBpbnRvIGNvbnNpZGVyYXRpb24uCisgKi8KKyNkZWZpbmUJSFdfRElHQ1RSTF9NSUNST1NFQ09ORFMJMHg4MDAxYzBjMAordm9pZCBlYXJseV9kZWxheShpbnQgZGVsYXkpCit7CisJdWludDMyX3Qgc3QgPSByZWFkbChIV19ESUdDVFJMX01JQ1JPU0VDT05EUyk7CisJc3QgKz0gZGVsYXk7CisJd2hpbGUgKHN0ID4gcmVhZGwoSFdfRElHQ1RSTF9NSUNST1NFQ09ORFMpKQorCQk7Cit9CisKKyNkZWZpbmUJTVVYX0NPTkZJR19MRUQJKE1YU19QQURfM1YzIHwgTVhTX1BBRF80TUEgfCBNWFNfUEFEX05PUFVMTCkKKyNkZWZpbmUJTVVYX0NPTkZJR19MQ0QJKE1YU19QQURfM1YzIHwgTVhTX1BBRF80TUEpCisjZGVmaW5lCU1VWF9DT05GSUdfVFNDCShNWFNfUEFEXzNWMyB8IE1YU19QQURfOE1BIHwgTVhTX1BBRF9QVUxMVVApCisjZGVmaW5lCU1VWF9DT05GSUdfU1NQMAkoTVhTX1BBRF8zVjMgfCBNWFNfUEFEXzEyTUEgfCBNWFNfUEFEX1BVTExVUCkKKyNkZWZpbmUJTVVYX0NPTkZJR19TU1AyCShNWFNfUEFEXzNWMyB8IE1YU19QQURfNE1BIHwgTVhTX1BBRF9QVUxMVVApCisjZGVmaW5lCU1VWF9DT05GSUdfR1BNSQkoTVhTX1BBRF8xVjggfCBNWFNfUEFEXzRNQSB8IE1YU19QQURfTk9QVUxMKQorI2RlZmluZQlNVVhfQ09ORklHX0VORVQJKE1YU19QQURfM1YzIHwgTVhTX1BBRF80TUEgfCBNWFNfUEFEX1BVTExVUCkKKyNkZWZpbmUJTVVYX0NPTkZJR19FTUkJKE1YU19QQURfM1YzIHwgTVhTX1BBRF8xMk1BIHwgTVhTX1BBRF9OT1BVTEwpCisKK2NvbnN0IGlvbXV4X2NmZ190IGlvbXV4X3NldHVwW10gPSB7CisJLyogTEVEICovCisJTVgyOF9QQURfRU5FVDBfUlhEM19fR1BJT180XzEwIHwgTVVYX0NPTkZJR19MRUQsCisKKwkvKiBmcmFtZWJ1ZmZlciAqLworCU1YMjhfUEFEX0xDRF9EMDBfX0xDRF9EMCB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDFfX0xDRF9EMSB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDJfX0xDRF9EMiB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDNfX0xDRF9EMyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDRfX0xDRF9ENCB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDVfX0xDRF9ENSB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDZfX0xDRF9ENiB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDdfX0xDRF9ENyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDhfX0xDRF9EOCB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMDlfX0xDRF9EOSB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMTBfX0xDRF9EMTAgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDExX19MQ0RfRDExIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QxMl9fTENEX0QxMiB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMTNfX0xDRF9EMTMgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDE0X19MQ0RfRDE0IHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QxNV9fTENEX0QxNSB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMTZfX0xDRF9EMTYgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDE3X19MQ0RfRDE3IHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QxOF9fTENEX0QxOCB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMTlfX0xDRF9EMTkgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDIwX19MQ0RfRDIwIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX0QyMV9fTENEX0QyMSB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9EMjJfX0xDRF9EMjIgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRDIzX19MQ0RfRDIzIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX1JEX0VfX0xDRF9WU1lOQyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9XUl9SV05fX0xDRF9IU1lOQyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9SU19fTENEX0RPVENMSyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9DU19fTENEX0NTIHwgTVVYX0NPTkZJR19MQ0QsCisJTVgyOF9QQURfTENEX1ZTWU5DX19MQ0RfVlNZTkMgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfSFNZTkNfX0xDRF9IU1lOQyB8IE1VWF9DT05GSUdfTENELAorCU1YMjhfUEFEX0xDRF9ET1RDTEtfX0xDRF9ET1RDTEsgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfRU5BQkxFX19HUElPXzFfMzEgfCBNVVhfQ09ORklHX0xDRCwKKwlNWDI4X1BBRF9MQ0RfUkVTRVRfX0dQSU9fM18zMCB8IE1VWF9DT05GSUdfTENELAorCisJLyogVUFSVDEgKi8KKwlNWDI4X1BBRF9QV00wX19EVUFSVF9SWCwKKwlNWDI4X1BBRF9QV00xX19EVUFSVF9UWCwKKwlNWDI4X1BBRF9BVUFSVDBfVFhfX0RVQVJUX1JUUywKKwlNWDI4X1BBRF9BVUFSVDBfUlhfX0RVQVJUX0NUUywKKworCS8qIFVBUlQyICovCisJTVgyOF9QQURfQVVBUlQxX1JYX19BVUFSVDFfUlgsCisJTVgyOF9QQURfQVVBUlQxX1RYX19BVUFSVDFfVFgsCisJTVgyOF9QQURfQVVBUlQxX1JUU19fQVVBUlQxX1JUUywKKwlNWDI4X1BBRF9BVUFSVDFfQ1RTX19BVUFSVDFfQ1RTLAorCisJLyogQ0FOICovCisJTVgyOF9QQURfR1BNSV9SRFkyX19DQU4wX1RYLAorCU1YMjhfUEFEX0dQTUlfUkRZM19fQ0FOMF9SWCwKKworCS8qIEkyQyAqLworCU1YMjhfUEFEX0kyQzBfU0NMX19JMkMwX1NDTCwKKwlNWDI4X1BBRF9JMkMwX1NEQV9fSTJDMF9TREEsCisKKwkvKiBUU0MyMDA3ICovCisJTVgyOF9QQURfU0FJRjBfTUNMS19fR1BJT18zXzIwIHwgTVVYX0NPTkZJR19UU0MsCisKKwkvKiBNTUMwICovCisJTVgyOF9QQURfU1NQMF9EQVRBMF9fU1NQMF9EMCB8IE1VWF9DT05GSUdfU1NQMCwKKwlNWDI4X1BBRF9TU1AwX0RBVEExX19TU1AwX0QxIHwgTVVYX0NPTkZJR19TU1AwLAorCU1YMjhfUEFEX1NTUDBfREFUQTJfX1NTUDBfRDIgfCBNVVhfQ09ORklHX1NTUDAsCisJTVgyOF9QQURfU1NQMF9EQVRBM19fU1NQMF9EMyB8IE1VWF9DT05GSUdfU1NQMCwKKwlNWDI4X1BBRF9TU1AwX0RBVEE0X19TU1AwX0Q0IHwgTVVYX0NPTkZJR19TU1AwLAorCU1YMjhfUEFEX1NTUDBfREFUQTVfX1NTUDBfRDUgfCBNVVhfQ09ORklHX1NTUDAsCisJTVgyOF9QQURfU1NQMF9EQVRBNl9fU1NQMF9ENiB8IE1VWF9DT05GSUdfU1NQMCwKKwlNWDI4X1BBRF9TU1AwX0RBVEE3X19TU1AwX0Q3IHwgTVVYX0NPTkZJR19TU1AwLAorCU1YMjhfUEFEX1NTUDBfQ01EX19TU1AwX0NNRCB8IE1VWF9DT05GSUdfU1NQMCwKKwlNWDI4X1BBRF9TU1AwX0RFVEVDVF9fU1NQMF9DQVJEX0RFVEVDVCB8CisJCShNWFNfUEFEXzNWMyB8IE1YU19QQURfMTJNQSB8IE1YU19QQURfTk9QVUxMKSwKKwlNWDI4X1BBRF9TU1AwX1NDS19fU1NQMF9TQ0sgfAorCQkoTVhTX1BBRF8zVjMgfCBNWFNfUEFEXzEyTUEgfCBNWFNfUEFEX05PUFVMTCksCisJTVgyOF9QQURfUFdNM19fR1BJT18zXzI4IHwgTVVYX0NPTkZJR19TU1AwLAkvKiBQb3dlciAuLiBGSVhNRSAqLworCU1YMjhfUEFEX0FVQVJUMl9DVFNfX0dQSU9fM18xMCwJLyogV1AgLi4uIEZJWE1FICovCisKKwkvKiBHUE1JIE5BTkQgKi8KKwlNWDI4X1BBRF9HUE1JX0QwMF9fR1BNSV9EMCB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0QwMV9fR1BNSV9EMSB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0QwMl9fR1BNSV9EMiB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0QwM19fR1BNSV9EMyB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0QwNF9fR1BNSV9ENCB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0QwNV9fR1BNSV9ENSB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0QwNl9fR1BNSV9ENiB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0QwN19fR1BNSV9ENyB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0NFME5fX0dQTUlfQ0UwTiB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX1JEWTBfX0dQTUlfUkVBRFkwIHwgTVVYX0NPTkZJR19HUE1JLAorCU1YMjhfUEFEX0dQTUlfUkROX19HUE1JX1JETiB8CisJCShNWFNfUEFEXzFWOCB8IE1YU19QQURfOE1BIHwgTVhTX1BBRF9QVUxMVVApLAorCU1YMjhfUEFEX0dQTUlfV1JOX19HUE1JX1dSTiB8IE1VWF9DT05GSUdfR1BNSSwKKwlNWDI4X1BBRF9HUE1JX0FMRV9fR1BNSV9BTEUgfCBNVVhfQ09ORklHX0dQTUksCisJTVgyOF9QQURfR1BNSV9DTEVfX0dQTUlfQ0xFIHwgTVVYX0NPTkZJR19HUE1JLAorCU1YMjhfUEFEX0dQTUlfUkVTRVROX19HUE1JX1JFU0VUTiB8IE1VWF9DT05GSUdfR1BNSSwKKworCS8qIEZFQyBFdGhlcm5ldCAqLworCU1YMjhfUEFEX0VORVQwX01EQ19fRU5FVDBfTURDIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX01ESU9fX0VORVQwX01ESU8gfCBNVVhfQ09ORklHX0VORVQsCisJTVgyOF9QQURfRU5FVDBfUlhfRU5fX0VORVQwX1JYX0VOIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX1RYX0VOX19FTkVUMF9UWF9FTiB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUMF9SWEQwX19FTkVUMF9SWEQwIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX1JYRDFfX0VORVQwX1JYRDEgfCBNVVhfQ09ORklHX0VORVQsCisJTVgyOF9QQURfRU5FVDBfVFhEMF9fRU5FVDBfVFhEMCB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUMF9UWEQxX19FTkVUMF9UWEQxIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVRfQ0xLX19DTEtDVFJMX0VORVQgfCBNVVhfQ09ORklHX0VORVQsCisKKwlNWDI4X1BBRF9FTkVUMF9DT0xfX0VORVQxX1RYX0VOIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX0NSU19fRU5FVDFfUlhfRU4gfCBNVVhfQ09ORklHX0VORVQsCisJTVgyOF9QQURfRU5FVDBfUlhEMl9fRU5FVDFfUlhEMCB8IE1VWF9DT05GSUdfRU5FVCwKKwlNWDI4X1BBRF9FTkVUMF9SWEQzX19FTkVUMV9SWEQxIHwgTVVYX0NPTkZJR19FTkVULAorCU1YMjhfUEFEX0VORVQwX1RYRDJfX0VORVQxX1RYRDAgfCBNVVhfQ09ORklHX0VORVQsCisJTVgyOF9QQURfRU5FVDBfVFhEM19fRU5FVDFfVFhEMSB8IE1VWF9DT05GSUdfRU5FVCwKKworCS8qIEkyQyAqLworCU1YMjhfUEFEX0kyQzBfU0NMX19JMkMwX1NDTCwKKwlNWDI4X1BBRF9JMkMwX1NEQV9fSTJDMF9TREEsCisKKwkvKiBFTUkgKi8KKwlNWDI4X1BBRF9FTUlfRDAwX19FTUlfREFUQTAgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDAxX19FTUlfREFUQTEgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDAyX19FTUlfREFUQTIgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDAzX19FTUlfREFUQTMgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDA0X19FTUlfREFUQTQgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDA1X19FTUlfREFUQTUgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDA2X19FTUlfREFUQTYgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDA3X19FTUlfREFUQTcgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDA4X19FTUlfREFUQTggfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDA5X19FTUlfREFUQTkgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDEwX19FTUlfREFUQTEwIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QxMV9fRU1JX0RBVEExMSB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9EMTJfX0VNSV9EQVRBMTIgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRDEzX19FTUlfREFUQTEzIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0QxNF9fRU1JX0RBVEExNCB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9EMTVfX0VNSV9EQVRBMTUgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfT0RUMF9fRU1JX09EVDAgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRFFNMF9fRU1JX0RRTTAgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfT0RUMV9fRU1JX09EVDEgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRFFNMV9fRU1JX0RRTTEgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRERSX09QRU5fRkJfX0VNSV9ERFJfT1BFTl9GRUVEQkFDSyB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9DTEtfX0VNSV9DTEsgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRFFTMF9fRU1JX0RRUzAgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRFFTMV9fRU1JX0RRUzEgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfRERSX09QRU5fX0VNSV9ERFJfT1BFTiB8IE1VWF9DT05GSUdfRU1JLAorCisJTVgyOF9QQURfRU1JX0EwMF9fRU1JX0FERFIwIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwMV9fRU1JX0FERFIxIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwMl9fRU1JX0FERFIyIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwM19fRU1JX0FERFIzIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwNF9fRU1JX0FERFI0IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwNV9fRU1JX0FERFI1IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwNl9fRU1JX0FERFI2IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwN19fRU1JX0FERFI3IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwOF9fRU1JX0FERFI4IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0EwOV9fRU1JX0FERFI5IHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0ExMF9fRU1JX0FERFIxMCB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMTFfX0VNSV9BRERSMTEgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfQTEyX19FTUlfQUREUjEyIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0ExM19fRU1JX0FERFIxMyB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9BMTRfX0VNSV9BRERSMTQgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfQkEwX19FTUlfQkEwIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0JBMV9fRU1JX0JBMSB8IE1VWF9DT05GSUdfRU1JLAorCU1YMjhfUEFEX0VNSV9CQTJfX0VNSV9CQTIgfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfQ0FTTl9fRU1JX0NBU04gfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfUkFTTl9fRU1JX1JBU04gfCBNVVhfQ09ORklHX0VNSSwKKwlNWDI4X1BBRF9FTUlfV0VOX19FTUlfV0VOIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0NFME5fX0VNSV9DRTBOIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0NFMU5fX0VNSV9DRTFOIHwgTVVYX0NPTkZJR19FTUksCisJTVgyOF9QQURfRU1JX0NLRV9fRU1JX0NLRSB8IE1VWF9DT05GSUdfRU1JLAorCisJLyogU1BJMiAoZm9yIGZsYXNoKSAqLworCU1YMjhfUEFEX1NTUDJfU0NLX19TU1AyX1NDSyB8IE1VWF9DT05GSUdfU1NQMiwKKwlNWDI4X1BBRF9TU1AyX01PU0lfX1NTUDJfQ01EIHwgTVVYX0NPTkZJR19TU1AyLAorCU1YMjhfUEFEX1NTUDJfTUlTT19fU1NQMl9EMCB8IE1VWF9DT05GSUdfU1NQMiwKKwlNWDI4X1BBRF9TU1AyX1NTMF9fU1NQMl9EMyB8CisJCShNWFNfUEFEXzNWMyB8IE1YU19QQURfOE1BIHwgTVhTX1BBRF9QVUxMVVApLAorfTsKKwordm9pZCBib2FyZF9pbml0X2xsKHZvaWQpCit7CisJbXhzX2lvbXV4X3NldHVwX211bHRpcGxlX3BhZHMoaW9tdXhfc2V0dXAsIEFSUkFZX1NJWkUoaW9tdXhfc2V0dXApKTsKKwlteDI4X3Bvd2VyX2luaXQoKTsKKwlteDI4X21lbV9pbml0KCk7CisJbXgyOF9wb3dlcl93YWl0X3Bzd2l0Y2goKTsKK30KKworLyogU3VwcG9ydCBhcGFyYXR1cyAqLworaW5saW5lIHZvaWQgYm9hcmRfaW5pdF9mKHVuc2lnbmVkIGxvbmcgYm9vdGZsYWcpCit7CisJZm9yICg7OykKKwkJOworfQorCitpbmxpbmUgdm9pZCBib2FyZF9pbml0X3IoZ2RfdCAqaWQsIHVsb25nIGRlc3RfYWRkcikKK3sKKwlmb3IgKDs7KQorCQk7Cit9CisKK2lubGluZSBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXJldHVybiAwOworfQorCitpbmxpbmUgdm9pZCBfX2NvbG91cmVkX0xFRF9pbml0KHZvaWQpIHt9CitpbmxpbmUgdm9pZCBfX3JlZF9MRURfb24odm9pZCkge30KK3ZvaWQgY29sb3VyZWRfTEVEX2luaXQodm9pZCkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19jb2xvdXJlZF9MRURfaW5pdCIpKSk7Cit2b2lkIHJlZF9MRURfb24odm9pZCkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19yZWRfTEVEX29uIikpKTsKK3ZvaWQgaGFuZyh2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKK3ZvaWQgaGFuZyh2b2lkKQoreworCWZvciAoOzspCisJCTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2RlbngvbTI4ZXZrL3Bvd2VyX2luaXQuYyBiL2JvYXJkL2RlbngvbTI4ZXZrL3Bvd2VyX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzMyMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZGVueC9tMjhldmsvcG93ZXJfaW5pdC5jCkBAIC0wLDAgKzEsOTEzIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBCb290IFBNSUMgaW5pdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorCisjaW5jbHVkZSAibTI4X2luaXQuaCIKKwordm9pZCBteDI4X3Bvd2VyX2Nsb2NrMnh0YWwodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKmNsa2N0cmxfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9jbGtjdHJsX3JlZ3MgKilNWFNfQ0xLQ1RSTF9CQVNFOworCisJLyogU2V0IFhUQUwgYXMgQ1BVIHJlZmVyZW5jZSBjbG9jayAqLworCXdyaXRlbChDTEtDVFJMX0NMS1NFUV9CWVBBU1NfQ1BVLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2Nsa3NlcV9zZXQpOworfQorCit2b2lkIG14MjhfcG93ZXJfY2xvY2sycGxsKHZvaWQpCit7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKworCXdyaXRlbChDTEtDVFJMX1BMTDBDVFJMMF9QT1dFUiwKKwkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9wbGwwY3RybDBfc2V0KTsKKwllYXJseV9kZWxheSgxMDApOworCXdyaXRlbChDTEtDVFJMX0NMS1NFUV9CWVBBU1NfQ1BVLAorCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX2Nsa3NlcV9jbHIpOworfQorCit2b2lkIG14MjhfcG93ZXJfY2xlYXJfYXV0b19yZXN0YXJ0KHZvaWQpCit7CisJc3RydWN0IG14MjhfcnRjX3JlZ3MgKnJ0Y19yZWdzID0KKwkJKHN0cnVjdCBteDI4X3J0Y19yZWdzICopTVhTX1JUQ19CQVNFOworCisJd3JpdGVsKFJUQ19DVFJMX1NGVFJTVCwgJnJ0Y19yZWdzLT5od19ydGNfY3RybF9jbHIpOworCXdoaWxlIChyZWFkbCgmcnRjX3JlZ3MtPmh3X3J0Y19jdHJsKSAmIFJUQ19DVFJMX1NGVFJTVCkKKwkJOworCisJd3JpdGVsKFJUQ19DVFJMX0NMS0dBVEUsICZydGNfcmVncy0+aHdfcnRjX2N0cmxfY2xyKTsKKwl3aGlsZSAocmVhZGwoJnJ0Y19yZWdzLT5od19ydGNfY3RybCkgJiBSVENfQ1RSTF9DTEtHQVRFKQorCQk7CisKKwkvKgorCSAqIER1ZSB0byB0aGUgaGFyZHdhcmUgZGVzaWduIGJ1ZyBvZiBteDI4IEVWSy1BCisJICogd2UgbmVlZCB0byBzZXQgdGhlIEFVVE9fUkVTVEFSVCBiaXQuCisJICovCisJaWYgKHJlYWRsKCZydGNfcmVncy0+aHdfcnRjX3BlcnNpc3RlbnQwKSAmIFJUQ19QRVJTSVNURU5UMF9BVVRPX1JFU1RBUlQpCisJCXJldHVybjsKKworCXdoaWxlIChyZWFkbCgmcnRjX3JlZ3MtPmh3X3J0Y19zdGF0KSAmIFJUQ19TVEFUX05FV19SRUdTX01BU0spCisJCTsKKworCXNldGJpdHNfbGUzMigmcnRjX3JlZ3MtPmh3X3J0Y19wZXJzaXN0ZW50MCwKKwkJCVJUQ19QRVJTSVNURU5UMF9BVVRPX1JFU1RBUlQpOworCXdyaXRlbChSVENfQ1RSTF9GT1JDRV9VUERBVEUsICZydGNfcmVncy0+aHdfcnRjX2N0cmxfc2V0KTsKKwl3cml0ZWwoUlRDX0NUUkxfRk9SQ0VfVVBEQVRFLCAmcnRjX3JlZ3MtPmh3X3J0Y19jdHJsX2Nscik7CisJd2hpbGUgKHJlYWRsKCZydGNfcmVncy0+aHdfcnRjX3N0YXQpICYgUlRDX1NUQVRfTkVXX1JFR1NfTUFTSykKKwkJOworCXdoaWxlIChyZWFkbCgmcnRjX3JlZ3MtPmh3X3J0Y19zdGF0KSAmIFJUQ19TVEFUX1NUQUxFX1JFR1NfTUFTSykKKwkJOworfQorCit2b2lkIG14MjhfcG93ZXJfc2V0X2xpbnJlZyh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJLyogU2V0IGxpbmVhciByZWd1bGF0b3IgMjVtViBiZWxvdyBzd2l0Y2hpbmcgY29udmVydGVyICovCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCwKKwkJCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfTUFTSywKKwkJCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfMVNURVBTX0JFTE9XKTsKKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkYWN0cmwsCisJCQlQT1dFUl9WRERBQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0ssCisJCQlQT1dFUl9WRERBQ1RSTF9MSU5SRUdfT0ZGU0VUXzFTVEVQU19CRUxPVyk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCwKKwkJCVBPV0VSX1ZERElPQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0ssCisJCQlQT1dFUl9WRERJT0NUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQkVMT1cpOworfQorCit2b2lkIG14MjhfcG93ZXJfc2V0dXBfNXZfZGV0ZWN0KHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwkvKiBTdGFydCA1ViBkZXRlY3Rpb24gKi8KKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF9NQVNLLAorCQkJUE9XRVJfNVZDVFJMX1ZCVVNWQUxJRF9UUlNIXzRWNCB8CisJCQlQT1dFUl81VkNUUkxfUFdSVVBfVkJVU19DTVBTKTsKK30KKwordm9pZCBteDI4X3NyY19wb3dlcl9pbml0KHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwkvKiBJbXByb3ZlIGVmZmljaWVueSBhbmQgcmVkdWNlIHRyYW5zaWVudCByaXBwbGUgKi8KKwl3cml0ZWwoUE9XRVJfTE9PUENUUkxfVE9HR0xFX0RJRiB8IFBPV0VSX0xPT1BDVFJMX0VOX0NNX0hZU1QgfAorCQlQT1dFUl9MT09QQ1RSTF9FTl9ERl9IWVNULCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfbG9vcGN0cmxfc2V0KTsKKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNsaW1pdHMsCisJCQlQT1dFUl9EQ0xJTUlUU19QT1NMSU1JVF9CVUNLX01BU0ssCisJCQkweDMwIDw8IFBPV0VSX0RDTElNSVRTX1BPU0xJTUlUX0JVQ0tfT0ZGU0VUKTsKKworCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfYmF0dG1vbml0b3IsCisJCQlQT1dFUl9CQVRUTU9OSVRPUl9FTl9CQVRBREopOworCisJLyogSW5jcmVhc2UgdGhlIFJDU0NBTEUgbGV2ZWwgZm9yIHF1aWNrIERDREMgcmVzcG9uc2UgdG8gZHluYW1pYyBsb2FkICovCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9sb29wY3RybCwKKwkJCVBPV0VSX0xPT1BDVFJMX0VOX1JDU0NBTEVfTUFTSywKKwkJCVBPV0VSX0xPT1BDVFJMX1JDU0NBTEVfVEhSRVNIIHwKKwkJCVBPV0VSX0xPT1BDVFJMX0VOX1JDU0NBTEVfOFgpOworCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9taW5wd3IsCisJCQlQT1dFUl9NSU5QV1JfSEFMRkZFVFMsIFBPV0VSX01JTlBXUl9ET1VCTEVfRkVUUyk7CisKKwkvKiA1ViB0byBiYXR0ZXJ5IGhhbmRvZmYgLi4uIEZJWE1FICovCisJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsIFBPV0VSXzVWQ1RSTF9EQ0RDX1hGRVIpOworCWVhcmx5X2RlbGF5KDMwKTsKKwljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwgUE9XRVJfNVZDVFJMX0RDRENfWEZFUik7Cit9CisKK3ZvaWQgbXgyOF9wb3dlcl9pbml0XzRwMl9wYXJhbXModm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKworCS8qIFNldHVwIDRQMiBwYXJhbWV0ZXJzICovCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9kY2RjNHAyLAorCQlQT1dFUl9EQ0RDNFAyX0NNUFRSSVBfTUFTSyB8IFBPV0VSX0RDREM0UDJfVFJHX01BU0ssCisJCVBPV0VSX0RDREM0UDJfVFJHXzRWMiB8ICgzMSA8PCBQT1dFUl9EQ0RDNFAyX0NNUFRSSVBfT0ZGU0VUKSk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJUE9XRVJfNVZDVFJMX0hFQURST09NX0FESl9NQVNLLAorCQkweDQgPDwgUE9XRVJfNVZDVFJMX0hFQURST09NX0FESl9PRkZTRVQpOworCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9kY2RjNHAyLAorCQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF9NQVNLLAorCQlQT1dFUl9EQ0RDNFAyX0RST1BPVVRfQ1RSTF8xMDBNViB8CisJCVBPV0VSX0RDREM0UDJfRFJPUE9VVF9DVFJMX1NSQ19TRUwpOworCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwsCisJCVBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9NQVNLLAorCQkweDNmIDw8IFBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9PRkZTRVQpOworfQorCit2b2lkIG14MjhfZW5hYmxlXzRwMl9kY2RjX2lucHV0KGludCB4ZmVyKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCXVpbnQzMl90IHRtcCwgdmJ1c190aHJlc2gsIHZidXNfNXZkZXRlY3QsIHB3ZF9ibzsKKwl1aW50MzJfdCBwcmV2XzV2X2Jybm91dCwgcHJldl81dl9kcm9vcDsKKworCXByZXZfNXZfYnJub3V0ID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCkgJgorCQkJCVBPV0VSXzVWQ1RSTF9QV0ROXzVWQlJOT1VUOworCXByZXZfNXZfZHJvb3AgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybCkgJgorCQkJCVBPV0VSX0NUUkxfRU5JUlFfVkRENVZfRFJPT1A7CisKKwljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwgUE9XRVJfNVZDVFJMX1BXRE5fNVZCUk5PVVQpOworCXdyaXRlbChQT1dFUl9SRVNFVF9VTkxPQ0tfS0VZIHwgUE9XRVJfUkVTRVRfUFdEX09GRiwKKwkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3Jlc2V0KTsKKworCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybCwgUE9XRVJfQ1RSTF9FTklSUV9WREQ1Vl9EUk9PUCk7CisKKwlpZiAoeGZlciAmJiAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCkgJgorCQkJUE9XRVJfNVZDVFJMX0VOQUJMRV9EQ0RDKSkgeworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBSZWNvcmRpbmcgb3JpZ25hbCB2YWx1ZXMgdGhhdCB3aWxsIGJlIG1vZGlmaWVkIHRlbXBvcmFybGlseQorCSAqIHRvIGhhbmRsZSBhIGNoaXAgYnVnLiBTZWUgY2hpcCBlcnJhdGEgZm9yIENRIEVOR1IwMDExNTgzNworCSAqLworCXRtcCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpOworCXZidXNfdGhyZXNoID0gdG1wICYgUE9XRVJfNVZDVFJMX1ZCVVNWQUxJRF9UUlNIX01BU0s7CisJdmJ1c181dmRldGVjdCA9IHRtcCAmIFBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfNVZERVRFQ1Q7CisKKwlwd2RfYm8gPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfbWlucHdyKSAmIFBPV0VSX01JTlBXUl9QV0RfQk87CisKKwkvKgorCSAqIERpc2FibGUgbWVjaGFuaXNtcyB0aGF0IGdldCBlcnJvbmVvdXNseSB0cmlwcGVkIGJ5IHdoZW4gc2V0dGluZworCSAqIHRoZSBEQ0RDNFAyIEVOX0RDREMKKwkgKi8KKwljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJUE9XRVJfNVZDVFJMX1ZCVVNWQUxJRF81VkRFVEVDVCB8CisJCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF9NQVNLKTsKKworCXdyaXRlbChQT1dFUl9NSU5QV1JfUFdEX0JPLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfbWlucHdyX3NldCk7CisKKwlpZiAoeGZlcikgeworCQlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJCQlQT1dFUl81VkNUUkxfRENEQ19YRkVSKTsKKwkJZWFybHlfZGVsYXkoMjApOworCQljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJCQlQT1dFUl81VkNUUkxfRENEQ19YRkVSKTsKKworCQlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJCQlQT1dFUl81VkNUUkxfRU5BQkxFX0RDREMpOworCX0gZWxzZSB7CisJCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwKKwkJCQlQT1dFUl9EQ0RDNFAyX0VOQUJMRV9EQ0RDKTsKKwl9CisKKwllYXJseV9kZWxheSgyNSk7CisKKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJCVBPV0VSXzVWQ1RSTF9WQlVTVkFMSURfVFJTSF9NQVNLLCB2YnVzX3RocmVzaCk7CisKKwlpZiAodmJ1c181dmRldGVjdCkKKwkJd3JpdGVsKHZidXNfNXZkZXRlY3QsICZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfc2V0KTsKKworCWlmICghcHdkX2JvKQorCQljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX21pbnB3ciwgUE9XRVJfTUlOUFdSX1BXRF9CTyk7CisKKwl3aGlsZSAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmwpICYgUE9XRVJfQ1RSTF9WQlVTX1ZBTElEX0lSUSkKKwkJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsLAorCQkJCVBPV0VSX0NUUkxfVkJVU19WQUxJRF9JUlEpOworCisJaWYgKHByZXZfNXZfYnJub3V0KSB7CisJCXdyaXRlbChQT1dFUl81VkNUUkxfUFdETl81VkJSTk9VVCwKKwkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfc2V0KTsKKwkJd3JpdGVsKFBPV0VSX1JFU0VUX1VOTE9DS19LRVksCisJCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfcmVzZXQpOworCX0gZWxzZSB7CisJCXdyaXRlbChQT1dFUl81VkNUUkxfUFdETl81VkJSTk9VVCwKKwkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfY2xyKTsKKwkJd3JpdGVsKFBPV0VSX1JFU0VUX1VOTE9DS19LRVkgfCBQT1dFUl9SRVNFVF9QV0RfT0ZGLAorCQkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3Jlc2V0KTsKKwl9CisKKwl3aGlsZSAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmwpICYgUE9XRVJfQ1RSTF9WREQ1Vl9EUk9PUF9JUlEpCisJCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybCwKKwkJCQlQT1dFUl9DVFJMX1ZERDVWX0RST09QX0lSUSk7CisKKwlpZiAocHJldl81dl9kcm9vcCkKKwkJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsLAorCQkJCVBPV0VSX0NUUkxfRU5JUlFfVkRENVZfRFJPT1ApOworCWVsc2UKKwkJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsLAorCQkJCVBPV0VSX0NUUkxfRU5JUlFfVkRENVZfRFJPT1ApOworfQorCit2b2lkIG14MjhfcG93ZXJfaW5pdF80cDJfcmVndWxhdG9yKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJdWludDMyX3QgdG1wLCB0bXAyOworCisJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9kY2RjNHAyLCBQT1dFUl9EQ0RDNFAyX0VOQUJMRV80UDIpOworCisJd3JpdGVsKFBPV0VSX0NIQVJHRV9FTkFCTEVfTE9BRCwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2NoYXJnZV9zZXQpOworCisJd3JpdGVsKFBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9NQVNLLAorCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX2Nscik7CisJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9kY2RjNHAyLCBQT1dFUl9EQ0RDNFAyX1RSR19NQVNLKTsKKworCS8qIFBvd2VyIHVwIHRoZSA0cDIgcmFpbCBhbmQgbG9naWMvY29udHJvbCAqLworCXdyaXRlbChQT1dFUl81VkNUUkxfUFdEX0NIQVJHRV80UDJfTUFTSywKKwkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybF9jbHIpOworCisJLyoKKwkgKiBTdGFydCBjaGFyZ2luZyB1cCB0aGUgNHAyIGNhcGFjaXRvci4gV2UgcmFtcCBvZiB0aGlzIGNoYXJnZQorCSAqIGdyYWR1YWxseSB0byBhdm9pZCBsYXJnZSBpbnJ1c2ggY3VycmVudCBmcm9tIHRoZSA1ViBjYWJsZSB3aGljaCBjYW4KKwkgKiBjYXVzZSB0cmFuc2llbnRzL3Byb2JsZW1zCisJICovCisJbXgyOF9lbmFibGVfNHAyX2RjZGNfaW5wdXQoMCk7CisKKwlpZiAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmwpICYgUE9XRVJfQ1RSTF9WQlVTX1ZBTElEX0lSUSkgeworCQkvKgorCQkgKiBJZiB3ZSBhcnJpdmVkIGhlcmUsIHdlIHdlcmUgdW5hYmxlIHRvIHJlY292ZXIgZnJvbSBteDIzIGNoaXAKKwkJICogZXJyYXRhIDU4MzcuIDRQMiBpcyBkaXNhYmxlZCBhbmQgc3VmZmljaWVudCBiYXR0ZXJ5IHBvd2VyIGlzCisJCSAqIG5vdCBwcmVzZW50LiBFeGl0aW5nIHRvIG5vdCBlbmFibGUgRENEQyBwb3dlciBkdXJpbmcgNVYKKwkJICogY29ubmVjdGVkIHN0YXRlLgorCQkgKi8KKwkJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9kY2RjNHAyLAorCQkJUE9XRVJfRENEQzRQMl9FTkFCTEVfRENEQyk7CisJCXdyaXRlbChQT1dFUl81VkNUUkxfUFdEX0NIQVJHRV80UDJfTUFTSywKKwkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfc2V0KTsKKwkJaGFuZygpOworCX0KKworCS8qCisJICogSGVyZSB3ZSBzZXQgdGhlIDRwMiBicm93bm91dCBsZXZlbCB0byBzb21ldGhpbmcgdmVyeSBjbG9zZSB0byA0LjJWLgorCSAqIFdlIHRoZW4gY2hlY2sgdGhlIGJyb3dub3V0IHN0YXR1cy4gSWYgdGhlIGJyb3dub3V0IHN0YXR1cyBpcyBmYWxzZSwKKwkgKiB0aGUgdm9sdGFnZSBpcyBhbHJlYWR5IGNsb3NlIHRvIHRoZSB0YXJnZXQgdm9sdGFnZSBvZiA0LjJWIHNvIHdlCisJICogY2FuIGdvIGFoZWFkIGFuZCBzZXQgdGhlIDRQMiBjdXJyZW50IGxpbWl0IHRvIG91ciBtYXggdGFyZ2V0IGxpbWl0LgorCSAqIElmIHRoZSBicm93bm91dCBzdGF0dXMgaXMgdHJ1ZSwgd2UgbmVlZCB0byByYW1wIHVzIHRoZSBjdXJyZW50IGxpbWl0CisJICogc28gdGhhdCB3ZSBkb24ndCBjYXVzZSBsYXJnZSBpbnJ1c2ggY3VycmVudCBpc3N1ZXMuIFdlIHN0ZXAgdXAgdGhlCisJICogY3VycmVudCBsaW1pdCB1bnRpbCB0aGUgYnJvd25vdXQgc3RhdHVzIGlzIGZhbHNlIG9yIHVudGlsIHdlJ3ZlCisJICogcmVhY2hlZCBvdXIgbWF4aW11bSBkZWZpbmVkIDRwMiBjdXJyZW50IGxpbWl0LgorCSAqLworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwKKwkJCVBPV0VSX0RDREM0UDJfQk9fTUFTSywKKwkJCTIyIDw8IFBPV0VSX0RDREM0UDJfQk9fT0ZGU0VUKTsJLyogNC4xNVYgKi8KKworCWlmICghKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYgUE9XRVJfU1RTX0RDRENfNFAyX0JPKSkgeworCQlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJCTB4M2YgPDwgUE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJdG1wID0gKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpICYKKwkJCVBPV0VSXzVWQ1RSTF9DSEFSR0VfNFAyX0lMSU1JVF9NQVNLKSA+PgorCQkJUE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX09GRlNFVDsKKwkJd2hpbGUgKHRtcCA8IDB4M2YpIHsKKwkJCWlmICghKHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpICYKKwkJCQkJUE9XRVJfU1RTX0RDRENfNFAyX0JPKSkgeworCQkJCXRtcCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpOworCQkJCXRtcCB8PSBQT1dFUl81VkNUUkxfQ0hBUkdFXzRQMl9JTElNSVRfTUFTSzsKKwkJCQllYXJseV9kZWxheSgxMDApOworCQkJCXdyaXRlbCh0bXAsICZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmwpOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQl0bXArKzsKKwkJCQl0bXAyID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCk7CisJCQkJdG1wMiAmPSB+UE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX01BU0s7CisJCQkJdG1wMiB8PSB0bXAgPDwKKwkJCQkJUE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX09GRlNFVDsKKwkJCQl3cml0ZWwodG1wMiwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCk7CisJCQkJZWFybHlfZGVsYXkoMTAwKTsKKwkJCX0KKwkJfQorCX0KKworCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMiwgUE9XRVJfRENEQzRQMl9CT19NQVNLKTsKKwl3cml0ZWwoUE9XRVJfQ1RSTF9EQ0RDNFAyX0JPX0lSUSwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmxfY2xyKTsKK30KKwordm9pZCBteDI4X3Bvd2VyX2luaXRfZGNkY180cDJfc291cmNlKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwlpZiAoIShyZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfZGNkYzRwMikgJgorCQlQT1dFUl9EQ0RDNFAyX0VOQUJMRV9EQ0RDKSkgeworCQloYW5nKCk7CisJfQorCisJbXgyOF9lbmFibGVfNHAyX2RjZGNfaW5wdXQoMSk7CisKKwlpZiAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmwpICYgUE9XRVJfQ1RSTF9WQlVTX1ZBTElEX0lSUSkgeworCQljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2RjZGM0cDIsCisJCQlQT1dFUl9EQ0RDNFAyX0VOQUJMRV9EQ0RDKTsKKwkJd3JpdGVsKFBPV0VSXzVWQ1RSTF9FTkFCTEVfRENEQywKKwkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfY2xyKTsKKwkJd3JpdGVsKFBPV0VSXzVWQ1RSTF9QV0RfQ0hBUkdFXzRQMl9NQVNLLAorCQkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybF9zZXQpOworCX0KK30KKwordm9pZCBteDI4X3Bvd2VyX2VuYWJsZV80cDIodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl1aW50MzJfdCB2ZGRkY3RybCwgdmRkYWN0cmwsIHZkZGlvY3RybDsKKwl1aW50MzJfdCB0bXA7CisKKwl2ZGRkY3RybCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCk7CisJdmRkYWN0cmwgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkYWN0cmwpOworCXZkZGlvY3RybCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwpOworCisJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCwKKwkJUE9XRVJfVkRERENUUkxfRElTQUJMRV9GRVQgfCBQT1dFUl9WREREQ1RSTF9FTkFCTEVfTElOUkVHIHwKKwkJUE9XRVJfVkRERENUUkxfUFdETl9CUk5PVVQpOworCisJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRhY3RybCwKKwkJUE9XRVJfVkREQUNUUkxfRElTQUJMRV9GRVQgfCBQT1dFUl9WRERBQ1RSTF9FTkFCTEVfTElOUkVHIHwKKwkJUE9XRVJfVkREQUNUUkxfUFdETl9CUk5PVVQpOworCisJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwsCisJCVBPV0VSX1ZERElPQ1RSTF9ESVNBQkxFX0ZFVCB8IFBPV0VSX1ZERElPQ1RSTF9QV0ROX0JSTk9VVCk7CisKKwlteDI4X3Bvd2VyX2luaXRfNHAyX3BhcmFtcygpOworCW14MjhfcG93ZXJfaW5pdF80cDJfcmVndWxhdG9yKCk7CisKKwkvKiBTaHV0ZG93biBiYXR0ZXJ5IChub25lIHByZXNlbnQpICovCisJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl9kY2RjNHAyLCBQT1dFUl9EQ0RDNFAyX0JPX01BU0spOworCXdyaXRlbChQT1dFUl9DVFJMX0RDREM0UDJfQk9fSVJRLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworCXdyaXRlbChQT1dFUl9DVFJMX0VOSVJRX0RDREM0UDJfQk8sICZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsX2Nscik7CisKKwlteDI4X3Bvd2VyX2luaXRfZGNkY180cDJfc291cmNlKCk7CisKKwl3cml0ZWwodmRkZGN0cmwsICZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCk7CisJZWFybHlfZGVsYXkoMjApOworCXdyaXRlbCh2ZGRhY3RybCwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGFjdHJsKTsKKwllYXJseV9kZWxheSgyMCk7CisJd3JpdGVsKHZkZGlvY3RybCwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCk7CisKKwkvKgorCSAqIENoZWNrIGlmIEZFVCBpcyBlbmFibGVkIG9uIGVpdGhlciBwb3dlcm91dCBhbmQgaWYgc28sCisJICogZGlzYWJsZSBsb2FkLgorCSAqLworCXRtcCA9IDA7CisJdG1wIHw9ICEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsKSAmCisJCQlQT1dFUl9WREREQ1RSTF9ESVNBQkxFX0ZFVCk7CisJdG1wIHw9ICEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGFjdHJsKSAmCisJCQlQT1dFUl9WRERBQ1RSTF9ESVNBQkxFX0ZFVCk7CisJdG1wIHw9ICEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCkgJgorCQkJUE9XRVJfVkRESU9DVFJMX0RJU0FCTEVfRkVUKTsKKwlpZiAodG1wKQorCQl3cml0ZWwoUE9XRVJfQ0hBUkdFX0VOQUJMRV9MT0FELAorCQkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2NoYXJnZV9jbHIpOworfQorCit2b2lkIG14MjhfYm9vdF92YWxpZF81dih2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJLyoKKwkgKiBVc2UgVkJVU1ZBTElEIGxldmVsIGluc3RlYWQgb2YgVkRENVZfR1RfVkRESU8gbGV2ZWwgdG8gdHJpZ2dlciBhIDVWCisJICogZGlzY29ubmVjdCBldmVudC4gRklYTUUKKwkgKi8KKwl3cml0ZWwoUE9XRVJfNVZDVFJMX1ZCVVNWQUxJRF81VkRFVEVDVCwKKwkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybF9zZXQpOworCisJLyogQ29uZmlndXJlIHBvbGFyaXR5IHRvIGNoZWNrIGZvciA1ViBkaXNjb25uZWN0aW9uLiAqLworCXdyaXRlbChQT1dFUl9DVFJMX1BPTEFSSVRZX1ZCVVNWQUxJRCB8CisJCVBPV0VSX0NUUkxfUE9MQVJJVFlfVkRENVZfR1RfVkRESU8sCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsX2Nscik7CisKKwl3cml0ZWwoUE9XRVJfQ1RSTF9WQlVTX1ZBTElEX0lSUSB8IFBPV0VSX0NUUkxfVkRENVZfR1RfVkRESU9fSVJRLAorCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworCisJbXgyOF9wb3dlcl9lbmFibGVfNHAyKCk7Cit9CisKK3ZvaWQgbXgyOF9wb3dlcmRvd24odm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl3cml0ZWwoUE9XRVJfUkVTRVRfVU5MT0NLX0tFWSwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3Jlc2V0KTsKKwl3cml0ZWwoUE9XRVJfUkVTRVRfVU5MT0NLX0tFWSB8IFBPV0VSX1JFU0VUX1BXRF9PRkYsCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl9yZXNldCk7Cit9CisKK3ZvaWQgbXgyOF9oYW5kbGVfNXZfY29uZmxpY3Qodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl1aW50MzJfdCB0bXA7CisKKwlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCwKKwkJCVBPV0VSX1ZERElPQ1RSTF9CT19PRkZTRVRfTUFTSyk7CisKKwlmb3IgKDs7KSB7CisJCXRtcCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9zdHMpOworCisJCWlmICh0bXAgJiBQT1dFUl9TVFNfVkRESU9fQk8pIHsKKwkJCW14MjhfcG93ZXJkb3duKCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0bXAgJiBQT1dFUl9TVFNfVkRENVZfR1RfVkRESU8pIHsKKwkJCW14MjhfYm9vdF92YWxpZF81digpOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlteDI4X3Bvd2VyZG93bigpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK2ludCBteDI4X2dldF9iYXR0X3ZvbHQodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl1aW50MzJfdCB2b2x0ID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2JhdHRtb25pdG9yKTsKKwl2b2x0ICY9IFBPV0VSX0JBVFRNT05JVE9SX0JBVFRfVkFMX01BU0s7CisJdm9sdCA+Pj0gUE9XRVJfQkFUVE1PTklUT1JfQkFUVF9WQUxfT0ZGU0VUOworCXZvbHQgKj0gODsKKwlyZXR1cm4gdm9sdDsKK30KKworaW50IG14MjhfaXNfYmF0dF9yZWFkeSh2b2lkKQoreworCXJldHVybiAobXgyOF9nZXRfYmF0dF92b2x0KCkgPj0gMzYwMCk7Cit9CisKK3ZvaWQgbXgyOF81dl9ib290KHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwkvKgorCSAqIE5PVEU6IEluIG9yaWdpbmFsIElNWC1Cb290bGV0cywgdGhpcyBhbHNvIGNoZWNrcyBmb3IgVkJVU1ZBTElELAorCSAqIGJ1dCB0aGVpciBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcmV0dXJucyAxIHNvIHdlIG9taXQgaXQgaGVyZS4KKwkgKi8KKwlpZiAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJiBQT1dFUl9TVFNfVkRENVZfR1RfVkRESU8pIHsKKwkJbXgyOF9ib290X3ZhbGlkXzV2KCk7CisJCXJldHVybjsKKwl9CisKKwllYXJseV9kZWxheSgxMDAwKTsKKwlpZiAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJiBQT1dFUl9TVFNfVkRENVZfR1RfVkRESU8pIHsKKwkJbXgyOF9ib290X3ZhbGlkXzV2KCk7CisJCXJldHVybjsKKwl9CisKKwlteDI4X2hhbmRsZV81dl9jb25mbGljdCgpOworfQorCit2b2lkIG14MjhfaW5pdF9iYXR0X2JvKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisKKwkvKiBCcm93bm91dCBhdCAzViAqLworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfYmF0dG1vbml0b3IsCisJCVBPV0VSX0JBVFRNT05JVE9SX0JSV05PVVRfTFZMX01BU0ssCisJCTE1IDw8IFBPV0VSX0JBVFRNT05JVE9SX0JSV05PVVRfTFZMX09GRlNFVCk7CisKKwl3cml0ZWwoUE9XRVJfQ1RSTF9CQVRUX0JPX0lSUSwgJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2N0cmxfY2xyKTsKKwl3cml0ZWwoUE9XRVJfQ1RSTF9FTklSUV9CQVRUX0JPLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfY3RybF9jbHIpOworfQorCit2b2lkIG14Mjhfc3dpdGNoX3ZkZGRfdG9fZGNkY19zb3VyY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfTUFTSywKKwkJUE9XRVJfVkRERENUUkxfTElOUkVHX09GRlNFVF8xU1RFUFNfQkVMT1cpOworCisJY2xyYml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCwKKwkJUE9XRVJfVkRERENUUkxfRElTQUJMRV9GRVQgfCBQT1dFUl9WREREQ1RSTF9FTkFCTEVfTElOUkVHIHwKKwkJUE9XRVJfVkRERENUUkxfRElTQUJMRV9TVEVQUElORyk7Cit9CisKK2ludCBteDI4X2lzX2JhdHRfZ29vZCh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCXVpbnQzMl90IHZvbHQ7CisKKwl2b2x0ID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2JhdHRtb25pdG9yKTsKKwl2b2x0ICY9IFBPV0VSX0JBVFRNT05JVE9SX0JBVFRfVkFMX01BU0s7CisJdm9sdCA+Pj0gUE9XRVJfQkFUVE1PTklUT1JfQkFUVF9WQUxfT0ZGU0VUOworCXZvbHQgKj0gODsKKworCWlmICgodm9sdCA+PSAyNDAwKSAmJiAodm9sdCA8PSA0MzAwKSkKKwkJcmV0dXJuIDE7CisKKwljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCwKKwkJUE9XRVJfNVZDVFJMX0NIQVJHRV80UDJfSUxJTUlUX01BU0ssCisJCTB4MyA8PCBQT1dFUl81VkNUUkxfQ0hBUkdFXzRQMl9JTElNSVRfT0ZGU0VUKTsKKwl3cml0ZWwoUE9XRVJfNVZDVFJMX1BXRF9DSEFSR0VfNFAyX01BU0ssCisJCSZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfY2xyKTsKKworCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfY2hhcmdlLAorCQlQT1dFUl9DSEFSR0VfU1RPUF9JTElNSVRfTUFTSyB8IFBPV0VSX0NIQVJHRV9CQVRUQ0hSR19JX01BU0ssCisJCVBPV0VSX0NIQVJHRV9TVE9QX0lMSU1JVF8xME1BIHwgMHgzKTsKKworCXdyaXRlbChQT1dFUl9DSEFSR0VfUFdEX0JBVFRDSFJHLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfY2hhcmdlX2Nscik7CisJd3JpdGVsKFBPV0VSXzVWQ1RSTF9QV0RfQ0hBUkdFXzRQMl9NQVNLLAorCQkmcG93ZXJfcmVncy0+aHdfcG93ZXJfNXZjdHJsX2Nscik7CisKKwllYXJseV9kZWxheSg1MDAwMDApOworCisJdm9sdCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl9iYXR0bW9uaXRvcik7CisJdm9sdCAmPSBQT1dFUl9CQVRUTU9OSVRPUl9CQVRUX1ZBTF9NQVNLOworCXZvbHQgPj49IFBPV0VSX0JBVFRNT05JVE9SX0JBVFRfVkFMX09GRlNFVDsKKwl2b2x0ICo9IDg7CisKKwlpZiAodm9sdCA+PSAzNTAwKQorCQlyZXR1cm4gMDsKKworCWlmICh2b2x0ID49IDI0MDApCisJCXJldHVybiAxOworCisJd3JpdGVsKFBPV0VSX0NIQVJHRV9TVE9QX0lMSU1JVF9NQVNLIHwgUE9XRVJfQ0hBUkdFX0JBVFRDSFJHX0lfTUFTSywKKwkJJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX2NoYXJnZV9jbHIpOworCXdyaXRlbChQT1dFUl9DSEFSR0VfUFdEX0JBVFRDSFJHLCAmcG93ZXJfcmVncy0+aHdfcG93ZXJfY2hhcmdlX3NldCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBteDI4X3Bvd2VyX2NvbmZpZ3VyZV9wb3dlcl9zb3VyY2Uodm9pZCkKK3sKKwlteDI4X3NyY19wb3dlcl9pbml0KCk7CisKKwlteDI4XzV2X2Jvb3QoKTsKKwlteDI4X3Bvd2VyX2Nsb2NrMnBsbCgpOworCisJbXgyOF9pbml0X2JhdHRfYm8oKTsKKwlteDI4X3N3aXRjaF92ZGRkX3RvX2RjZGNfc291cmNlKCk7Cit9CisKK3ZvaWQgbXgyOF9lbmFibGVfb3V0cHV0X3JhaWxfcHJvdGVjdGlvbih2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJd3JpdGVsKFBPV0VSX0NUUkxfVkRERF9CT19JUlEgfCBQT1dFUl9DVFJMX1ZEREFfQk9fSVJRIHwKKwkJUE9XRVJfQ1RSTF9WRERJT19CT19JUlEsICZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsX2Nscik7CisKKwlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsLAorCQkJUE9XRVJfVkRERENUUkxfUFdETl9CUk5PVVQpOworCisJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRhY3RybCwKKwkJCVBPV0VSX1ZEREFDVFJMX1BXRE5fQlJOT1VUKTsKKworCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsLAorCQkJUE9XRVJfVkRESU9DVFJMX1BXRE5fQlJOT1VUKTsKK30KKworaW50IG14MjhfZ2V0X3ZkZGlvX3Bvd2VyX3NvdXJjZV9vZmYodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl1aW50MzJfdCB0bXA7CisKKwlpZiAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJiBQT1dFUl9TVFNfVkRENVZfR1RfVkRESU8pIHsKKwkJdG1wID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCk7CisJCWlmICh0bXAgJiBQT1dFUl9WRERJT0NUUkxfRElTQUJMRV9GRVQpIHsKKwkJCWlmICgodG1wICYgUE9XRVJfVkRESU9DVFJMX0xJTlJFR19PRkZTRVRfTUFTSykgPT0KKwkJCQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzBTVEVQUykgeworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisKKwkJaWYgKCEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCkgJgorCQkJUE9XRVJfNVZDVFJMX0VOQUJMRV9EQ0RDKSkgeworCQkJaWYgKCh0bXAgJiBQT1dFUl9WRERJT0NUUkxfTElOUkVHX09GRlNFVF9NQVNLKSA9PQorCQkJCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfMFNURVBTKSB7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworfQorCitpbnQgbXgyOF9nZXRfdmRkZF9wb3dlcl9zb3VyY2Vfb2ZmKHZvaWQpCit7CisJc3RydWN0IG14MjhfcG93ZXJfcmVncyAqcG93ZXJfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICopTVhTX1BPV0VSX0JBU0U7CisJdWludDMyX3QgdG1wOworCisJdG1wID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsKTsKKwlpZiAodG1wICYgUE9XRVJfVkRERENUUkxfRElTQUJMRV9GRVQpIHsKKwkJaWYgKCh0bXAgJiBQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUX01BU0spID09CisJCQlQT1dFUl9WREREQ1RSTF9MSU5SRUdfT0ZGU0VUXzBTVEVQUykgeworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlpZiAocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJiBQT1dFUl9TVFNfVkRENVZfR1RfVkRESU8pIHsKKwkJaWYgKCEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyXzV2Y3RybCkgJgorCQkJUE9XRVJfNVZDVFJMX0VOQUJMRV9EQ0RDKSkgeworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlpZiAoISh0bXAgJiBQT1dFUl9WREREQ1RSTF9FTkFCTEVfTElOUkVHKSkgeworCQlpZiAoKHRtcCAmIFBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfTUFTSykgPT0KKwkJCVBPV0VSX1ZERERDVFJMX0xJTlJFR19PRkZTRVRfMVNURVBTX0JFTE9XKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCit2b2lkIG14MjhfcG93ZXJfc2V0X3ZkZGlvKHVpbnQzMl90IG5ld190YXJnZXQsIHVpbnQzMl90IG5ld19icm93bm91dCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl1aW50MzJfdCBjdXJfdGFyZ2V0LCBkaWZmLCBib19pbnQgPSAwOworCXVpbnQzMl90IHBvd2VyZWRfYnlfbGlucmVnID0gMDsKKworCW5ld19icm93bm91dCA9IG5ld190YXJnZXQgLSBuZXdfYnJvd25vdXQ7CisKKwljdXJfdGFyZ2V0ID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCk7CisJY3VyX3RhcmdldCAmPSBQT1dFUl9WRERJT0NUUkxfVFJHX01BU0s7CisJY3VyX3RhcmdldCAqPSA1MDsJLyogNTAgbVYgc3RlcCovCisJY3VyX3RhcmdldCArPSAyODAwOwkvKiAyODAwIG1WIGxvd2VzdCAqLworCisJcG93ZXJlZF9ieV9saW5yZWcgPSBteDI4X2dldF92ZGRpb19wb3dlcl9zb3VyY2Vfb2ZmKCk7CisJaWYgKG5ld190YXJnZXQgPiBjdXJfdGFyZ2V0KSB7CisKKwkJaWYgKHBvd2VyZWRfYnlfbGlucmVnKSB7CisJCQlib19pbnQgPSByZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsKTsKKwkJCWNscmJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsLAorCQkJCQlQT1dFUl9DVFJMX0VOSVJRX1ZERElPX0JPKTsKKwkJfQorCisJCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkaW9jdHJsLAorCQkJCVBPV0VSX1ZERElPQ1RSTF9CT19PRkZTRVRfTUFTSyk7CisJCWRvIHsKKwkJCWlmIChuZXdfdGFyZ2V0IC0gY3VyX3RhcmdldCA+IDEwMCkKKwkJCQlkaWZmID0gY3VyX3RhcmdldCArIDEwMDsKKwkJCWVsc2UKKwkJCQlkaWZmID0gbmV3X3RhcmdldDsKKworCQkJZGlmZiAtPSAyODAwOworCQkJZGlmZiAvPSA1MDsKKworCQkJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwsCisJCQkJUE9XRVJfVkRESU9DVFJMX1RSR19NQVNLLCBkaWZmKTsKKworCQkJaWYgKHBvd2VyZWRfYnlfbGlucmVnKQorCQkJCWVhcmx5X2RlbGF5KDE1MDApOworCQkJZWxzZSB7CisJCQkJd2hpbGUgKCEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJgorCQkJCQlQT1dFUl9TVFNfRENfT0spKQorCQkJCQk7CisKKwkJCX0KKworCQkJY3VyX3RhcmdldCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwpOworCQkJY3VyX3RhcmdldCAmPSBQT1dFUl9WRERJT0NUUkxfVFJHX01BU0s7CisJCQljdXJfdGFyZ2V0ICo9IDUwOwkvKiA1MCBtViBzdGVwKi8KKwkJCWN1cl90YXJnZXQgKz0gMjgwMDsJLyogMjgwMCBtViBsb3dlc3QgKi8KKwkJfSB3aGlsZSAobmV3X3RhcmdldCA+IGN1cl90YXJnZXQpOworCisJCWlmIChwb3dlcmVkX2J5X2xpbnJlZykgeworCQkJd3JpdGVsKFBPV0VSX0NUUkxfVkRESU9fQk9fSVJRLAorCQkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsX2Nscik7CisJCQlpZiAoYm9faW50ICYgUE9XRVJfQ1RSTF9FTklSUV9WRERJT19CTykKKwkJCQlzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCwKKwkJCQkJCVBPV0VSX0NUUkxfRU5JUlFfVkRESU9fQk8pOworCQl9CisJfSBlbHNlIHsKKwkJZG8geworCQkJaWYgKGN1cl90YXJnZXQgLSBuZXdfdGFyZ2V0ID4gMTAwKQorCQkJCWRpZmYgPSBjdXJfdGFyZ2V0IC0gMTAwOworCQkJZWxzZQorCQkJCWRpZmYgPSBuZXdfdGFyZ2V0OworCisJCQlkaWZmIC09IDI4MDA7CisJCQlkaWZmIC89IDUwOworCisJCQljbHJzZXRiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCwKKwkJCQlQT1dFUl9WRERJT0NUUkxfVFJHX01BU0ssIGRpZmYpOworCisJCQlpZiAocG93ZXJlZF9ieV9saW5yZWcpCisJCQkJZWFybHlfZGVsYXkoMTUwMCk7CisJCQllbHNlIHsKKwkJCQl3aGlsZSAoIShyZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfc3RzKSAmCisJCQkJCVBPV0VSX1NUU19EQ19PSykpCisJCQkJCTsKKworCQkJfQorCisJCQljdXJfdGFyZ2V0ID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGlvY3RybCk7CisJCQljdXJfdGFyZ2V0ICY9IFBPV0VSX1ZERElPQ1RSTF9UUkdfTUFTSzsKKwkJCWN1cl90YXJnZXQgKj0gNTA7CS8qIDUwIG1WIHN0ZXAqLworCQkJY3VyX3RhcmdldCArPSAyODAwOwkvKiAyODAwIG1WIGxvd2VzdCAqLworCQl9IHdoaWxlIChuZXdfdGFyZ2V0IDwgY3VyX3RhcmdldCk7CisJfQorCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRpb2N0cmwsCisJCQlQT1dFUl9WREREQ1RSTF9CT19PRkZTRVRfTUFTSywKKwkJCW5ld19icm93bm91dCA8PCBQT1dFUl9WREREQ1RSTF9CT19PRkZTRVRfT0ZGU0VUKTsKK30KKwordm9pZCBteDI4X3Bvd2VyX3NldF92ZGRkKHVpbnQzMl90IG5ld190YXJnZXQsIHVpbnQzMl90IG5ld19icm93bm91dCkKK3sKKwlzdHJ1Y3QgbXgyOF9wb3dlcl9yZWdzICpwb3dlcl9yZWdzID0KKwkJKHN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKilNWFNfUE9XRVJfQkFTRTsKKwl1aW50MzJfdCBjdXJfdGFyZ2V0LCBkaWZmLCBib19pbnQgPSAwOworCXVpbnQzMl90IHBvd2VyZWRfYnlfbGlucmVnID0gMDsKKworCW5ld19icm93bm91dCA9IG5ld190YXJnZXQgLSBuZXdfYnJvd25vdXQ7CisKKwljdXJfdGFyZ2V0ID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsKTsKKwljdXJfdGFyZ2V0ICY9IFBPV0VSX1ZERERDVFJMX1RSR19NQVNLOworCWN1cl90YXJnZXQgKj0gMjU7CS8qIDI1IG1WIHN0ZXAqLworCWN1cl90YXJnZXQgKz0gODAwOwkvKiA4MDAgbVYgbG93ZXN0ICovCisKKwlwb3dlcmVkX2J5X2xpbnJlZyA9IG14MjhfZ2V0X3ZkZGRfcG93ZXJfc291cmNlX29mZigpOworCWlmIChuZXdfdGFyZ2V0ID4gY3VyX3RhcmdldCkgeworCQlpZiAocG93ZXJlZF9ieV9saW5yZWcpIHsKKwkJCWJvX2ludCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCk7CisJCQljbHJiaXRzX2xlMzIoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsLAorCQkJCQlQT1dFUl9DVFJMX0VOSVJRX1ZERERfQk8pOworCQl9CisKKwkJc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCwKKwkJCQlQT1dFUl9WREREQ1RSTF9CT19PRkZTRVRfTUFTSyk7CisKKwkJZG8geworCQkJaWYgKG5ld190YXJnZXQgLSBjdXJfdGFyZ2V0ID4gMTAwKQorCQkJCWRpZmYgPSBjdXJfdGFyZ2V0ICsgMTAwOworCQkJZWxzZQorCQkJCWRpZmYgPSBuZXdfdGFyZ2V0OworCisJCQlkaWZmIC09IDgwMDsKKwkJCWRpZmYgLz0gMjU7CisKKwkJCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCQkJUE9XRVJfVkRERENUUkxfVFJHX01BU0ssIGRpZmYpOworCisJCQlpZiAocG93ZXJlZF9ieV9saW5yZWcpCisJCQkJZWFybHlfZGVsYXkoMTUwMCk7CisJCQllbHNlIHsKKwkJCQl3aGlsZSAoIShyZWFkbCgmcG93ZXJfcmVncy0+aHdfcG93ZXJfc3RzKSAmCisJCQkJCVBPV0VSX1NUU19EQ19PSykpCisJCQkJCTsKKworCQkJfQorCisJCQljdXJfdGFyZ2V0ID0gcmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3ZkZGRjdHJsKTsKKwkJCWN1cl90YXJnZXQgJj0gUE9XRVJfVkRERENUUkxfVFJHX01BU0s7CisJCQljdXJfdGFyZ2V0ICo9IDI1OwkvKiAyNSBtViBzdGVwKi8KKwkJCWN1cl90YXJnZXQgKz0gODAwOwkvKiA4MDAgbVYgbG93ZXN0ICovCisJCX0gd2hpbGUgKG5ld190YXJnZXQgPiBjdXJfdGFyZ2V0KTsKKworCQlpZiAocG93ZXJlZF9ieV9saW5yZWcpIHsKKwkJCXdyaXRlbChQT1dFUl9DVFJMX1ZERERfQk9fSVJRLAorCQkJCSZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsX2Nscik7CisJCQlpZiAoYm9faW50ICYgUE9XRVJfQ1RSTF9FTklSUV9WREREX0JPKQorCQkJCXNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCQkJCQlQT1dFUl9DVFJMX0VOSVJRX1ZERERfQk8pOworCQl9CisJfSBlbHNlIHsKKwkJZG8geworCQkJaWYgKGN1cl90YXJnZXQgLSBuZXdfdGFyZ2V0ID4gMTAwKQorCQkJCWRpZmYgPSBjdXJfdGFyZ2V0IC0gMTAwOworCQkJZWxzZQorCQkJCWRpZmYgPSBuZXdfdGFyZ2V0OworCisJCQlkaWZmIC09IDgwMDsKKwkJCWRpZmYgLz0gMjU7CisKKwkJCWNscnNldGJpdHNfbGUzMigmcG93ZXJfcmVncy0+aHdfcG93ZXJfdmRkZGN0cmwsCisJCQkJCVBPV0VSX1ZERERDVFJMX1RSR19NQVNLLCBkaWZmKTsKKworCQkJaWYgKHBvd2VyZWRfYnlfbGlucmVnKQorCQkJCWVhcmx5X2RlbGF5KDE1MDApOworCQkJZWxzZSB7CisJCQkJd2hpbGUgKCEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJgorCQkJCQlQT1dFUl9TVFNfRENfT0spKQorCQkJCQk7CisKKwkJCX0KKworCQkJY3VyX3RhcmdldCA9IHJlYWRsKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCk7CisJCQljdXJfdGFyZ2V0ICY9IFBPV0VSX1ZERERDVFJMX1RSR19NQVNLOworCQkJY3VyX3RhcmdldCAqPSAyNTsJLyogMjUgbVYgc3RlcCovCisJCQljdXJfdGFyZ2V0ICs9IDgwMDsJLyogODAwIG1WIGxvd2VzdCAqLworCQl9IHdoaWxlIChuZXdfdGFyZ2V0IDwgY3VyX3RhcmdldCk7CisJfQorCisJY2xyc2V0Yml0c19sZTMyKCZwb3dlcl9yZWdzLT5od19wb3dlcl92ZGRkY3RybCwKKwkJCVBPV0VSX1ZERERDVFJMX0JPX09GRlNFVF9NQVNLLAorCQkJbmV3X2Jyb3dub3V0IDw8IFBPV0VSX1ZERERDVFJMX0JPX09GRlNFVF9PRkZTRVQpOworfQorCit2b2lkIG14MjhfcG93ZXJfaW5pdCh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJbXgyOF9wb3dlcl9jbG9jazJ4dGFsKCk7CisJbXgyOF9wb3dlcl9jbGVhcl9hdXRvX3Jlc3RhcnQoKTsKKwlteDI4X3Bvd2VyX3NldF9saW5yZWcoKTsKKwlteDI4X3Bvd2VyX3NldHVwXzV2X2RldGVjdCgpOworCW14MjhfcG93ZXJfY29uZmlndXJlX3Bvd2VyX3NvdXJjZSgpOworCW14MjhfZW5hYmxlX291dHB1dF9yYWlsX3Byb3RlY3Rpb24oKTsKKworCW14MjhfcG93ZXJfc2V0X3ZkZGlvKDMzMDAsIDMxNTApOworCisJbXgyOF9wb3dlcl9zZXRfdmRkZCgxMzUwLCAxMjAwKTsKKworCXdyaXRlbChQT1dFUl9DVFJMX1ZERERfQk9fSVJRIHwgUE9XRVJfQ1RSTF9WRERBX0JPX0lSUSB8CisJCVBPV0VSX0NUUkxfVkRESU9fQk9fSVJRIHwgUE9XRVJfQ1RSTF9WREQ1Vl9EUk9PUF9JUlEgfAorCQlQT1dFUl9DVFJMX1ZCVVNfVkFMSURfSVJRIHwgUE9XRVJfQ1RSTF9CQVRUX0JPX0lSUSB8CisJCVBPV0VSX0NUUkxfRENEQzRQMl9CT19JUlEsICZwb3dlcl9yZWdzLT5od19wb3dlcl9jdHJsX2Nscik7CisKKwl3cml0ZWwoUE9XRVJfNVZDVFJMX1BXRE5fNVZCUk5PVVQsICZwb3dlcl9yZWdzLT5od19wb3dlcl81dmN0cmxfc2V0KTsKKworCWVhcmx5X2RlbGF5KDEwMDApOworfQorCisjaWZkZWYJQ09ORklHX1NQTF9NWDI4X1BTV0lUQ0hfV0FJVAordm9pZCBteDI4X3Bvd2VyX3dhaXRfcHN3aXRjaCh2b2lkKQoreworCXN0cnVjdCBteDI4X3Bvd2VyX3JlZ3MgKnBvd2VyX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfcG93ZXJfcmVncyAqKU1YU19QT1dFUl9CQVNFOworCisJd2hpbGUgKCEocmVhZGwoJnBvd2VyX3JlZ3MtPmh3X3Bvd2VyX3N0cykgJiBQT1dFUl9TVFNfUFNXSVRDSF9NQVNLKSkKKwkJOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9kZW54L20yOGV2ay9zdGFydC5TIGIvYm9hcmQvZGVueC9tMjhldmsvc3RhcnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDY5NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZGVueC9tMjhldmsvc3RhcnQuUwpAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqICBhcm1ib290IC0gU3RhcnR1cCBDb2RlIGZvciBBUk05MjZFSlMgQ1BVLWNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAzICBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqICAtLS0tLSBBZGFwdGVkIGZvciBPTUFQMTYxMCBPTUFQNzMwIGZyb20gQVJNOTI1dCBjb2RlIC0tLS0tLQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdyb2dlciA8bWFnQHN5c2dvLmRlPgorICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFp1cGtlIDxhenVAc3lzZ28uZGU+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyCUdhcnkgSmVubmVqb2huIDxnYXJ5akBkZW54LmRlPgorICogIENvcHlyaWdodCAoYykgMjAwMwlSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAzCUtzaGl0aWogPGtzaGl0aWpAdGkuY29tPgorICogIENvcHlyaWdodCAoYykgMjAxMAlBbGJlcnQgQXJpYmF1ZCA8YWxiZXJ0LnUuYm9vdEBhcmliYXVkLm5ldD4KKyAqCisgKiBDaGFuZ2UgdG8gc3VwcG9ydCBjYWxsIGJhY2sgaW50byBpTVgyOCBib290cm9tCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8YXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkKKyNpbmNsdWRlIDwuL2NvbmZpZ3Mvb21hcDE1MTAuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX09NQVA3MzApCisjaW5jbHVkZSA8Li9jb25maWdzL29tYXA3MzAuaD4KKyNlbmRpZgorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisKKy5nbG9ibCBfc3RhcnQKK19zdGFydDoKKwliCXJlc2V0CisJYgl1bmRlZmluZWRfaW5zdHJ1Y3Rpb24KKwliCXNvZnR3YXJlX2ludGVycnVwdAorCWIJcHJlZmV0Y2hfYWJvcnQKKwliCWRhdGFfYWJvcnQKKwliCW5vdF91c2VkCisJYglpcnEKKwliCWZpcQorCisvKgorICogVmVjdG9yIHRhYmxlLCBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMC4KKyAqIFRoaXMgdGFibGUgYWxsb3dzIHRoZSBjb2RlIHJ1bm5pbmcgQUZURVIgU1BMLCB0aGUgVS1Cb290LCB0byBpbnN0YWxsIGl0J3MKKyAqIGludGVycnVwdCBoYW5kbGVycyBoZXJlLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBVLUJvb3QgaXMgbG9hZGVkIGludG8gUkFNLAorICogaW5jbHVkaW5nIGl0J3MgaW50ZXJydXB0IHZlY3RvcmluZyB0YWJsZSBhbmQgdGhlIHRhYmxlIGF0IDB4MCBpcyBzdGlsbCB0aGUKKyAqIFNQTHMuIFNvIGlmIGludGVycnVwdCBoYXBwZW5zIGluIFUtQm9vdCwgdGhlIFNQTHMgaW50ZXJydXB0IHZlY3RvcmluZyB0YWJsZQorICogaXMgc3RpbGwgdXNlZC4KKyAqLworX3Z0X3Jlc2V0OgorCS53b3JkCV9yZXNldAorX3Z0X3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoKKwkud29yZAlfaGFuZworX3Z0X3NvZnR3YXJlX2ludGVycnVwdDoKKwkud29yZAlfaGFuZworX3Z0X3ByZWZldGNoX2Fib3J0OgorCS53b3JkCV9oYW5nCitfdnRfZGF0YV9hYm9ydDoKKwkud29yZAlfaGFuZworX3Z0X25vdF91c2VkOgorCS53b3JkCV9yZXNldAorX3Z0X2lycToKKwkud29yZAlfaGFuZworX3Z0X2ZpcToKKwkud29yZAlfaGFuZworCityZXNldDoKKwlsZHIJcGMsIF92dF9yZXNldAordW5kZWZpbmVkX2luc3RydWN0aW9uOgorCWxkcglwYywgX3Z0X3VuZGVmaW5lZF9pbnN0cnVjdGlvbgorc29mdHdhcmVfaW50ZXJydXB0OgorCWxkcglwYywgX3Z0X3NvZnR3YXJlX2ludGVycnVwdAorcHJlZmV0Y2hfYWJvcnQ6CisJbGRyCXBjLCBfdnRfcHJlZmV0Y2hfYWJvcnQKK2RhdGFfYWJvcnQ6CisJbGRyCXBjLCBfdnRfZGF0YV9hYm9ydAorbm90X3VzZWQ6CisJbGRyCXBjLCBfdnRfbm90X3VzZWQKK2lycToKKwlsZHIJcGMsIF92dF9pcnEKK2ZpcToKKwlsZHIJcGMsIF92dF9maXEKKworCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCisgKgorICogZG8gaW1wb3J0YW50IGluaXQgb25seSBpZiB3ZSBkb24ndCBzdGFydCBmcm9tIG1lbW9yeSEKKyAqIHNldHVwIE1lbW9yeSBhbmQgYm9hcmQgc3BlY2lmaWMgYml0cyBwcmlvciB0byByZWxvY2F0aW9uLgorICogcmVsb2NhdGUgYXJtYm9vdCB0byByYW0KKyAqIHNldHVwIHN0YWNrCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisuZ2xvYmwgX1RFWFRfQkFTRQorX1RFWFRfQkFTRToKKwkud29yZAlDT05GSUdfU1lTX1RFWFRfQkFTRQorCisvKgorICogVGhlc2UgYXJlIGRlZmluZWQgaW4gdGhlIGJvYXJkLXNwZWNpZmljIGxpbmtlciBzY3JpcHQuCisgKiBTdWJ0cmFjdGluZyBfc3RhcnQgZnJvbSB0aGVtIGxldHMgdGhlIGxpbmtlciBwdXQgdGhlaXIKKyAqIHJlbGF0aXZlIHBvc2l0aW9uIGluIHRoZSBleGVjdXRhYmxlIGluc3RlYWQgb2YgbGVhdmluZworICogdGhlbSBudWxsLgorICovCisuZ2xvYmwgX2Jzc19zdGFydF9vZnMKK19ic3Nfc3RhcnRfb2ZzOgorCS53b3JkIF9fYnNzX3N0YXJ0IC0gX3N0YXJ0CisKKy5nbG9ibCBfYnNzX2VuZF9vZnMKK19ic3NfZW5kX29mczoKKwkud29yZCBfX2Jzc19lbmRfXyAtIF9zdGFydAorCisuZ2xvYmwgX2VuZF9vZnMKK19lbmRfb2ZzOgorCS53b3JkIF9lbmQgLSBfc3RhcnQKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisvKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLworLmdsb2JsIElSUV9TVEFDS19TVEFSVAorSVJRX1NUQUNLX1NUQVJUOgorCS53b3JkCTB4MGJhZGMwZGUKKworLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KKy5nbG9ibCBGSVFfU1RBQ0tfU1RBUlQKK0ZJUV9TVEFDS19TVEFSVDoKKwkud29yZCAweDBiYWRjMGRlCisjZW5kaWYKKworLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKyA4IGJ5dGVzICovCisuZ2xvYmwgSVJRX1NUQUNLX1NUQVJUX0lOCitJUlFfU1RBQ0tfU1RBUlRfSU46CisJLndvcmQJMHgwYmFkYzBkZQorCisvKgorICogdGhlIGFjdHVhbCByZXNldCBjb2RlCisgKi8KKworX3Jlc2V0OgorCS8qCisJICogU3RvcmUgYWxsIHJlZ2lzdGVycyBvbiBvbGQgc3RhY2sgcG9pbnRlciwgdGhpcyB3aWxsIGFsbG93IHVzIGxhdGVyIHRvCisJICogcmV0dXJuIHRvIHRoZSBCb290Uk9NIGFuZCBsZXQgdGhlIEJvb3RST00gbG9hZCBVLUJvb3QgaW50byBSQU0uCisJICovCisJcHVzaAl7cjAtcjEyLHIxNH0KKworCS8qCisJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQorCSAqLworCW1ycwlyMCxjcHNyCisJYmljCXIwLHIwLCMweDFmCisJb3JyCXIwLHIwLCMweGQzCisJbXNyCWNwc3IscjAKKworCS8qCisJICogd2UgZG8gc3lzLWNyaXRpY2FsIGluaXRzIG9ubHkgYXQgcmVib290LAorCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCisJICovCisjaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKwlibAljcHVfaW5pdF9jcml0CisjZW5kaWYKKworCWJsCWJvYXJkX2luaXRfbGwKKworCXBvcAl7cjAtcjEyLHIxNH0KKwlieAlscgorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDUFVfaW5pdF9jcml0aWNhbCByZWdpc3RlcnMKKyAqCisgKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCisgKiBzZXR1cCBtZW1vcnkgdGltaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCitjcHVfaW5pdF9jcml0OgorCS8qCisJICogZmx1c2ggdjQgSS9EIGNhY2hlcworCSAqLworCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBmbHVzaCB2NCBUTEIgKi8KKworCS8qCisJICogZGlzYWJsZSBNTVUgc3R1ZmYgYW5kIGNhY2hlcworCSAqLworCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKwliaWMJcjAsIHIwLCAjMHgwMDAwMjMwMAkvKiBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykgKi8KKwliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwkvKiBjbGVhciBiaXRzIDcsIDI6MCAoQi0tLSAtQ0FNKSAqLworCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCS8qIHNldCBiaXQgMiAoQSkgQWxpZ24gKi8KKwlvcnIJcjAsIHIwLCAjMHgwMDAwMTAwMAkvKiBzZXQgYml0IDEyIChJKSBJLUNhY2hlICovCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAorCisJbW92CXBjLCBscgkJLyogYmFjayB0byBteSBjYWxsZXIgKi8KKworCS5hbGlnbgk1CisjZW5kaWYgLyogQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCAqLworCitfaGFuZzoKKwlsZHIJc3AsIF9URVhUX0JBU0UJCQkvKiBzd2l0Y2ggdG8gYWJvcnQgc3RhY2sgKi8KKzE6CisJYmwJMWIJCQkJLyogaGFuZyBhbmQgbmV2ZXIgcmV0dXJuICovCmRpZmYgLS1naXQgYS9ib2FyZC9kZW54L20yOGV2ay91LWJvb3Qtc3BsLmxkcyBiL2JvYXJkL2RlbngvbTI4ZXZrL3UtYm9vdC1zcGwubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTZhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9kZW54L20yOGV2ay91LWJvb3Qtc3BsLmxkcwpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogSmFudWFyeSAyMDA0IC0gQ2hhbmdlZCB0byBzdXBwb3J0IEg0IGRldmljZQorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2FyeWpAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQJOgorCXsKKwkJYm9hcmQvZGVueC9tMjhldmsvc3RhcnQubwkoLnRleHQpCisJCSooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsKKwkJKiguZGF0YSkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCisJLnJlbC5keW4gOiB7CisJCV9fcmVsX2R5bl9zdGFydCA9IC47CisJCSooLnJlbCopCisJCV9fcmVsX2R5bl9lbmQgPSAuOworCX0KKworCS5keW5zeW0gOiB7CisJCV9fZHluc3ltX3N0YXJ0ID0gLjsKKwkJKiguZHluc3ltKQorCX0KKworCV9lbmQgPSAuOworCisJLmJzcyBfX3JlbF9keW5fc3RhcnQgKE9WRVJMQVkpIDogeworCQlfX2Jzc19zdGFydCA9IC47CisJCSooLmJzcykKKwkJIC4gPSBBTElHTig0KTsKKwkJX19ic3NfZW5kX18gPSAuOworCX0KKworCS9ESVNDQVJELyA6IHsgKiguYnNzKikgfQorCS9ESVNDQVJELyA6IHsgKiguZHluc3RyKikgfQorCS9ESVNDQVJELyA6IHsgKiguZHluc3ltKikgfQorCS9ESVNDQVJELyA6IHsgKiguZHluYW1pYyopIH0KKwkvRElTQ0FSRC8gOiB7ICooLmhhc2gqKSB9CisJL0RJU0NBUkQvIDogeyAqKC5wbHQqKSB9CisJL0RJU0NBUkQvIDogeyAqKC5pbnRlcnAqKSB9CisJL0RJU0NBUkQvIDogeyAqKC5nbnUqKSB9Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9kZW54L20yOGV2ay91LWJvb3QuYmQgYi9ib2FyZC9kZW54L20yOGV2ay91LWJvb3QuYmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlN2Y5MgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RlbngvbTI4ZXZrL3UtYm9vdC5iZApAQCAtMCwwICsxLDE0IEBACitzb3VyY2VzIHsKKwl1X2Jvb3Rfc3BsPSJzcGwvdS1ib290LXNwbC5iaW4iOworCXVfYm9vdD0idS1ib290LmJpbiI7Cit9CisKK3NlY3Rpb24gKDApIHsKKyAgICAgICAgbG9hZCB1X2Jvb3Rfc3BsID4gMHgwMDAwOworICAgICAgICBsb2FkIGl2dCAoZW50cnkgPSAweDAwMTQpID4gMHg4MDAwOworCWhhYiBjYWxsIDB4ODAwMDsKKworICAgICAgICBsb2FkIHVfYm9vdCA+IDB4NDAwMDAxMDA7CisgICAgICAgIGxvYWQgaXZ0IChlbnRyeSA9IDB4NDAwMDAxMDApID4gMHg4MDAwOworCWhhYiBjYWxsIDB4ODAwMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jb21tb24vYXV0b191cGRhdGUuYyBiL2JvYXJkL2VzZC9jb21tb24vYXV0b191cGRhdGUuYwppbmRleCA0ZGZlYTcxLi5mYzYwNTQ1IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY29tbW9uL2F1dG9fdXBkYXRlLmMKKysrIGIvYm9hcmQvZXNkL2NvbW1vbi9hdXRvX3VwZGF0ZS5jCkBAIC05MSw3ICs5MSw2IEBACiBpbnQgYXVfY2hlY2tfaGVhZGVyX3ZhbGlkKGludCBpLCBsb25nIG5ieXRlcykKIHsKIAlpbWFnZV9oZWFkZXJfdCAqaGRyOwotCXVuc2lnbmVkIGxvbmcgY2hlY2tzdW07CiAKIAloZHIgPSAoaW1hZ2VfaGVhZGVyX3QgKilMT0FEX0FERFI7CiAjaWYgZGVmaW5lZChDT05GSUdfRklUKQpAQCAtMTI3LDkgKzEyNiw2IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKiByZWN5Y2xlIGNoZWNrc3VtICovCi0JY2hlY2tzdW0gPSBpbWFnZV9nZXRfZGF0YV9zaXplIChoZHIpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5Nyw3ICszOTMsNyBAQAogewogCWJsb2NrX2Rldl9kZXNjX3QgKnN0b3JfZGV2ID0gTlVMTDsKIAlsb25nIHN6OwotCWludCBpLCByZXMsIGNudCwgb2xkX2N0cmxjLCBnb3RfY3RybGM7CisJaW50IGksIHJlcywgY250LCBvbGRfY3RybGM7CiAJY2hhciBidWZmZXJbMzJdOwogCWNoYXIgc3RyWzgwXTsKIAlpbnQgbjsKQEAgLTQ3Myw4ICs0NjksNiBAQAogCQkJLyogbGV0IHRoZSB1c2VyIGJyZWFrIG91dCBvZiB0aGUgbG9vcCAqLwogCQkJaWYgKGN0cmxjKCkgfHwgaGFkX2N0cmxjICgpKSB7CiAJCQkJY2xlYXJfY3RybGMgKCk7Ci0JCQkJaWYgKHJlcyA8IDApCi0JCQkJCWdvdF9jdHJsYyA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljbnQrKzsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNzUwL2NwY2k3NTAuYyBiL2JvYXJkL2VzZC9jcGNpNzUwL2NwY2k3NTAuYwppbmRleCBmMjdkNjVlLi4wODMxMWM5IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaTc1MC9jcGNpNzUwLmMKKysrIGIvYm9hcmQvZXNkL2NwY2k3NTAvY3BjaTc1MC5jCkBAIC01NjYsNyArNTY2LDcgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0cjsKIAlpbnQgY291bnQgPSAwOwogCWludCBjb3VudDIgPSAwOwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAJY2hhciBhZGRyWzE2XTsKIAljaGFyIHN0cltdID0gIlxcfC8tIjsKIAljaGFyICpsb2NhbF9hcmdzWzJdOwpAQCAtNjIyLDcgKzYyMiw3IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBzdGF0dXM7CiB9CiAKIFVfQk9PVF9DTUQoCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaTc1MC9zZHJhbV9pbml0LmMgYi9ib2FyZC9lc2QvY3BjaTc1MC9zZHJhbV9pbml0LmMKaW5kZXggNjE1ZTMyYS4uOTc2N2NmMiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k3NTAvc2RyYW1faW5pdC5jCisrKyBiL2JvYXJkL2VzZC9jcGNpNzUwL3NkcmFtX2luaXQuYwpAQCAtNDcsMTggKzQ3LDYgQEAKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLSN1bmRlZglERUJVRwotLyogI2RlZmluZSBERUJVRyAqLwotI2lmZGVmIENPTkZJR19QQ0kKLSNkZWZpbmUJTUFQX1BDSQotI2VuZGlmIC8qIG9mIENPTkZJR19QQ0kgKi8KLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERQKHgpIHgKLSNlbHNlCi0jZGVmaW5lIERQKHgpCi0jZW5kaWYKLQogaW50IHNldF9kZmNkbEluaXQodm9pZCk7CS8qIHNldHVwIGRlbGF5IGxpbmUgb2YgTXY2NDM2MCAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNTAsOCArMjM4LDYgQEAKIC8qIHN0YXRpYyBpbnQgY2hlY2tfZGltbSh1Y2hhciBzbG90LCBBVVhfTUVNX0RJTU1fSU5GTyAqaW5mbykgKi8KIHN0YXRpYyBpbnQgY2hlY2tfZGltbSAodWNoYXIgc2xvdCwgQVVYX01FTV9ESU1NX0lORk8gKiBkaW1tSW5mbykKIHsKLQl1bnNpZ25lZCBsb25nIHNwZF9jaGVja3N1bTsKLQogCXVjaGFyIGFkZHIgPSBzbG90ID09IDAgPyBESU1NMF9JMkNfQUREUiA6IERJTU0xX0kyQ19BRERSOwogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGksIGosIGRlbnNpdHkgPSAxLCBkZXZpY2VzRm9yRXJyQ2hlY2sgPSAwOwpAQCAtMjY0LDcgKzI1MCw3IEBACiAJdWNoYXIgc3VwcF9jYWwsIGNhbF92YWw7CiAJdWxvbmcgbWVtY2xrLCB0bWVtY2xrOwogCXVsb25nIHRtcDsKLQl1Y2hhciB0cnBfY2xvY2tzID0gMCwgdHJjZF9jbG9ja3MsIHRyYXNfY2xvY2tzLCB0cnJkX2Nsb2NrczsKKwl1Y2hhciB0cnBfY2xvY2tzID0gMCwgdHJhc19jbG9ja3M7CiAJdWNoYXIgZGF0YVsxMjhdOwogCiAJbWVtY2xrID0gZ2QtPmJ1c19jbGs7CkBAIC0yNzUsMTEgKzI2MSwxMSBAQAogCiAJcmV0ID0gMDsKIAotCURQIChwdXRzICgiYmVmb3JlIGkyYyByZWFkXG4iKSk7CisJZGVidWcoImJlZm9yZSBpMmMgcmVhZFxuIik7CiAKIAlyZXQgPSBpMmNfcmVhZCAoYWRkciwgMCwgMiwgZGF0YSwgMTI4KTsKIAotCURQIChwdXRzICgiYWZ0ZXIgaTJjIHJlYWRcbiIpKTsKKwlkZWJ1ZygiYWZ0ZXIgaTJjIHJlYWRcbiIpOwogCiAJaWYgKChkYXRhWzY0XSAhPSAnZScpIHx8IChkYXRhWzY1XSAhPSAncycpIHx8IChkYXRhWzY2XSAhPSAnZCcpCiAJICAgIHx8IChkYXRhWzY3XSAhPSAnLScpIHx8IChkYXRhWzY4XSAhPSAnZycpIHx8IChkYXRhWzY5XSAhPSAnbScpCkBAIC0zNDUsNyArMzMxLDcgQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCURQIChwcmludGYgKCJObyBESU1NIGluIHNsb3QgJWQgW2VyciA9ICV4XVxuIiwgc2xvdCwgcmV0KSk7CisJCWRlYnVnKCJObyBESU1NIGluIHNsb3QgJWQgW2VyciA9ICV4XVxuIiwgc2xvdCwgcmV0KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCiAJCWRpbW1JbmZvLT5zbG90ID0gc2xvdDsJLyogc3RhcnQgdG8gZmlsbCB1cCBkaW1taW5mbyBmb3IgdGhpcyAic2xvdCIgKi8KQEAgLTQwMiw4ICszODgsOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogY2FsY3VsYXRlIFNQRCBjaGVja3N1bSAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXNwZF9jaGVja3N1bSA9IDA7CiAjaWYgMAkJCQkvKiB0ZXN0LW9ubHkgKi8KKwlzcGRfY2hlY2tzdW0gPSAwOworCiAJZm9yIChpID0gMDsgaSA8PSA2MjsgaSsrKSB7CiAJCXNwZF9jaGVja3N1bSArPSBkYXRhW2ldOwogCX0KQEAgLTQyNCw0NiArNDExLDQwIEBACiAJCQlkaW1tSW5mby0+bWVtb3J5VHlwZSA9IChkYXRhW2ldID09IDB4NykgPyBERFIgOiBTRFJBTTsKICNpZmRlZiBERUJVRwogCQkJaWYgKGRpbW1JbmZvLT5tZW1vcnlUeXBlID09IDApCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIkRyYW1fdHlwZSBpbiBzbG90ICVkIGlzOgkJCVNEUkFNXG4iLAotCQkJCSAgICAgZGltbUluZm8tPnNsb3QpKTsKKwkJCQlkZWJ1ZygiRHJhbV90eXBlIGluIHNsb3QgJWQgaXM6CQkJU0RSQU1cbiIsCisJCQkJICAgICBkaW1tSW5mby0+c2xvdCk7CiAJCQlpZiAoZGltbUluZm8tPm1lbW9yeVR5cGUgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiRHJhbV90eXBlIGluIHNsb3QgJWQgaXM6CQkJRERSQU1cbiIsCi0JCQkJICAgICBkaW1tSW5mby0+c2xvdCkpOworCQkJCWRlYnVnKCJEcmFtX3R5cGUgaW4gc2xvdCAlZCBpczoJCQlERFJBTVxuIiwKKwkJCQkgICAgIGRpbW1JbmZvLT5zbG90KTsKICNlbmRpZgogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAkJY2FzZSAzOgkvKiBOdW1iZXIgT2YgUm93IEFkZHJlc3NlcyAqLwogCQkJZGltbUluZm8tPm51bU9mUm93QWRkcmVzc2VzID0gZGF0YVtpXTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1vZHVsZSBOdW1iZXIgb2Ygcm93IGFkZHJlc3NlczoJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+bnVtT2ZSb3dBZGRyZXNzZXMpKTsKKwkJCWRlYnVnKCJNb2R1bGUgTnVtYmVyIG9mIHJvdyBhZGRyZXNzZXM6CQklZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPm51bU9mUm93QWRkcmVzc2VzKTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJCWNhc2UgNDoJLyogTnVtYmVyIE9mIENvbHVtbiBBZGRyZXNzZXMgKi8KIAkJCWRpbW1JbmZvLT5udW1PZkNvbEFkZHJlc3NlcyA9IGRhdGFbaV07Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJNb2R1bGUgTnVtYmVyIG9mIGNvbCBhZGRyZXNzZXM6CQklZFxuIiwKLQkJCSAgICAgZGltbUluZm8tPm51bU9mQ29sQWRkcmVzc2VzKSk7CisJCQlkZWJ1ZygiTW9kdWxlIE51bWJlciBvZiBjb2wgYWRkcmVzc2VzOgkJJWRcbiIsCisJCQkgICAgIGRpbW1JbmZvLT5udW1PZkNvbEFkZHJlc3Nlcyk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDU6CS8qIE51bWJlciBPZiBNb2R1bGUgQmFua3MgKi8KIAkJCWRpbW1JbmZvLT5udW1PZk1vZHVsZUJhbmtzID0gZGF0YVtpXTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk51bWJlciBvZiBCYW5rcyBvbiBNb2QuIDogCQkJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+bnVtT2ZNb2R1bGVCYW5rcykpOworCQkJZGVidWcoIk51bWJlciBvZiBCYW5rcyBvbiBNb2QuIDogCQkJCSVkXG4iLAorCQkJICAgICBkaW1tSW5mby0+bnVtT2ZNb2R1bGVCYW5rcyk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDY6CS8qIERhdGEgV2lkdGggKi8KIAkJCWRpbW1JbmZvLT5kYXRhV2lkdGggPSBkYXRhW2ldOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiTW9kdWxlIERhdGEgV2lkdGg6CQkJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+ZGF0YVdpZHRoKSk7CisJCQlkZWJ1ZygiTW9kdWxlIERhdGEgV2lkdGg6CQkJCSVkXG4iLAorCQkJICAgICBkaW1tSW5mby0+ZGF0YVdpZHRoKTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00NzEsMzMgKzQ1MiwyNyBAQAogCQkJc3dpdGNoIChkYXRhW2ldKSB7CiAJCQljYXNlIDB4MDoKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IFRUTF81Vl9UT0xFUkFOVDsKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTW9kdWxlIGlzIAkJCQkJVFRMXzVWX1RPTEVSQU5UXG4iKSk7CisJCQkJZGVidWcoIk1vZHVsZSBpcyAJCQkJCVRUTF81Vl9UT0xFUkFOVFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MToKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IExWVFRMOwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNb2R1bGUgaXMgCQkJCQlMVlRUTFxuIikpOworCQkJCWRlYnVnKCJNb2R1bGUgaXMgCQkJCQlMVlRUTFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MjoKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IEhTVExfMV81VjsKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTW9kdWxlIGlzIAkJCQkJVFRMXzVWX1RPTEVSQU5UXG4iKSk7CisJCQkJZGVidWcoIk1vZHVsZSBpcyAJCQkJCVRUTF81Vl9UT0xFUkFOVFxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MzoKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IFNTVExfM18zVjsKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTW9kdWxlIGlzIAkJCQkJSFNUTF8xXzVWXG4iKSk7CisJCQkJZGVidWcoIk1vZHVsZSBpcyAJCQkJCUhTVExfMV81VlxuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4NDoKIAkJCQlkaW1tSW5mby0+dm9sdGFnZUludGVyZmFjZSA9IFNTVExfMl81VjsKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTW9kdWxlIGlzIAkJCQkJU1NUTF8yXzVWXG4iKSk7CisJCQkJZGVidWcoIk1vZHVsZSBpcyAJCQkJCVNTVExfMl81VlxuIik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWRpbW1JbmZvLT52b2x0YWdlSW50ZXJmYWNlID0gVk9MVEFHRV9VTktOT1dOOwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNb2R1bGUgaXMgCQkJCQlWT0xUQUdFX1VOS05PV05cbiIpKTsKKwkJCQlkZWJ1ZygiTW9kdWxlIGlzIAkJCQkJVk9MVEFHRV9VTktOT1dOXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTE2LDkgKzQ5MSw4IEBACiAJCQkJbGVmdE9mUG9pbnQ7CiAJCQlkaW1tSW5mby0+bWluaW11bUN5Y2xlVGltZUF0TWF4Q2FzTGF0YW5jeV9Sb1AgPQogCQkJCXJpZ2h0T2ZQb2ludDsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1pbmltdW0gQ3ljbGUgVGltZSBBdCBNYXggQ2FzTGF0YW5jeToJCSVkLiVkIFtuc11cbiIsCi0JCQkgICAgIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpKTsKKwkJCWRlYnVnKCJNaW5pbXVtIEN5Y2xlIFRpbWUgQXQgTWF4IENhc0xhdGFuY3k6CQklZC4lZCBbbnNdXG4iLAorCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01MzEsOSArNTA1LDggQEAKIAkJCXJpZ2h0T2ZQb2ludCA9IHRpbWVfdG1wICUgZGl2OwogCQkJZGltbUluZm8tPmNsb2NrVG9EYXRhT3V0X0xvUCA9IGxlZnRPZlBvaW50OwogCQkJZGltbUluZm8tPmNsb2NrVG9EYXRhT3V0X1JvUCA9IHJpZ2h0T2ZQb2ludDsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIkNsb2NrIFRvIERhdGEgT3V0OgkJCQklZC4lMmQgW25zXVxuIiwKLQkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCkpOworCQkJZGVidWcoIkNsb2NrIFRvIERhdGEgT3V0OgkJCQklZC4lMmQgW25zXVxuIiwKKwkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCk7CiAJCQkvKmRpbW1JbmZvLT5jbG9ja1RvRGF0YU91dCAqLwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01NDEsNDIgKzUxNCwzNyBAQAogI2lmZGVmIENPTkZJR19NVjY0MzYwX0VDQwogCQljYXNlIDExOgkvKiBFcnJvciBDaGVjayBUeXBlICovCiAJCQlkaW1tSW5mby0+ZXJyb3JDaGVja1R5cGUgPSBkYXRhW2ldOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiRXJyb3IgQ2hlY2sgVHlwZSAoMD1OT05FKToJCQklZFxuIiwKLQkJCSAgICAgZGltbUluZm8tPmVycm9yQ2hlY2tUeXBlKSk7CisJCQlkZWJ1ZygiRXJyb3IgQ2hlY2sgVHlwZSAoMD1OT05FKToJCQklZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPmVycm9yQ2hlY2tUeXBlKTsKIAkJCWJyZWFrOwogI2VuZGlmIC8qIG9mIGlmZGVmIENPTkZJR19NVjY0MzYwX0VDQyAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJCWNhc2UgMTI6CS8qIFJlZnJlc2ggSW50ZXJ2YWwgKi8KIAkJCWRpbW1JbmZvLT5SZWZyZXNoSW50ZXJ2YWwgPSBkYXRhW2ldOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiUmVmcmVzaEludGVydmFsICg4MD0gU2VsZiByZWZyZXNoIE5vcm1hbCwgMTUuNjI1dXMpIDogJXhcbiIsCi0JCQkgICAgIGRpbW1JbmZvLT5SZWZyZXNoSW50ZXJ2YWwpKTsKKwkJCWRlYnVnKCJSZWZyZXNoSW50ZXJ2YWwgKDgwPSBTZWxmIHJlZnJlc2ggTm9ybWFsLCAxNS42MjV1cykgOiAleFxuIiwKKwkJCSAgICAgZGltbUluZm8tPlJlZnJlc2hJbnRlcnZhbCk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDEzOgkvKiBTZHJhbSBXaWR0aCAqLwogCQkJZGltbUluZm8tPnNkcmFtV2lkdGggPSBkYXRhW2ldOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiU2RyYW0gV2lkdGg6CQkJCQklZFxuIiwKLQkJCSAgICAgZGltbUluZm8tPnNkcmFtV2lkdGgpKTsKKwkJCWRlYnVnKCJTZHJhbSBXaWR0aDoJCQkJCSVkXG4iLAorCQkJICAgICBkaW1tSW5mby0+c2RyYW1XaWR0aCk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDE0OgkvKiBFcnJvciBDaGVjayBEYXRhIFdpZHRoICovCiAJCQlkaW1tSW5mby0+ZXJyb3JDaGVja0RhdGFXaWR0aCA9IGRhdGFbaV07Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJFcnJvciBDaGVjayBEYXRhIFdpZHRoOgkJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+ZXJyb3JDaGVja0RhdGFXaWR0aCkpOworCQkJZGVidWcoIkVycm9yIENoZWNrIERhdGEgV2lkdGg6CQkJJWRcbiIsCisJCQkgICAgIGRpbW1JbmZvLT5lcnJvckNoZWNrRGF0YVdpZHRoKTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJCWNhc2UgMTU6CS8qIE1pbmltdW0gQ2xvY2sgRGVsYXkgKi8KIAkJCWRpbW1JbmZvLT5taW5DbGtEZWxheSA9IGRhdGFbaV07Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJNaW5pbXVtIENsb2NrIERlbGF5OgkJCQklZFxuIiwKLQkJCSAgICAgZGltbUluZm8tPm1pbkNsa0RlbGF5KSk7CisJCQlkZWJ1ZygiTWluaW11bSBDbG9jayBEZWxheToJCQkJJWRcbiIsCisJCQkgICAgIGRpbW1JbmZvLT5taW5DbGtEZWxheSk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTkyLDI2ICs1NjAsMjQgQEAKIAogCQkJZGltbUluZm8tPmJ1cnN0TGVuZ3RoU3VwcG9ydGVkID0gZGF0YVtpXTsKICNpZmRlZiBERUJVRwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiQnVyc3QgTGVuZ3RoIFN1cHBvcnRlZDoJCQkiKSk7CisJCQlkZWJ1ZygiQnVyc3QgTGVuZ3RoIFN1cHBvcnRlZDoJCQkiKTsKIAkJCWlmIChkaW1tSW5mby0+YnVyc3RMZW5ndGhTdXBwb3J0ZWQgJiAweDAxKQotCQkJCURQIChwcmludGYgKCIxLCAiKSk7CisJCQkJZGVidWcoIjEsICIpOwogCQkJaWYgKGRpbW1JbmZvLT5idXJzdExlbmd0aFN1cHBvcnRlZCAmIDB4MDIpCi0JCQkJRFAgKHByaW50ZiAoIjIsICIpKTsKKwkJCQlkZWJ1ZygiMiwgIik7CiAJCQlpZiAoZGltbUluZm8tPmJ1cnN0TGVuZ3RoU3VwcG9ydGVkICYgMHgwNCkKLQkJCQlEUCAocHJpbnRmICgiNCwgIikpOworCQkJCWRlYnVnKCI0LCAiKTsKIAkJCWlmIChkaW1tSW5mby0+YnVyc3RMZW5ndGhTdXBwb3J0ZWQgJiAweDA4KQotCQkJCURQIChwcmludGYgKCI4LCAiKSk7Ci0JCQlEUCAocHJpbnRmICgiIEJpdCBcbiIpKTsKKwkJCQlkZWJ1ZygiOCwgIik7CisJCQlkZWJ1ZygiIEJpdCBcbiIpOwogI2VuZGlmCiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDE3OgkvKiBOdW1iZXIgT2YgQmFua3MgT24gRWFjaCBEZXZpY2UgKi8KIAkJCWRpbW1JbmZvLT5udW1PZkJhbmtzT25FYWNoRGV2aWNlID0gZGF0YVtpXTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk51bWJlciBPZiBCYW5rcyBPbiBFYWNoIENoaXA6CQkJJWRcbiIsCi0JCQkgICAgIGRpbW1JbmZvLT5udW1PZkJhbmtzT25FYWNoRGV2aWNlKSk7CisJCQlkZWJ1ZygiTnVtYmVyIE9mIEJhbmtzIE9uIEVhY2ggQ2hpcDoJCQklZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPm51bU9mQmFua3NPbkVhY2hEZXZpY2UpOwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTYzMSwzNCArNTk3LDMyIEBACiAJCQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCQlkaW1tSW5mby0+c3Vwb3J0ZWRDYXNMYXRlbmNpZXMgPSBkYXRhW2ldOwogI2lmZGVmIERFQlVHCi0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJTdXBvcnRlZCBDYXMgTGF0ZW5jaWVzOiAoQ0wpCQkJIikpOworCQkJZGVidWcoIlN1cG9ydGVkIENhcyBMYXRlbmNpZXM6IChDTCkJCQkiKTsKIAkJCWlmIChkaW1tSW5mby0+bWVtb3J5VHlwZSA9PSAwKSB7CS8qIFNEUkFNICovCiAJCQkJZm9yIChrID0gMDsgayA8PSA3OyBrKyspIHsKIAkJCQkJaWYgKGRpbW1JbmZvLT4KIAkJCQkJICAgIHN1cG9ydGVkQ2FzTGF0ZW5jaWVzICYgKDEgPDwgaykpCi0JCQkJCQlEUCAocHJpbnRmCi0JCQkJCQkgICAgKCIlZCwJCQkiLAotCQkJCQkJICAgICBrICsgMSkpOworCQkJCQkJZGVidWcoIiVkLAkJCSIsCisJCQkJCQkgICAgIGsgKyAxKTsKIAkJCQl9CiAKIAkJCX0gZWxzZSB7CS8qIEREUi1SQU0gKi8KIAogCQkJCWlmIChkaW1tSW5mby0+c3Vwb3J0ZWRDYXNMYXRlbmNpZXMgJiAxKQotCQkJCQlEUCAocHJpbnRmICgiMSwgIikpOworCQkJCQlkZWJ1ZygiMSwgIik7CiAJCQkJaWYgKGRpbW1JbmZvLT5zdXBvcnRlZENhc0xhdGVuY2llcyAmIDIpCi0JCQkJCURQIChwcmludGYgKCIxLjUsICIpKTsKKwkJCQkJZGVidWcoIjEuNSwgIik7CiAJCQkJaWYgKGRpbW1JbmZvLT5zdXBvcnRlZENhc0xhdGVuY2llcyAmIDQpCi0JCQkJCURQIChwcmludGYgKCIyLCAiKSk7CisJCQkJCWRlYnVnKCIyLCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkQ2FzTGF0ZW5jaWVzICYgOCkKLQkJCQkJRFAgKHByaW50ZiAoIjIuNSwgIikpOworCQkJCQlkZWJ1ZygiMi41LCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkQ2FzTGF0ZW5jaWVzICYgMTYpCi0JCQkJCURQIChwcmludGYgKCIzLCAiKSk7CisJCQkJCWRlYnVnKCIzLCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkQ2FzTGF0ZW5jaWVzICYgMzIpCi0JCQkJCURQIChwcmludGYgKCIzLjUsICIpKTsKKwkJCQkJZGVidWcoIjMuNSwgIik7CiAKIAkJCX0KLQkJCURQIChwcmludGYgKCJcbiIpKTsKKwkJCWRlYnVnKCJcbiIpOwogI2VuZGlmCiAJCQkvKiBDYWxjdWxhdGluZyBNQVggQ0FTIGxhdGVuY3kgKi8KIAkJCWZvciAoaiA9IDc7IGogPiAwOyBqLS0pIHsKQEAgLTY3MCw4ICs2MzQsNyBAQAogCQkJCQkJLyogQ0FTIGxhdGVuY3kgMSwgMS41LCAyLCAyLjUsIDMsIDMuNSAqLwogCQkJCQkJc3dpdGNoIChqKSB7CiAJCQkJCQljYXNlIDc6Ci0JCQkJCQkJRFAgKHByaW50ZgotCQkJCQkJCSAgICAoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSKTogCQkJRVJST1IgISEhXG4iKSk7CisJCQkJCQkJZGVidWcoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSKTogCQkJRVJST1IgISEhXG4iKTsKIAkJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJCW1heENsU3VwcG9ydGVkX0REUgogCQkJCQkJCQk9CkBAIC02NzksOCArNjQyLDcgQEAKIAkJCQkJCQloYW5nICgpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSA2OgotCQkJCQkJCURQIChwcmludGYKLQkJCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCUVSUk9SICEhIVxuIikpOworCQkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCUVSUk9SICEhIVxuIik7CiAJCQkJCQkJZGltbUluZm8tPgogCQkJCQkJCQltYXhDbFN1cHBvcnRlZF9ERFIKIAkJCQkJCQkJPQpAQCAtNjg4LDM2ICs2NTAsMzEgQEAKIAkJCQkJCQloYW5nICgpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSA1OgotCQkJCQkJCURQIChwcmludGYKLQkJCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTMuNSBjbGsnc1xuIikpOworCQkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTMuNSBjbGsnc1xuIik7CiAJCQkJCQkJZGltbUluZm8tPgogCQkJCQkJCQltYXhDbFN1cHBvcnRlZF9ERFIKIAkJCQkJCQkJPSBERFJfQ0xfM181OwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSA0OgotCQkJCQkJCURQIChwcmludGYKLQkJCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTMgY2xrJ3MgXG4iKSk7CisJCQkJCQkJZGVidWcoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSKTogCQkJMyBjbGsncyBcbiIpOwogCQkJCQkJCWRpbW1JbmZvLT4KIAkJCQkJCQkJbWF4Q2xTdXBwb3J0ZWRfRERSCiAJCQkJCQkJCT0gRERSX0NMXzM7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQljYXNlIDM6Ci0JCQkJCQkJRFAgKHByaW50ZgotCQkJCQkJCSAgICAoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSKTogCQkJMi41IGNsaydzIFxuIikpOworCQkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTIuNSBjbGsncyBcbiIpOwogCQkJCQkJCWRpbW1JbmZvLT4KIAkJCQkJCQkJbWF4Q2xTdXBwb3J0ZWRfRERSCiAJCQkJCQkJCT0gRERSX0NMXzJfNTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCWNhc2UgMjoKLQkJCQkJCQlEUCAocHJpbnRmCi0JCQkJCQkJICAgICgiTWF4LiBDYXMgTGF0ZW5jaWVzIChERFIpOiAJCQkyIGNsaydzIFxuIikpOworCQkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTIgY2xrJ3MgXG4iKTsKIAkJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJCW1heENsU3VwcG9ydGVkX0REUgogCQkJCQkJCQk9IEREUl9DTF8yOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSAxOgotCQkJCQkJCURQIChwcmludGYKLQkJCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUik6IAkJCTEuNSBjbGsncyBcbiIpKTsKKwkJCQkJCQlkZWJ1ZygiTWF4LiBDYXMgTGF0ZW5jaWVzIChERFIpOiAJCQkxLjUgY2xrJ3MgXG4iKTsKIAkJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJCW1heENsU3VwcG9ydGVkX0REUgogCQkJCQkJCQk9IEREUl9DTF8xXzU7CkBAIC03MzYsMzIgKzY5MywyOSBAQAogCQkJCQkJCWRpbW1JbmZvLT4KIAkJCQkJCQkJbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Sb1AKIAkJCQkJCQkJPSAwOwotCQkJCQkJRFAgKHByaW50ZgotCQkJCQkJICAgICgiTWF4LiBDYXMgTGF0ZW5jaWVzIChERFIgTG9QLlJvUCBOb3RhdGlvbik6CSVkLiVkIFxuIiwKKwkJCQkJCWRlYnVnKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUiBMb1AuUm9QIE5vdGF0aW9uKToJJWQuJWQgXG4iLAogCQkJCQkJICAgICBkaW1tSW5mby0+CiAJCQkJCQkgICAgIG1heENBU2xhdGVuY3lTdXBwb3J0ZWRfTG9QLAogCQkJCQkJICAgICBkaW1tSW5mby0+Ci0JCQkJCQkgICAgIG1heENBU2xhdGVuY3lTdXBwb3J0ZWRfUm9QKSk7CisJCQkJCQkgICAgIG1heENBU2xhdGVuY3lTdXBwb3J0ZWRfUm9QKTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIFNEUkFNOgogCQkJCQkJLyogQ0FTIGxhdGVuY3kgMSwgMiwgMywgNCwgNSwgNiwgNyAqLwogCQkJCQkJZGltbUluZm8tPm1heENsU3VwcG9ydGVkX1NEID0gajsJLyogIENhcyBMYXRlbmN5IEREUi1SQU0gQ29kZWQJCQkqLwotCQkJCQkJRFAgKHByaW50ZgotCQkJCQkJICAgICgiTWF4LiBDYXMgTGF0ZW5jaWVzIChTRCk6ICVkXG4iLAorCQkJCQkJZGVidWcoIk1heC4gQ2FzIExhdGVuY2llcyAoU0QpOiAlZFxuIiwKIAkJCQkJCSAgICAgZGltbUluZm8tPgotCQkJCQkJICAgICBtYXhDbFN1cHBvcnRlZF9TRCkpOworCQkJCQkJICAgICBtYXhDbFN1cHBvcnRlZF9TRCk7CiAJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Mb1AKIAkJCQkJCQk9IGo7CiAJCQkJCQlkaW1tSW5mby0+CiAJCQkJCQkJbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Sb1AKIAkJCQkJCQk9IDA7Ci0JCQkJCQlEUCAocHJpbnRmCi0JCQkJCQkgICAgKCJNYXguIENhcyBMYXRlbmNpZXMgKEREUiBMb1AuUm9QIE5vdGF0aW9uKTogJWQuJWQgXG4iLAorCQkJCQkJZGVidWcoIk1heC4gQ2FzIExhdGVuY2llcyAoRERSIExvUC5Sb1AgTm90YXRpb24pOiAlZC4lZCBcbiIsCiAJCQkJCQkgICAgIGRpbW1JbmZvLT4KIAkJCQkJCSAgICAgbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Mb1AsCiAJCQkJCQkgICAgIGRpbW1JbmZvLT4KLQkJCQkJCSAgICAgbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Sb1ApKTsKKwkJCQkJCSAgICAgbWF4Q0FTbGF0ZW5jeVN1cHBvcnRlZF9Sb1ApOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQkJYnJlYWs7CkBAIC03NzEsNyArNzI1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCQljYXNlIDIxOgkvKiBCdWZmZXJlZCBBZGRyZXNzIEFuZCBDb250cm9sIElucHV0cyAqLwotCQkJRFAgKHByaW50ZiAoIlxuTW9kdWwgQXR0cmlidXRlcyAoU1BEIEJ5dGUgMjEpOiBcbiIpKTsKKwkJCWRlYnVnKCJcbk1vZHVsIEF0dHJpYnV0ZXMgKFNQRCBCeXRlIDIxKTogXG4iKTsKIAkJCWRpbW1JbmZvLT5idWZmZXJlZEFkZHJBbmRDb250cm9sSW5wdXRzID0KIAkJCQlkYXRhW2ldICYgQklUMDsKIAkJCWRpbW1JbmZvLT5yZWdpc3RlcmVkQWRkckFuZENvbnRyb2xJbnB1dHMgPQpAQCAtNzg0LDYyICs3MzgsNDcgQEAKIAkJCQkoZGF0YVtpXSAmIEJJVDUpID4+IDU7CiAJCQlkaW1tSW5mby0+cmVkdW5kYW50Um93QWRkcmVzc2luZyA9CiAJCQkJKGRhdGFbaV0gJiBCSVQ2KSA+PiA2OwotI2lmZGVmIERFQlVHCisKIAkJCWlmIChkaW1tSW5mby0+YnVmZmVyZWRBZGRyQW5kQ29udHJvbElucHV0cyA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBCdWZmZXJlZCBBZGRyZXNzL0NvbnRyb2wgSW5wdXQ6CQlZZXMgXG4iKSk7CisJCQkJZGVidWcoIiAtIEJ1ZmZlcmVkIEFkZHJlc3MvQ29udHJvbCBJbnB1dDoJCVllcyBcbiIpOwogCQkJZWxzZQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBCdWZmZXJlZCBBZGRyZXNzL0NvbnRyb2wgSW5wdXQ6CQlObyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gQnVmZmVyZWQgQWRkcmVzcy9Db250cm9sIElucHV0OgkJTm8gXG4iKTsKIAogCQkJaWYgKGRpbW1JbmZvLT5yZWdpc3RlcmVkQWRkckFuZENvbnRyb2xJbnB1dHMgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gUmVnaXN0ZXJlZCBBZGRyZXNzL0NvbnRyb2wgSW5wdXQ6CQlZZXMgXG4iKSk7CisJCQkJZGVidWcoIiAtIFJlZ2lzdGVyZWQgQWRkcmVzcy9Db250cm9sIElucHV0OgkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIFJlZ2lzdGVyZWQgQWRkcmVzcy9Db250cm9sIElucHV0OgkJTm8gXG4iKSk7CisJCQkJZGVidWcoIiAtIFJlZ2lzdGVyZWQgQWRkcmVzcy9Db250cm9sIElucHV0OgkJTm8gXG4iKTsKIAogCQkJaWYgKGRpbW1JbmZvLT5vbkNhcmRQTEwgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gT24tQ2FyZCBQTEwgKGNsb2NrKToJCQkJWWVzIFxuIikpOworCQkJCWRlYnVnKCIgLSBPbi1DYXJkIFBMTCAoY2xvY2spOgkJCQlZZXMgXG4iKTsKIAkJCWVsc2UKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gT24tQ2FyZCBQTEwgKGNsb2NrKToJCQkJTm8gXG4iKSk7CisJCQkJZGVidWcoIiAtIE9uLUNhcmQgUExMIChjbG9jayk6CQkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+YnVmZmVyZWREUU1CaW5wdXRzID09IDEpCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIEJ1ZmZlcmQgRFFNQiBJbnB1dHM6CQkJCVllcyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gQnVmZmVyZCBEUU1CIElucHV0czoJCQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIEJ1ZmZlcmQgRFFNQiBJbnB1dHM6CQkJCU5vIFxuIikpOworCQkJCWRlYnVnKCIgLSBCdWZmZXJkIERRTUIgSW5wdXRzOgkJCQlObyBcbiIpOwogCiAJCQlpZiAoZGltbUluZm8tPnJlZ2lzdGVyZWREUU1CaW5wdXRzID09IDEpCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIFJlZ2lzdGVyZWQgRFFNQiBJbnB1dHM6CQkJWWVzIFxuIikpOworCQkJCWRlYnVnKCIgLSBSZWdpc3RlcmVkIERRTUIgSW5wdXRzOgkJCVllcyBcbiIpOwogCQkJZWxzZQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBSZWdpc3RlcmVkIERRTUIgSW5wdXRzOgkJCU5vIFxuIikpOworCQkJCWRlYnVnKCIgLSBSZWdpc3RlcmVkIERRTUIgSW5wdXRzOgkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+ZGlmZmVyZW50aWFsQ2xvY2tJbnB1dCA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBEaWZmZXJlbnRpYWwgQ2xvY2sgSW5wdXQ6CQkJWWVzIFxuIikpOworCQkJCWRlYnVnKCIgLSBEaWZmZXJlbnRpYWwgQ2xvY2sgSW5wdXQ6CQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIERpZmZlcmVudGlhbCBDbG9jayBJbnB1dDoJCQlObyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gRGlmZmVyZW50aWFsIENsb2NrIElucHV0OgkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+cmVkdW5kYW50Um93QWRkcmVzc2luZyA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSByZWR1bmRhbnQgUm93IEFkZHJlc3Npbmc6CQkJWWVzIFxuIikpOworCQkJCWRlYnVnKCIgLSByZWR1bmRhbnQgUm93IEFkZHJlc3Npbmc6CQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIHJlZHVuZGFudCBSb3cgQWRkcmVzc2luZzoJCQlObyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gcmVkdW5kYW50IFJvdyBBZGRyZXNzaW5nOgkJCU5vIFxuIik7CiAKLSNlbmRpZgogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAkJY2FzZSAyMjoJLyogU3Vwb3J0ZWQgQXV0b1ByZUNoYXJnZSAqLwotCQkJRFAgKHByaW50ZiAoIlxuTW9kdWwgQXR0cmlidXRlcyAoU1BEIEJ5dGUgMjIpOiBcbiIpKTsKKwkJCWRlYnVnKCJcbk1vZHVsIEF0dHJpYnV0ZXMgKFNQRCBCeXRlIDIyKTogXG4iKTsKIAkJCWRpbW1JbmZvLT5zdXBvcnRlZEVhcmx5UmFzUHJlQ2hhcmdlID0gZGF0YVtpXSAmIEJJVDA7CiAJCQlkaW1tSW5mby0+c3Vwb3J0ZWRBdXRvUHJlQ2hhcmdlID0KIAkJCQkoZGF0YVtpXSAmIEJJVDEpID4+IDE7CkBAIC04NTEsNTAgKzc5MCwzNyBAQAogCQkJCShkYXRhW2ldICYgQklUNCkgPj4gNDsKIAkJCWRpbW1JbmZvLT5zdXBvcnRlZDVQZXJjZW50VXBwZXJWQ0MgPQogCQkJCShkYXRhW2ldICYgQklUNSkgPj4gNTsKLSNpZmRlZiBERUJVRworCiAJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkRWFybHlSYXNQcmVDaGFyZ2UgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gRWFybHkgUmFzIFByZWNoYXJnZToJCQlZZXMgXG4iKSk7CisJCQkJZGVidWcoIiAtIEVhcmx5IFJhcyBQcmVjaGFyZ2U6CQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtICBFYXJseSBSYXMgUHJlY2hhcmdlOgkJCU5vIFxuIikpOworCQkJCWRlYnVnKCIgLSAgRWFybHkgUmFzIFByZWNoYXJnZToJCQlObyBcbiIpOwogCiAJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkQXV0b1ByZUNoYXJnZSA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBBdXRvUHJlQ2hhcmdlOgkJCQlZZXMgXG4iKSk7CisJCQkJZGVidWcoIiAtIEF1dG9QcmVDaGFyZ2U6CQkJCVllcyBcbiIpOwogCQkJZWxzZQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSAgQXV0b1ByZUNoYXJnZToJCQkJTm8gXG4iKSk7CisJCQkJZGVidWcoIiAtICBBdXRvUHJlQ2hhcmdlOgkJCQlObyBcbiIpOwogCiAJCQlpZiAoZGltbUluZm8tPnN1cG9ydGVkUHJlQ2hhcmdlQWxsID09IDEpCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtIFByZWNoYXJnZSBBbGw6CQkJCVllcyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gUHJlY2hhcmdlIEFsbDoJCQkJWWVzIFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtICBQcmVjaGFyZ2UgQWxsOgkJCQlObyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gIFByZWNoYXJnZSBBbGw6CQkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+c3Vwb3J0ZWRXcml0ZTFSZWFkQnVyc3QgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gV3JpdGUgMS9SZWFkQnVyc3Q6CQkJCVllcyBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gV3JpdGUgMS9SZWFkQnVyc3Q6CQkJCVllcyBcbiIpOwogCQkJZWxzZQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSAgV3JpdGUgMS9SZWFkQnVyc3Q6CQkJCU5vIFxuIikpOworCQkJCWRlYnVnKCIgLSAgV3JpdGUgMS9SZWFkQnVyc3Q6CQkJCU5vIFxuIik7CiAKIAkJCWlmIChkaW1tSW5mby0+c3Vwb3J0ZWQ1UGVyY2VudExvd1ZDQyA9PSAxKQotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCIgLSBsb3dlciBWQ0MgdG9sZXJhbmNlOgkJCTUgUGVyY2VudCBcbiIpKTsKKwkJCQlkZWJ1ZygiIC0gbG93ZXIgVkNDIHRvbGVyYW5jZToJCQk1IFBlcmNlbnQgXG4iKTsKIAkJCWVsc2UKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiCS0gbG93ZXIgVkNDIHRvbGVyYW5jZToJCQkxMCBQZXJjZW50IFxuIikpOworCQkJCWRlYnVnKCIJLSBsb3dlciBWQ0MgdG9sZXJhbmNlOgkJCTEwIFBlcmNlbnQgXG4iKTsKIAogCQkJaWYgKGRpbW1JbmZvLT5zdXBvcnRlZDVQZXJjZW50VXBwZXJWQ0MgPT0gMSkKLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiIC0gdXBwZXIgVkNDIHRvbGVyYW5jZToJCQk1IFBlcmNlbnQgXG4iKSk7CisJCQkJZGVidWcoIiAtIHVwcGVyIFZDQyB0b2xlcmFuY2U6CQkJNSBQZXJjZW50IFxuIik7CiAJCQllbHNlCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIiAtICB1cHBlciBWQ0MgdG9sZXJhbmNlOgkJCTEwIFBlcmNlbnQgXG4iKSk7CisJCQkJZGVidWcoIiAtICB1cHBlciBWQ0MgdG9sZXJhbmNlOgkJCTEwIFBlcmNlbnQgXG4iKTsKIAotI2VuZGlmCiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtOTExLDkgKzgzNyw4IEBACiAJCQkJbGVmdE9mUG9pbnQ7CiAJCQlkaW1tSW5mby0+bWluaW11bUN5Y2xlVGltZUF0TWF4Q2FzTGF0YW5jeU1pbnVzMV9Sb1AgPQogCQkJCXJpZ2h0T2ZQb2ludDsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1pbmltdW0gQ3ljbGUgVGltZSBBdCAybmQgaGlnaGVzdCBDYXNMYXRhbmN5ICgwID0gTm90IHN1cHBvcnRlZCk6ICVkLiVkIFtuc11cbiIsCi0JCQkgICAgIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpKTsKKwkJCWRlYnVnKCJNaW5pbXVtIEN5Y2xlIFRpbWUgQXQgMm5kIGhpZ2hlc3QgQ2FzTGF0YW5jeSAoMCA9IE5vdCBzdXBwb3J0ZWQpOiAlZC4lZCBbbnNdXG4iLAorCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCS8qZGltbUluZm8tPm1pbmltdW1DeWNsZVRpbWVBdE1heENhc0xhdGFuY3kgKi8KIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtOTI3LDkgKzg1Miw4IEBACiAJCQlyaWdodE9mUG9pbnQgPSB0aW1lX3RtcCAlIGRpdjsKIAkJCWRpbW1JbmZvLT5jbG9ja1RvRGF0YU91dE1pbnVzMV9Mb1AgPSBsZWZ0T2ZQb2ludDsKIAkJCWRpbW1JbmZvLT5jbG9ja1RvRGF0YU91dE1pbnVzMV9Sb1AgPSByaWdodE9mUG9pbnQ7Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJDbG9jayBUbyBEYXRhIE91dCAoMm5kIENMIHZhbHVlKTogCQklZC4lMmQgW25zXVxuIiwKLQkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCkpOworCQkJZGVidWcoIkNsb2NrIFRvIERhdGEgT3V0ICgybmQgQ0wgdmFsdWUpOiAJCSVkLiUyZCBbbnNdXG4iLAorCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NDYsOSArODcwLDggQEAKIAkJCQlsZWZ0T2ZQb2ludDsKIAkJCWRpbW1JbmZvLT5taW5pbXVtQ3ljbGVUaW1lQXRNYXhDYXNMYXRhbmN5TWludXMyX1JvUCA9CiAJCQkJcmlnaHRPZlBvaW50OwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiTWluaW11bSBDeWNsZSBUaW1lIEF0IDNyZCBoaWdoZXN0IENhc0xhdGFuY3kgKDAgPSBOb3Qgc3VwcG9ydGVkKTogJWQuJWQgW25zXVxuIiwKLQkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCkpOworCQkJZGVidWcoIk1pbmltdW0gQ3ljbGUgVGltZSBBdCAzcmQgaGlnaGVzdCBDYXNMYXRhbmN5ICgwID0gTm90IHN1cHBvcnRlZCk6ICVkLiVkIFtuc11cbiIsCisJCQkgICAgIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpOwogCQkJLypkaW1tSW5mby0+bWluaW11bUN5Y2xlVGltZUF0TWF4Q2FzTGF0YW5jeSAqLwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC05NjIsOSArODg1LDggQEAKIAkJCXJpZ2h0T2ZQb2ludCA9IHRpbWVfdG1wICUgZGl2OwogCQkJZGltbUluZm8tPmNsb2NrVG9EYXRhT3V0TWludXMyX0xvUCA9IGxlZnRPZlBvaW50OwogCQkJZGltbUluZm8tPmNsb2NrVG9EYXRhT3V0TWludXMyX1JvUCA9IHJpZ2h0T2ZQb2ludDsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIkNsb2NrIFRvIERhdGEgT3V0ICgzcmQgQ0wgdmFsdWUpOiAJCSVkLiUyZCBbbnNdXG4iLAotCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KSk7CisJCQlkZWJ1ZygiQ2xvY2sgVG8gRGF0YSBPdXQgKDNyZCBDTCB2YWx1ZSk6IAkJJWQuJTJkIFtuc11cbiIsCisJCQkgICAgIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpOwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTk4MSwxMiArOTAzLDEwIEBACiAJCQl0cnBfY2xvY2tzID0KIAkJCQkoZGltbUluZm8tPm1pblJvd1ByZWNoYXJnZVRpbWUgKwogCQkJCSAodG1lbWNsayAtIDEpKSAvIHRtZW1jbGs7Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCIqKiogMSBjbG9jayBjeWNsZSA9ICVsZCAgMTBwcyBpbnRlcnZhbGxzID0gJWxkLiVsZCBucyoqKipcbiIsCi0JCQkgICAgIHRtZW1jbGssIHRtZW1jbGsgLyAxMDAsIHRtZW1jbGsgJSAxMDApKTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1pbmltdW0gUm93IFByZWNoYXJnZSBUaW1lIFtuc106CQklZC4lMmQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAotCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50LCB0cnBfY2xvY2tzKSk7CisJCQlkZWJ1ZygiKioqIDEgY2xvY2sgY3ljbGUgPSAlbGQgIDEwcHMgaW50ZXJ2YWxscyA9ICVsZC4lbGQgbnMqKioqXG4iLAorCQkJICAgICB0bWVtY2xrLCB0bWVtY2xrIC8gMTAwLCB0bWVtY2xrICUgMTAwKTsKKwkJCWRlYnVnKCJNaW5pbXVtIFJvdyBQcmVjaGFyZ2UgVGltZSBbbnNdOgkJJWQuJTJkID0gaW4gQ2xrIGN5Y2xlcyAlZFxuIiwKKwkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCwgdHJwX2Nsb2Nrcyk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTAwMCwxMiArOTIwLDggQEAKIAkJCXJpZ2h0T2ZQb2ludCA9IChkYXRhW2ldICYgbWFza1JpZ2h0T2ZQb2ludCkgKiAyNTsKIAogCQkJZGltbUluZm8tPm1pblJvd0FjdGl2ZVJvd0FjdGl2ZURlbGF5ID0gKChsZWZ0T2ZQb2ludCAqIDEwMCkgKyByaWdodE9mUG9pbnQpOwkvKiBtZWFzdXJlZCBpbiAxMDBucyBJbnRlcnZhbHMgKi8KLQkJCXRycmRfY2xvY2tzID0KLQkJCQkoZGltbUluZm8tPm1pblJvd0FjdGl2ZVJvd0FjdGl2ZURlbGF5ICsKLQkJCQkgKHRtZW1jbGsgLSAxKSkgLyB0bWVtY2xrOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiTWluaW11bSBSb3cgQWN0aXZlIC1Uby0gUm93IEFjdGl2ZSBEZWxheSBbbnNdOgklZC4lMmQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAotCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50LCB0cnBfY2xvY2tzKSk7CisJCQlkZWJ1ZygiTWluaW11bSBSb3cgQWN0aXZlIC1Uby0gUm93IEFjdGl2ZSBEZWxheSBbbnNdOgklZC4lMmQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAorCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50LCB0cnBfY2xvY2tzKTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMDE5LDEyICs5MzUsOCBAQAogCQkJcmlnaHRPZlBvaW50ID0gKGRhdGFbaV0gJiBtYXNrUmlnaHRPZlBvaW50KSAqIDI1OwogCiAJCQlkaW1tSW5mby0+bWluUm93QWN0aXZlUm93QWN0aXZlRGVsYXkgPSAoKGxlZnRPZlBvaW50ICogMTAwKSArIHJpZ2h0T2ZQb2ludCk7CS8qIG1lYXN1cmVkIGluIDEwMG5zIEludGVydmFscyAqLwotCQkJdHJjZF9jbG9ja3MgPQotCQkJCShkaW1tSW5mby0+bWluUm93QWN0aXZlUm93QWN0aXZlRGVsYXkgKwotCQkJCSAodG1lbWNsayAtIDEpKSAvIHRtZW1jbGs7Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJNaW5pbXVtIFJhcy1Uby1DYXMgRGVsYXkgW25zXToJCQklZC4lMmQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAotCQkJICAgICBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50LCB0cnBfY2xvY2tzKSk7CisJCQlkZWJ1ZygiTWluaW11bSBSYXMtVG8tQ2FzIERlbGF5IFtuc106CQkJJWQuJTJkID0gaW4gQ2xrIGN5Y2xlcyAlZFxuIiwKKwkJCSAgICAgbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCwgdHJwX2Nsb2Nrcyk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTAzMyw0MSArOTQ1LDM4IEBACiAJCQl0cmFzX2Nsb2NrcyA9CiAJCQkJKE5TdG8xMFBTIChkYXRhW2ldKSArCiAJCQkJICh0bWVtY2xrIC0gMSkpIC8gdG1lbWNsazsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1pbmltdW0gUmFzIFB1bHNlIFdpZHRoIFtuc106CQkJJWQgPSBpbiBDbGsgY3ljbGVzICVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+bWluUmFzUHVsc2VXaWR0aCwgdHJhc19jbG9ja3MpKTsKKwkJCWRlYnVnKCJNaW5pbXVtIFJhcyBQdWxzZSBXaWR0aCBbbnNdOgkJCSVkID0gaW4gQ2xrIGN5Y2xlcyAlZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPm1pblJhc1B1bHNlV2lkdGgsIHRyYXNfY2xvY2tzKTsKIAogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIAkJY2FzZSAzMToJLyogTW9kdWxlIEJhbmsgRGVuc2l0eSAqLwogCQkJZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ID0gZGF0YVtpXTsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1vZHVsZSBCYW5rIERlbnNpdHk6CQkJCSVkXG4iLAotCQkJICAgICBkaW1tSW5mby0+bW9kdWxlQmFua0RlbnNpdHkpKTsKKwkJCWRlYnVnKCJNb2R1bGUgQmFuayBEZW5zaXR5OgkJCQklZFxuIiwKKwkJCSAgICAgZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5KTsKICNpZmRlZiBERUJVRwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiKioqIE9mZmVyZWQgRGVuc2l0aWVzIChtb3JlIHRoYW4gMSA9IE11bHRpc2l6ZS1Nb2R1bGUpOiAiKSk7CisJCQlkZWJ1ZygiKioqIE9mZmVyZWQgRGVuc2l0aWVzIChtb3JlIHRoYW4gMSA9IE11bHRpc2l6ZS1Nb2R1bGUpOiAiKTsKIAkJCXsKIAkJCQlpZiAoZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ICYgMSkKLQkJCQkJRFAgKHByaW50ZiAoIjRNQiwgIikpOworCQkJCQlkZWJ1ZygiNE1CLCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ICYgMikKLQkJCQkJRFAgKHByaW50ZiAoIjhNQiwgIikpOworCQkJCQlkZWJ1ZygiOE1CLCAiKTsKIAkJCQlpZiAoZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ICYgNCkKLQkJCQkJRFAgKHByaW50ZiAoIjE2TUIsICIpKTsKKwkJCQkJZGVidWcoIjE2TUIsICIpOwogCQkJCWlmIChkaW1tSW5mby0+bW9kdWxlQmFua0RlbnNpdHkgJiA4KQotCQkJCQlEUCAocHJpbnRmICgiMzJNQiwgIikpOworCQkJCQlkZWJ1ZygiMzJNQiwgIik7CiAJCQkJaWYgKGRpbW1JbmZvLT5tb2R1bGVCYW5rRGVuc2l0eSAmIDE2KQotCQkJCQlEUCAocHJpbnRmICgiNjRNQiwgIikpOworCQkJCQlkZWJ1ZygiNjRNQiwgIik7CiAJCQkJaWYgKGRpbW1JbmZvLT5tb2R1bGVCYW5rRGVuc2l0eSAmIDMyKQotCQkJCQlEUCAocHJpbnRmICgiMTI4TUIsICIpKTsKKwkJCQkJZGVidWcoIjEyOE1CLCAiKTsKIAkJCQlpZiAoKGRpbW1JbmZvLT5tb2R1bGVCYW5rRGVuc2l0eSAmIDY0KQogCQkJCSAgICB8fCAoZGltbUluZm8tPm1vZHVsZUJhbmtEZW5zaXR5ICYgMTI4KSkgewotCQkJCQlEUCAocHJpbnRmICgiRVJST1IsICIpKTsKKwkJCQkJZGVidWcoIkVSUk9SLCAiKTsKIAkJCQkJaGFuZyAoKTsKIAkJCQl9CiAJCQl9Ci0JCQlEUCAocHJpbnRmICgiXG4iKSk7CisJCQlkZWJ1ZygiXG4iKTsKICNlbmRpZgogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMDkzLDkgKzEwMDIsOCBAQAogCQkJfQogCQkJZGltbUluZm8tPmFkZHJBbmRDb21tYW5kU2V0dXBUaW1lID0KIAkJCQkobGVmdE9mUG9pbnQgKiAxMDAgKyByaWdodE9mUG9pbnQpICogc2lnbjsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIkFkZHJlc3MgQW5kIENvbW1hbmQgU2V0dXAgVGltZSBbbnNdOgkJJWQuJWRcbiIsCi0JCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KSk7CisJCQlkZWJ1ZygiQWRkcmVzcyBBbmQgQ29tbWFuZCBTZXR1cCBUaW1lIFtuc106CQklZC4lZFxuIiwKKwkJCSAgICAgc2lnbiAqIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpOwogCQkJYnJlYWs7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTExMjAsOSArMTAyOCw4IEBACiAJCQl9CiAJCQlkaW1tSW5mby0+YWRkckFuZENvbW1hbmRIb2xkVGltZSA9CiAJCQkJKGxlZnRPZlBvaW50ICogMTAwICsgcmlnaHRPZlBvaW50KSAqIHNpZ247Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJBZGRyZXNzIEFuZCBDb21tYW5kIEhvbGQgVGltZSBbbnNdOgkJJWQuJWRcbiIsCi0JCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KSk7CisJCQlkZWJ1ZygiQWRkcmVzcyBBbmQgQ29tbWFuZCBIb2xkIFRpbWUgW25zXToJCSVkLiVkXG4iLAorCQkJICAgICBzaWduICogbGVmdE9mUG9pbnQsIHJpZ2h0T2ZQb2ludCk7CiAJCQlicmVhazsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTE0Nyw5ICsxMDU0LDggQEAKIAkJCX0KIAkJCWRpbW1JbmZvLT5kYXRhSW5wdXRTZXR1cFRpbWUgPQogCQkJCShsZWZ0T2ZQb2ludCAqIDEwMCArIHJpZ2h0T2ZQb2ludCkgKiBzaWduOwotCQkJRFAgKHByaW50ZgotCQkJICAgICgiRGF0YSBJbnB1dCBTZXR1cCBUaW1lIFtuc106CQkJJWQuJWRcbiIsCi0JCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KSk7CisJCQlkZWJ1ZygiRGF0YSBJbnB1dCBTZXR1cCBUaW1lIFtuc106CQkJJWQuJWRcbiIsCisJCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTc0LDkgKzEwODAsOCBAQAogCQkJfQogCQkJZGltbUluZm8tPmRhdGFJbnB1dEhvbGRUaW1lID0KIAkJCQkobGVmdE9mUG9pbnQgKiAxMDAgKyByaWdodE9mUG9pbnQpICogc2lnbjsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIkRhdGEgSW5wdXQgSG9sZCBUaW1lIFtuc106CQkJJWQuJWRcblxuIiwKLQkJCSAgICAgc2lnbiAqIGxlZnRPZlBvaW50LCByaWdodE9mUG9pbnQpKTsKKwkJCWRlYnVnKCJEYXRhIElucHV0IEhvbGQgVGltZSBbbnNdOgkJCSVkLiVkXG5cbiIsCisJCQkgICAgIHNpZ24gKiBsZWZ0T2ZQb2ludCwgcmlnaHRPZlBvaW50KTsKIAkJCWJyZWFrOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCQl9CkBAIC0xMjEzLDcgKzExMTgsNyBAQAogCXRtcCAqPSBkaW1tSW5mby0+c2RyYW1XaWR0aDsKIAl0bXAgPSB0bXAgPj4gMjQ7CS8qIGRpdiBieSAweDQwMDAwMDAgKDY0TSkJKi8KIAlkaW1tSW5mby0+ZHJiX3NpemUgPSAodWNoYXIpIHRtcDsKLQlEUCAocHJpbnRmICgiTW9kdWxlIERSQiBzaXplIChuKjY0TWJpdCk6ICVkXG4iLCBkaW1tSW5mby0+ZHJiX3NpemUpKTsKKwlkZWJ1ZygiTW9kdWxlIERSQiBzaXplIChuKjY0TWJpdCk6ICVkXG4iLCBkaW1tSW5mby0+ZHJiX3NpemUpOwogCiAJLyogdHJ5IGEgQ0FTIGxhdGVuY3kgb2YgMyBmaXJzdC4uLiAqLwogCkBAIC0xMjM2LDExICsxMTQxLDExIEBACiAJCQljYWxfdmFsID0gNDsKIAl9CiAKLQlEUCAocHJpbnRmICgiY2FsX3ZhbCA9ICVkXG4iLCBjYWxfdmFsICogNSkpOworCWRlYnVnKCJjYWxfdmFsID0gJWRcbiIsIGNhbF92YWwgKiA1KTsKIAogCS8qIGJ1bW1lciwgZGlkJ3Qgd29yay4uLiAqLwogCWlmIChjYWxfdmFsID09IDApIHsKLQkJRFAgKHByaW50ZiAoIkNvdWxkbid0IGZpbmQgYSBnb29kIENBUyBsYXRlbmN5XG4iKSk7CisJCWRlYnVnKCJDb3VsZG4ndCBmaW5kIGEgZ29vZCBDQVMgbGF0ZW5jeVxuIik7CiAJCWhhbmcgKCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEyNjcsODEgKzExNzIsNzQgQEAKIAogCS8qIFByb2dyYW0gdGhlIEdUIHdpdGggdGhlIGRpc2NvdmVyZWQgZGF0YSAqLwogCWlmIChpbmZvLT5yZWdpc3RlcmVkQWRkckFuZENvbnRyb2xJbnB1dHMgPT0gdHJ1ZSkKLQkJRFAgKHByaW50ZgotCQkgICAgKCJNb2R1bGUgaXMgcmVnaXN0ZXJlZCwgYnV0IHdlIGRvIG5vdCBzdXBwb3J0IHJlZ2lzdGVyZWQgTW9kdWxlcyAhISFcbiIpKTsKKwkJZGVidWcoIk1vZHVsZSBpcyByZWdpc3RlcmVkLCBidXQgd2UgZG8gbm90IHN1cHBvcnQgcmVnaXN0ZXJlZCBNb2R1bGVzICEhIVxuIik7CiAKIAkvKiBkZWxheSBsaW5lICovCiAJc2V0X2RmY2RsSW5pdCAoKTsJLyogbWF5IGJlIGl0cyBub3QgbmVlZGVkICovCi0JRFAgKHByaW50ZiAoIkRlbGF5IGxpbmUgc2V0IGRvbmVcbiIpKTsKKwlkZWJ1ZygiRGVsYXkgbGluZSBzZXQgZG9uZVxuIik7CiAKIAkvKiBzZXQgU0RSQU0gbW9kZSBOT1AgKi8gLyogVG9fZG8gY2hlY2sgaXQgKi8KIAlHVF9SRUdfV1JJVEUgKFNEUkFNX09QRVJBVElPTiwgMHg1KTsKIAl3aGlsZSAoR1RSRUdSRUFEIChTRFJBTV9PUEVSQVRJT04pICE9IDApIHsKLQkJRFAgKHByaW50ZgotCQkgICAgKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxODogTW9kdWxlIHN0aWxsIGJ1c3kgLi4uIHBsZWFzZSB3YWl0Li4uICoqKlxuIikpOworCQlkZWJ1ZygiXG4qKiogU0RSQU1fT1BFUkFUSU9OIDE0MTg6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpOwogCX0KIAogI2lmZGVmIENPTkZJR19NVjY0MzYwX0VDQwogCWlmICgoaW5mby0+ZXJyb3JDaGVja1R5cGUgPT0gMHgyKSAmJiAoQ1BDSTc1MF9FQ0NfVEVTVCkpIHsKIAkJLyogRFJBTSBoYXMgRUNDLCBzbyB0dXJuIGl0IG9uICovCiAJCXNkcmFtX2NvbmZpZ19yZWcgfD0gQklUMTg7Ci0JCURQKHByaW50ZigiRW5hYmxpbmcgRUNDXG4iKSk7CisJCWRlYnVnKCJFbmFibGluZyBFQ0NcbiIpOwogCX0KICNlbmRpZiAvKiBvZiBpZmRlZiBDT05GSUdfTVY2NDM2MF9FQ0MgKi8KIAogCS8qIFNEUkFNIGNvbmZpZ3VyYXRpb24gKi8KIAlHVF9SRUdfV1JJVEUoU0RSQU1fQ09ORklHLCBzZHJhbV9jb25maWdfcmVnKTsKLQlEUCAocHJpbnRmICgic2RyYW1fY29uZiAweDE0MDA6ICUwOHhcbiIsIEdUUkVHUkVBRCAoU0RSQU1fQ09ORklHKSkpOworCWRlYnVnKCJzZHJhbV9jb25mIDB4MTQwMDogJTA4eFxuIiwgR1RSRUdSRUFEIChTRFJBTV9DT05GSUcpKTsKIAogCS8qIFNEUkFNIG9wZW4gcGFnZXMgY29udHJvbGwga2VlcCBvcGVuIGFzIG11Y2ggYXMgSSBjYW4gKi8KIAlHVF9SRUdfV1JJVEUgKFNEUkFNX09QRU5fUEFHRVNfQ09OVFJPTCwgMHgwKTsKLQlEUCAocHJpbnRmCi0JICAgICgic2RyYW1fb3Blbl9wYWdlc19jb250cm9sbCAweDE0MTQ6ICUwOHhcbiIsCi0JICAgICBHVFJFR1JFQUQgKFNEUkFNX09QRU5fUEFHRVNfQ09OVFJPTCkpKTsKKwlkZWJ1Zygic2RyYW1fb3Blbl9wYWdlc19jb250cm9sbCAweDE0MTQ6ICUwOHhcbiIsCisJICAgICBHVFJFR1JFQUQgKFNEUkFNX09QRU5fUEFHRVNfQ09OVFJPTCkpOwogCiAKIAkvKiBTRFJBTSBEX1VOSVRfQ09OVFJPTF9MT1cgMHgxNDA0ICovCiAJdG1wID0gKEdUUkVHUkVBRCAoRF9VTklUX0NPTlRST0xfTE9XKSAmIDB4MDEpOwkvKiBDbG9jayBEb21haW4gU3luYyBmcm9tIHBvd2VyIG9uIHJlc2V0ICovCiAJaWYgKHRtcCA9PSAwKQotCQlEUCAocHJpbnRmICgiQ29yZSBTaWduYWxzIGFyZSBzeW5jIChieSBIVy1TZXR0aW5nKSEhIVxuIikpOworCQlkZWJ1ZygiQ29yZSBTaWduYWxzIGFyZSBzeW5jIChieSBIVy1TZXR0aW5nKSEhIVxuIik7CiAJZWxzZQotCQlEUCAocHJpbnRmCi0JCSAgICAoIkNvcmUgU2lnbmFscyBzeW5jcy4gYXJlIGJ5cGFzc2VkIChieSBIVy1TZXR0aW5nKSEhIVxuIikpOworCQlkZWJ1ZygiQ29yZSBTaWduYWxzIHN5bmNzLiBhcmUgYnlwYXNzZWQgKGJ5IEhXLVNldHRpbmcpISEhXG4iKTsKIAogCS8qIFNEUkFNIHNldCBDQVMgTGVudGVuY3kgYWNjb3JkaW5nIHRvIFNQRCBpbmZvcm1hdGlvbiAqLwogCXN3aXRjaCAoaW5mby0+bWVtb3J5VHlwZSkgewogCWNhc2UgU0RSQU06Ci0JCURQIChwcmludGYgKCIjIyMgU0QtUkFNIG5vdCBzdXBwb3J0ZWQgeWV0ICEhIVxuIikpOworCQlkZWJ1ZygiIyMjIFNELVJBTSBub3Qgc3VwcG9ydGVkIHlldCAhISFcbiIpOwogCQloYW5nICgpOwogCQkvKiBUb0RvIGZpbGwgU0QtUkFNIGlmIG5lZWRlZCAhISEhISAqLwogCQlicmVhazsKIAogCWNhc2UgRERSOgotCQlEUCAocHJpbnRmICgiIyMjIFNFVC1DTCBmb3IgRERSLVJBTVxuIikpOworCQlkZWJ1ZygiIyMjIFNFVC1DTCBmb3IgRERSLVJBTVxuIik7CiAKIAkJc3dpdGNoIChpbmZvLT5tYXhDbFN1cHBvcnRlZF9ERFIpIHsKIAkJY2FzZSBERFJfQ0xfMzoKIAkJCXRtcF9kdW5pdF9jb250cm9sX2xvdyA9IDB4M2MwMDAwMDA7CS8qIFJlYWQtRGF0YSBzYW1wbGVkIG9uIGZhbGxpbmcgZWRnZSBvZiBDbGsgKi8KIAkJCXRtcF9zZHJhbV9tb2RlID0gMHgzMjsJLyogQ0w9MyBCdXJzdGxlbmd0aCA9IDQgKi8KLQkJCURQIChwcmludGYKLQkJCSAgICAoIk1heC4gQ0wgaXMgMyBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAotCQkJICAgICB0bXBfc2RyYW1fbW9kZSwgdG1wX2R1bml0X2NvbnRyb2xfbG93KSk7CisJCQlkZWJ1ZygiTWF4LiBDTCBpcyAzIENMS3MgMHgxNDFjPSAlMDhseCwgMHgxNDA0ID0gJTA4bHhcbiIsCisJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBERFJfQ0xfMl81OgogCQkJaWYgKHRtcCA9PSAxKSB7CS8qIGNsb2NrcyBzeW5jICovCiAJCQkJdG1wX2R1bml0X2NvbnRyb2xfbG93ID0gMHgyNDAwMDAwMDsJLyogUmVhZC1EYXRhIHNhbXBsZWQgb24gZmFsbGluZyBlZGdlIG9mIENsayAqLwogCQkJCXRtcF9zZHJhbV9tb2RlID0gMHg2MjsJLyogQ0w9Miw1IEJ1cnN0bGVuZ3RoID0gNCAqLwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNYXguIENMIGlzIDIsNXMgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKLQkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpKTsKKwkJCQlkZWJ1ZygiTWF4LiBDTCBpcyAyLDVzIENMS3MgMHgxNDFjPSAlMDhseCwgMHgxNDA0ID0gJTA4bHhcbiIsCisJCQkJICAgICB0bXBfc2RyYW1fbW9kZSwgdG1wX2R1bml0X2NvbnRyb2xfbG93KTsKIAkJCX0gZWxzZSB7CS8qIGNsayBzeW5jLiBieXBhc3NlZAkgICovCiAKIAkJCQl0bXBfZHVuaXRfY29udHJvbF9sb3cgPSAweDAzMDAwMDAwOwkvKiBSZWFkLURhdGEgc2FtcGxlZCBvbiByaXNpbmcgZWRnZSBvZiBDbGsgKi8KIAkJCQl0bXBfc2RyYW1fbW9kZSA9IDB4NjI7CS8qIENMPTIsNSBCdXJzdGxlbmd0aCA9IDQgKi8KLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTWF4LiBDTCBpcyAyLDUgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKLQkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpKTsKKwkJCQlkZWJ1ZygiTWF4LiBDTCBpcyAyLDUgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKKwkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpOwogCQkJfQogCQkJYnJlYWs7CiAKQEAgLTEzNDksMTYgKzEyNDcsMTQgQEAKIAkJCWlmICh0bXAgPT0gMSkgewkvKiBTeW5jICovCiAJCQkJdG1wX2R1bml0X2NvbnRyb2xfbG93ID0gMHgwMzAwMDAwMDsJLyogUmVhZC1EYXRhIHNhbXBsZWQgb24gcmlzaW5nIGVkZ2Ugb2YgQ2xrICovCiAJCQkJdG1wX3NkcmFtX21vZGUgPSAweDIyOwkvKiBDTD0yIEJ1cnN0bGVuZ3RoID0gNCAqLwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNYXguIENMIGlzIDJzIENMS3MgMHgxNDFjPSAlMDhseCwgMHgxNDA0ID0gJTA4bHhcbiIsCi0JCQkJICAgICB0bXBfc2RyYW1fbW9kZSwgdG1wX2R1bml0X2NvbnRyb2xfbG93KSk7CisJCQkJZGVidWcoIk1heC4gQ0wgaXMgMnMgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKKwkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpOwogCQkJfSBlbHNlIHsJLyogTm90IHN5bmMuCSAgKi8KIAogCQkJCXRtcF9kdW5pdF9jb250cm9sX2xvdyA9IDB4M2IwMDAwMDA7CS8qIFJlYWQtRGF0YSBzYW1wbGVkIG9uIHJpc2luZyBlZGdlIG9mIENsayAqLwogCQkJCXRtcF9zZHJhbV9tb2RlID0gMHgyMjsJLyogQ0w9MiBCdXJzdGxlbmd0aCA9IDQgKi8KLQkJCQlEUCAocHJpbnRmCi0JCQkJICAgICgiTWF4LiBDTCBpcyAyIENMS3MgMHgxNDFjPSAlMDhseCwgMHgxNDA0ID0gJTA4bHhcbiIsCi0JCQkJICAgICB0bXBfc2RyYW1fbW9kZSwgdG1wX2R1bml0X2NvbnRyb2xfbG93KSk7CisJCQkJZGVidWcoIk1heC4gQ0wgaXMgMiBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAorCQkJCSAgICAgdG1wX3NkcmFtX21vZGUsIHRtcF9kdW5pdF9jb250cm9sX2xvdyk7CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMTM2NiwxNiArMTI2MiwxNCBAQAogCQkJaWYgKHRtcCA9PSAxKSB7CS8qIFN5bmMgKi8KIAkJCQl0bXBfZHVuaXRfY29udHJvbF9sb3cgPSAweDIzMDAwMDAwOwkvKiBSZWFkLURhdGEgc2FtcGxlZCBvbiBmYWxsaW5nIGVkZ2Ugb2YgQ2xrICovCiAJCQkJdG1wX3NkcmFtX21vZGUgPSAweDUyOwkvKiBDTD0xLDUgQnVyc3RsZW5ndGggPSA0ICovCi0JCQkJRFAgKHByaW50ZgotCQkJCSAgICAoIk1heC4gQ0wgaXMgMSw1cyBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAotCQkJCSAgICAgdG1wX3NkcmFtX21vZGUsIHRtcF9kdW5pdF9jb250cm9sX2xvdykpOworCQkJCWRlYnVnKCJNYXguIENMIGlzIDEsNXMgQ0xLcyAweDE0MWM9ICUwOGx4LCAweDE0MDQgPSAlMDhseFxuIiwKKwkJCQkgICAgIHRtcF9zZHJhbV9tb2RlLCB0bXBfZHVuaXRfY29udHJvbF9sb3cpOwogCQkJfSBlbHNlIHsJLyogbm90IHN5bmMgKi8KIAogCQkJCXRtcF9kdW5pdF9jb250cm9sX2xvdyA9IDB4MWEwMDAwMDA7CS8qIFJlYWQtRGF0YSBzYW1wbGVkIG9uIHJpc2luZyBlZGdlIG9mIENsayAqLwogCQkJCXRtcF9zZHJhbV9tb2RlID0gMHg1MjsJLyogQ0w9MSw1IEJ1cnN0bGVuZ3RoID0gNCAqLwotCQkJCURQIChwcmludGYKLQkJCQkgICAgKCJNYXguIENMIGlzIDEsNSBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAotCQkJCSAgICAgdG1wX3NkcmFtX21vZGUsIHRtcF9kdW5pdF9jb250cm9sX2xvdykpOworCQkJCWRlYnVnKCJNYXguIENMIGlzIDEsNSBDTEtzIDB4MTQxYz0gJTA4bHgsIDB4MTQwNCA9ICUwOGx4XG4iLAorCQkJCSAgICAgdG1wX3NkcmFtX21vZGUsIHRtcF9kdW5pdF9jb250cm9sX2xvdyk7CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMTM5Myw4ICsxMjg3LDcgQEAKIAkvKiBzZXQgU0RSQU0gbW9kZSBTZXRDb21tYW5kIDB4MTQxOCAqLwogCUdUX1JFR19XUklURSAoU0RSQU1fT1BFUkFUSU9OLCAweDMpOwogCXdoaWxlIChHVFJFR1JFQUQgKFNEUkFNX09QRVJBVElPTikgIT0gMCkgewotCQlEUCAocHJpbnRmCi0JCSAgICAoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpKTsKKwkJZGVidWcoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpOwogCX0KIAogCkBAIC0xNDE1LDggKzEzMDgsNyBAQAogCS8qIHNldCBTRFJBTSBtb2RlIFNldENvbW1hbmQgMHgxNDE4ICovCiAJR1RfUkVHX1dSSVRFIChTRFJBTV9PUEVSQVRJT04sIDB4Myk7CiAJd2hpbGUgKEdUUkVHUkVBRCAoU0RSQU1fT1BFUkFUSU9OKSAhPSAwKSB7Ci0JCURQIChwcmludGYKLQkJICAgICgiXG4qKiogU0RSQU1fT1BFUkFUSU9OIDE0MTggYWZ0ZXIgRF9VTklUX0NPTlRST0xfTE9XOiBNb2R1bGUgc3RpbGwgYnVzeSAuLi4gcGxlYXNlIHdhaXQuLi4gKioqXG4iKSk7CisJCWRlYnVnKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxOCBhZnRlciBEX1VOSVRfQ09OVFJPTF9MT1c6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpOwogCX0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE0MjgsNDEgKzEzMjAsMzkgQEAKIAl0bXAgPSAweDAyOwogCiAKLQlEUCAocHJpbnRmICgiZHJiX3NpemUgKG4qNjRNYml0KTogJWRcbiIsIGluZm8tPmRyYl9zaXplKSk7CisJZGVidWcoImRyYl9zaXplIChuKjY0TWJpdCk6ICVkXG4iLCBpbmZvLT5kcmJfc2l6ZSk7CiAJc3dpdGNoIChpbmZvLT5kcmJfc2l6ZSkgewogCWNhc2UgMToJCS8qIDY0IE1iaXQgKi8KIAljYXNlIDI6CQkvKiAxMjggTWJpdCAqLwotCQlEUCAocHJpbnRmICgiUkFNLURldmljZV9zaXplIDY0TWJpdCBvciAxMjhNYml0KVxuIikpOworCQlkZWJ1ZygiUkFNLURldmljZV9zaXplIDY0TWJpdCBvciAxMjhNYml0KVxuIik7CiAJCXRtcCB8PSAoMHgwMCA8PCA0KTsKIAkJYnJlYWs7CiAJY2FzZSA0OgkJLyogMjU2IE1iaXQgKi8KIAljYXNlIDg6CQkvKiA1MTIgTWJpdCAqLwotCQlEUCAocHJpbnRmICgiUkFNLURldmljZV9zaXplIDI1Nk1iaXQgb3IgNTEyTWJpdClcbiIpKTsKKwkJZGVidWcoIlJBTS1EZXZpY2Vfc2l6ZSAyNTZNYml0IG9yIDUxMk1iaXQpXG4iKTsKIAkJdG1wIHw9ICgweDAxIDw8IDQpOwogCQlicmVhazsKIAljYXNlIDE2OgkJLyogMSBHYml0ICovCiAJY2FzZSAzMjoJCS8qIDIgR2JpdCAqLwotCQlEUCAocHJpbnRmICgiUkFNLURldmljZV9zaXplIDFHYml0IG9yIDJHYml0KVxuIikpOworCQlkZWJ1ZygiUkFNLURldmljZV9zaXplIDFHYml0IG9yIDJHYml0KVxuIik7CiAJCXRtcCB8PSAoMHgwMiA8PCA0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRmICgiRXJyb3IgaW4gZHJhbSBzaXplIGNhbGN1bGF0aW9uXG4iKTsKLQkJRFAgKHByaW50ZiAoIkFzc3VtZTogUkFNLURldmljZV9zaXplIDFHYml0IG9yIDJHYml0KVxuIikpOworCQlkZWJ1ZygiQXNzdW1lOiBSQU0tRGV2aWNlX3NpemUgMUdiaXQgb3IgMkdiaXQpXG4iKTsKIAkJdG1wIHw9ICgweDAyIDw8IDQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBTRFJBTSBiYW5rIHBhcmFtZXRlcnMgKi8KIAkvKiB0aGUgcGFyYW0gcmVnaXN0ZXJzIGZvciBzbG90IDEgKGJhbmtzIDIrMykgYXJlIG9mZnNldCBieSAweDggKi8KLQlEUCAocHJpbnRmCi0JICAgICgic2V0dGluZyB1cCBzbG90ICVkIGNvbmZpZyB3aXRoOiAlMDhseCBcbiIsIGluZm8tPnNsb3QsIHRtcCkpOworCWRlYnVnKCJzZXR0aW5nIHVwIHNsb3QgJWQgY29uZmlnIHdpdGg6ICUwOGx4IFxuIiwgaW5mby0+c2xvdCwgdG1wKTsKIAlHVF9SRUdfV1JJVEUgKFNEUkFNX0FERFJfQ09OVFJPTCwgdG1wKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLQlEUCAocHJpbnRmCi0JICAgICgic2V0dGluZyB1cCBzZHJhbV90aW1pbmdfY29udHJvbF9sb3cgd2l0aDogJTA4eCBcbiIsCi0JICAgICAweDExNTExMjIwKSk7CisJZGVidWcoInNldHRpbmcgdXAgc2RyYW1fdGltaW5nX2NvbnRyb2xfbG93IHdpdGg6ICUwOHggXG4iLAorCSAgICAgMHgxMTUxMTIyMCk7CiAJR1RfUkVHX1dSSVRFIChTRFJBTV9USU1JTkdfQ09OVFJPTF9MT1csIDB4MTE1MTEyMjApOwogCiAKQEAgLTE0NzQsMzggKzEzNjQsMzMgQEAKIAlpZiAoaW5mby0+cmVnaXN0ZXJlZEFkZHJBbmRDb250cm9sSW5wdXRzCiAJICAgIHx8IGluZm8tPnJlZ2lzdGVyZWREUU1CaW5wdXRzKSB7CiAJCXRtcCB8PSAoMSA8PCAxNyk7Ci0JCURQIChwcmludGYKLQkJICAgICgiU1BEIHNheXM6IHJlZ2lzdGVyZWQgQWRkci4gYW5kIENvbnQuOiAlZDsgcmVnaXN0ZXJlZCBEUU1CaW5wdXRzOiAlZFxuIiwKKwkJZGVidWcoIlNQRCBzYXlzOiByZWdpc3RlcmVkIEFkZHIuIGFuZCBDb250LjogJWQ7IHJlZ2lzdGVyZWQgRFFNQmlucHV0czogJWRcbiIsCiAJCSAgICAgaW5mby0+cmVnaXN0ZXJlZEFkZHJBbmRDb250cm9sSW5wdXRzLAotCQkgICAgIGluZm8tPnJlZ2lzdGVyZWREUU1CaW5wdXRzKSk7CisJCSAgICAgaW5mby0+cmVnaXN0ZXJlZERRTUJpbnB1dHMpOwogCX0KIAogCS8qIFVzZSBidWZmZXIgMSB0byByZXR1cm4gcmVhZCBkYXRhIHRvIHRoZSBDUFUKIAkgKiBQYWdlIDQyNiBNVjY0MzYwICovCiAJdG1wIHw9ICgxIDw8IDI2KTsKLQlEUCAocHJpbnRmCi0JICAgICgiQmVmb3JlIEJ1ZmZlciBhc3NpZ25tZW50IC0gc2RyYW1fY29uZjogJTA4eFxuIiwKLQkgICAgIEdUUkVHUkVBRCAoU0RSQU1fQ09ORklHKSkpOwotCURQIChwcmludGYKLQkgICAgKCJBZnRlciBCdWZmZXIgYXNzaWdubWVudCAtIHNkcmFtX2NvbmY6ICUwOHhcbiIsCi0JICAgICBHVFJFR1JFQUQgKFNEUkFNX0NPTkZJRykpKTsKKwlkZWJ1ZygiQmVmb3JlIEJ1ZmZlciBhc3NpZ25tZW50IC0gc2RyYW1fY29uZjogJTA4eFxuIiwKKwkgICAgIEdUUkVHUkVBRCAoU0RSQU1fQ09ORklHKSk7CisJZGVidWcoIkFmdGVyIEJ1ZmZlciBhc3NpZ25tZW50IC0gc2RyYW1fY29uZjogJTA4eFxuIiwKKwkgICAgIEdUUkVHUkVBRCAoU0RSQU1fQ09ORklHKSk7CiAKIAkvKiBTRFJBTSB0aW1pbmcgVG9fZG86ICovCiAKIAogCXRtcCA9IEdUUkVHUkVBRCAoU0RSQU1fVElNSU5HX0NPTlRST0xfSElHSCk7Ci0JRFAgKHByaW50ZiAoIiMgc2RyYW1fdGltaW5nX2NvbnRyb2xfaGlnaCBpcyA6ICUwOGx4IFxuIiwgdG1wKSk7CisJZGVidWcoIiMgc2RyYW1fdGltaW5nX2NvbnRyb2xfaGlnaCBpcyA6ICUwOGx4IFxuIiwgdG1wKTsKIAogCS8qIFNEUkFNIGFkZHJlc3MgZGVjb2RlIHJlZ2lzdGVyICovCiAJLyogcHJvZ3JhbSB0aGlzIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUgKi8KIAl0bXAgPSBHVFJFR1JFQUQgKFNEUkFNX0FERFJfQ09OVFJPTCk7Ci0JRFAgKHByaW50ZgotCSAgICAoIlNEUkFNIGFkZHJlc3MgY29udHJvbCAoYmVmb3JlOiBkZWNvZGUpOiAlMDh4ICAiLAotCSAgICAgR1RSRUdSRUFEIChTRFJBTV9BRERSX0NPTlRST0wpKSk7CisJZGVidWcoIlNEUkFNIGFkZHJlc3MgY29udHJvbCAoYmVmb3JlOiBkZWNvZGUpOiAlMDh4ICAiLAorCSAgICAgR1RSRUdSRUFEIChTRFJBTV9BRERSX0NPTlRST0wpKTsKIAlHVF9SRUdfV1JJVEUgKFNEUkFNX0FERFJfQ09OVFJPTCwgKHRtcCB8IDB4MikpOwotCURQIChwcmludGYKLQkgICAgKCJTRFJBTSBhZGRyZXNzIGNvbnRyb2wgKGFmdGVyOiBkZWNvZGUpOiAlMDh4XG4iLAotCSAgICAgR1RSRUdSRUFEIChTRFJBTV9BRERSX0NPTlRST0wpKSk7CisJZGVidWcoIlNEUkFNIGFkZHJlc3MgY29udHJvbCAoYWZ0ZXI6IGRlY29kZSk6ICUwOHhcbiIsCisJICAgICBHVFJFR1JFQUQgKFNEUkFNX0FERFJfQ09OVFJPTCkpOwogCiAJLyogc2V0IHRoZSBTRFJBTSBjb25maWd1cmF0aW9uIGZvciBlYWNoIGJhbmsgKi8KIApAQCAtMTUxNCw4ICsxMzk5LDcgQEAKIAkJaW50IGwsIGwxOwogCiAJCWkgPSBpbmZvLT5zbG90OwotCQlEUCAocHJpbnRmCi0JCSAgICAoIlxuKioqIFJ1bm5pbmcgYSBNUlMgY3ljbGUgZm9yIGJhbmsgJWQgKioqXG4iLCBpKSk7CisJCWRlYnVnKCJcbioqKiBSdW5uaW5nIGEgTVJTIGN5Y2xlIGZvciBiYW5rICVkICoqKlxuIiwgaSk7CiAKIAkJLyogbWFwIHRoZSBiYW5rICovCiAJCW1lbW9yeV9tYXBfYmFuayAoaSwgMCwgR0IgLyA0KTsKQEAgLTE1MjUsMTUgKzE0MDksMTMgQEAKIAkJR1RfUkVHX1dSSVRFIChFWFRFTkRFRF9EUkFNX01PREUsIDB4MCk7CiAJCUdUX1JFR19XUklURSAoU0RSQU1fT1BFUkFUSU9OLCAweDQpOwogCQl3aGlsZSAoR1RSRUdSRUFEIChTRFJBTV9PUEVSQVRJT04pICE9IDApIHsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpKTsKKwkJCWRlYnVnKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxOCBhZnRlciBTRFJBTV9NT0RFOiBNb2R1bGUgc3RpbGwgYnVzeSAuLi4gcGxlYXNlIHdhaXQuLi4gKioqXG4iKTsKIAkJfQogCiAJCUdUX1JFR19XUklURSAoU0RSQU1fTU9ERSwgdG1wIHwgMHg4MCk7CiAJCUdUX1JFR19XUklURSAoU0RSQU1fT1BFUkFUSU9OLCAweDMpOwogCQl3aGlsZSAoR1RSRUdSRUFEIChTRFJBTV9PUEVSQVRJT04pICE9IDApIHsKLQkJCURQIChwcmludGYKLQkJCSAgICAoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpKTsKKwkJCWRlYnVnKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxOCBhZnRlciBTRFJBTV9NT0RFOiBNb2R1bGUgc3RpbGwgYnVzeSAuLi4gcGxlYXNlIHdhaXQuLi4gKioqXG4iKTsKIAkJfQogCQlsMSA9IDA7CiAJCWZvciAobD0wO2w8MjAwO2wrKykKQEAgLTE1NDIsMTUgKzE0MjQsMTMgQEAKIAkJR1RfUkVHX1dSSVRFIChTRFJBTV9NT0RFLCB0bXApOwogCQlHVF9SRUdfV1JJVEUgKFNEUkFNX09QRVJBVElPTiwgMHgzKTsKIAkJd2hpbGUgKEdUUkVHUkVBRCAoU0RSQU1fT1BFUkFUSU9OKSAhPSAwKSB7Ci0JCQlEUCAocHJpbnRmCi0JCQkgICAgKCJcbioqKiBTRFJBTV9PUEVSQVRJT04gMTQxOCBhZnRlciBTRFJBTV9NT0RFOiBNb2R1bGUgc3RpbGwgYnVzeSAuLi4gcGxlYXNlIHdhaXQuLi4gKioqXG4iKSk7CisJCQlkZWJ1ZygiXG4qKiogU0RSQU1fT1BFUkFUSU9OIDE0MTggYWZ0ZXIgU0RSQU1fTU9ERTogTW9kdWxlIHN0aWxsIGJ1c3kgLi4uIHBsZWFzZSB3YWl0Li4uICoqKlxuIik7CiAJCX0KIAogCQkvKiBzd2l0Y2ggYmFjayB0byBub3JtYWwgb3BlcmF0aW9uIG1vZGUgKi8KIAkJR1RfUkVHX1dSSVRFIChTRFJBTV9PUEVSQVRJT04sIDB4NSk7CiAJCXdoaWxlIChHVFJFR1JFQUQgKFNEUkFNX09QRVJBVElPTikgIT0gMCkgewotCQkJRFAgKHByaW50ZgotCQkJICAgICgiXG4qKiogU0RSQU1fT1BFUkFUSU9OIDE0MTggYWZ0ZXIgU0RSQU1fTU9ERTogTW9kdWxlIHN0aWxsIGJ1c3kgLi4uIHBsZWFzZSB3YWl0Li4uICoqKlxuIikpOworCQkJZGVidWcoIlxuKioqIFNEUkFNX09QRVJBVElPTiAxNDE4IGFmdGVyIFNEUkFNX01PREU6IE1vZHVsZSBzdGlsbCBidXN5IC4uLiBwbGVhc2Ugd2FpdC4uLiAqKipcbiIpOwogCQl9CiAKICNlbmRpZiAvKiB0ZXN0IG9ubHkgKi8KQEAgLTE1OTcsNyArMTQ3Nyw3IEBACiAJICAgICpiPXNhdmUyOwogCiAJICAgIGlmICh2YWwgIT0gY250KSB7Ci0JCSAgICBEUChwcmludGYoIkZvdW5kICUwOHggIGF0IEFkZHJlc3MgJTA4eCAoZmFpbHVyZSlcbiIsICh1bnNpZ25lZCBpbnQpdmFsLCAodW5zaWduZWQgaW50KSBhZGRyKSk7CisJCSAgICBkZWJ1ZygiRm91bmQgJTA4eCAgYXQgQWRkcmVzcyAlMDh4IChmYWlsdXJlKVxuIiwgKHVuc2lnbmVkIGludCl2YWwsICh1bnNpZ25lZCBpbnQpIGFkZHIpOwogCQkgICAgLyogZml4IGJvdW5kYXJ5IGNvbmRpdGlvbi4uIFNUQVJUVkFMIG1lYW5zIHplcm8gKi8KIAkJICAgIGlmKGNudD09U1RBUlRWQUwvc2l6ZW9mKGxvbmcpKSBjbnQ9MDsKIAkJICAgIHJldHVybiAoY250ICogc2l6ZW9mKGxvbmcpKTsKQEAgLTE2OTAsNyArMTU3MCw2IEBACiBwaHlzX3NpemVfdAogaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCiB7Ci0JaW50IHMwID0gMCwgczEgPSAwOwogCWludCBjaGVja2JhbmtbNF0gPSB7IFswIC4uLiAzXSA9IDAgfTsKIAl1bG9uZyByZWFsc2l6ZSwgdG90YWwsIGNoZWNrOwogCUFVWF9NRU1fRElNTV9JTkZPIGRpbW1JbmZvMTsKQEAgLTE3MDksMTAgKzE1ODgsMTAgQEAKIAkJcHJpbnRmKCJTa2lwcGluZyBTRC0gRERSUkFNIHNldHVwIGR1ZSB0byBOSFIgYml0IGJlaW5nIHNldFxuIik7CiAJfSBlbHNlIHsKIAkJLyogRElNTTAgKi8KLQkJczAgPSBjaGVja19kaW1tKDAsICZkaW1tSW5mbzEpOworCQkodm9pZCljaGVja19kaW1tKDAsICZkaW1tSW5mbzEpOwogCiAJCS8qIERJTU0xICovCi0JCXMxID0gY2hlY2tfZGltbSgxLCAmZGltbUluZm8yKTsKKwkJKHZvaWQpY2hlY2tfZGltbSgxLCAmZGltbUluZm8yKTsKIAogCQltZW1vcnlfbWFwX2JhbmsoMCwgMCwgMCk7CiAJCW1lbW9yeV9tYXBfYmFuaygxLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS9jbWRfZGFzYV9zaW0uYyBiL2JvYXJkL2VzZC9kYXNhX3NpbS9jbWRfZGFzYV9zaW0uYwppbmRleCA0OTQ2NTM4Li4wMDE0ODA4IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vY21kX2Rhc2Ffc2ltLmMKKysrIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL2NtZF9kYXNhX3NpbS5jCkBAIC0xMzIsOCArMTMyLDYgQEAKIAogc3RhdGljIHZvaWQgdXBkYXRlUGNpOTA1NCAodm9pZCkKIHsKLQlpbnQgdmFsOwotCiAJLyoKIAkgKiBTZXQgRUVQUk9NIHdyaXRlLXByb3RlY3QgcmVnaXN0ZXIgdG8gMAogCSAqLwpAQCAtMTQxLDQ0ICsxMzksNDQgQEAKIAkJICBpbl9iZTMyICgodm9pZCAqKShwY2k5MDU0X2lvYmFzZSArIDB4MGMpKSAmIDB4ZmZmZjAwZmYpOwogCiAJLyogTG9uZyBTZXJpYWwgRUVQUk9NIExvYWQgUmVnaXN0ZXJzLi4uICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDAwLCAweDkwNTQxMGI1KTsKLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDQsIDB4MDk4MDAwMDEpOwkvKiBvdGhlciBpbnB1dCBjb250cm9sbGVyICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDA4LCAweDI4MTQwMTAwKTsKKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4OTA1NDEwYjUpOworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHgwOTgwMDAwMSk7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDgsIDB4MjgxNDAxMDApOwogCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDBjLCAweDAwMDAwMDAwKTsJLyogTUJPWDAuLi4gKi8KLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MTAsIDB4MDAwMDAwMDApOworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwYywgMHgwMDAwMDAwMCk7CS8qIE1CT1gwLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDEwLCAweDAwMDAwMDAwKTsKIAogCS8qIGxhczA6IGZwZ2EgYWNjZXNzICgweDAwMDAuMDAwMCAuLi4gMHgwMDAzLmZmZmYpICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE0LCAweGZmZmMwMDAwKTsJLyogTEFTMFJSLi4uICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE4LCAweDAwMDAwMDAxKTsJLyogTEFTMEJBICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE0LCAweGZmZmMwMDAwKTsJLyogTEFTMFJSLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE4LCAweDAwMDAwMDAxKTsJLyogTEFTMEJBICovCiAKLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MWMsIDB4MDAyMDAwMDApOwkvKiBNQVJCUi4uLiAqLwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgyMCwgMHgwMDMwMDUwMCk7CS8qIExNSVNDL0JJR0VORCAqLworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgxYywgMHgwMDIwMDAwMCk7CS8qIE1BUkJSLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDIwLCAweDAwMzAwNTAwKTsJLyogTE1JU0MvQklHRU5EICovCiAKLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjQsIDB4MDAwMDAwMDApOwkvKiBFUk9NUlIuLi4gKi8KLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjgsIDB4MDAwMDAwMDApOwkvKiBFUk9NQkEgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjQsIDB4MDAwMDAwMDApOwkvKiBFUk9NUlIuLi4gKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjgsIDB4MDAwMDAwMDApOwkvKiBFUk9NQkEgKi8KIAotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgyYywgMHg0MzAzMDAwMCk7CS8qIExCUkQwLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDJjLCAweDQzMDMwMDAwKTsJLyogTEJSRDAuLi4gKi8KIAotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzMCwgMHgwMDAwMDAwMCk7CS8qIERNUlIuLi4gKi8KLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MzQsIDB4MDAwMDAwMDApOwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzOCwgMHgwMDAwMDAwMCk7CisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDMwLCAweDAwMDAwMDAwKTsJLyogRE1SUi4uLiAqLworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzNCwgMHgwMDAwMDAwMCk7CisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDM4LCAweDAwMDAwMDAwKTsKIAotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzYywgMHgwMDAwMDAwMCk7CS8qIERNUEJBTS4uLiAqLwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0MCwgMHgwMDAwMDAwMCk7CisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDNjLCAweDAwMDAwMDAwKTsJLyogRE1QQkFNLi4uICovCisJUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDQwLCAweDAwMDAwMDAwKTsKIAogCS8qIEV4dHJhIExvbmcgU2VyaWFsIEVFUFJPTSBMb2FkIFJlZ2lzdGVycy4uLiAqLwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0NCwgMHgwMTAyMTJmZSk7CS8qIFBDSVNJRC4uLiAqLworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0NCwgMHgwMTAyMTJmZSk7CS8qIFBDSVNJRC4uLiAqLwogCiAJLyogbGFzMTogNTA1LXNyYW0gYWNjZXNzICgweDAwMDQuMDAwMCAuLi4gMHgwMDFmLmZmZmYpICovCiAJLyogT2Zmc2V0IHRvIExBUzE6IEdyb3VwIDE6IDB4MDAwNDAwMDAgICAgICAgICAgICAgICAgICovCiAJLyogICAgICAgICAgICAgICAgIEdyb3VwIDI6IDB4MDAwODAwMDAgICAgICAgICAgICAgICAgICovCiAJLyogICAgICAgICAgICAgICAgIEdyb3VwIDM6IDB4MDAwYzAwMDAgICAgICAgICAgICAgICAgICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDQ4LCAweGZmZTAwMDAwKTsJLyogTEFTMVJSICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDRjLCAweDAwMDQwMDAxKTsJLyogTEFTMUJBICovCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDUwLCAweDAwMDAwMjA4KTsJLyogTEJSRDEgKi8gLyogc28gd2FycyBiaXNoZXIgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4NDgsIDB4ZmZlMDAwMDApOwkvKiBMQVMxUlIgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4NGMsIDB4MDAwNDAwMDEpOwkvKiBMQVMxQkEgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4NTAsIDB4MDAwMDAyMDgpOwkvKiBMQlJEMSAqLyAvKiBzbyB3YXJzIGJpc2hlciAqLwogCi0JdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDU0LCAweDAwMDA0YzA2KTsJLyogSG90U3dhcC4uLiAqLworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg1NCwgMHgwMDAwNGMwNik7CS8qIEhvdFN3YXAuLi4gKi8KIAogCXByaW50ZiAoIkZpbmlzaGVkIHdyaXRpbmcgZGVmYXVsdHMgaW50byBQTFggUENJOTA1NCBFRVBST00hXG4iKTsKIH0KQEAgLTE4Niw4ICsxODQsNiBAQAogCiBzdGF0aWMgdm9pZCBjbGVhclBjaTkwNTQgKHZvaWQpCiB7Ci0JaW50IHZhbDsKLQogCS8qCiAJICogU2V0IEVFUFJPTSB3cml0ZS1wcm90ZWN0IHJlZ2lzdGVyIHRvIDAKIAkgKi8KQEAgLTE5NSw4ICsxOTEsOCBAQAogCQkgIGluX2JlMzIgKCh2b2lkICopKHBjaTkwNTRfaW9iYXNlICsgMHgwYykpICYgMHhmZmZmMDBmZik7CiAKIAkvKiBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KLQl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4ZmZmZmZmZmYpOwotCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHhmZmZmZmZmZik7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KKwlQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4ZmZmZmZmZmYpOworCVBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHhmZmZmZmZmZik7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KIAogCXByaW50ZiAoIkZpbmlzaGVkIGNsZWFyaW5nIFBMWCBQQ0k5MDU0IEVFUFJPTSFcbiIpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BjaTQwNS9jbWRfcGNpNDA1LmMgYi9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYwppbmRleCAxM2Y5MDE5Li5mNTcwZWYzIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYworKysgYi9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYwpAQCAtNDIsNyArNDIsNiBAQAogCXVuc2lnbmVkIGludCAqcHRyID0gMDsKIAlpbnQgY291bnQgPSAwOwogCWludCBjb3VudDIgPSAwOwotCWludCBzdGF0dXM7CiAJaW50IGk7CiAJY2hhciBhZGRyWzE2XTsKIAljaGFyIHN0cltdID0gIlxcfC8tIjsKQEAgLTk5LDcgKzk4LDcgQEAKIAogCQlsb2NhbF9hcmdzWzBdID0gYXJndlswXTsKIAkJbG9jYWxfYXJnc1sxXSA9IE5VTEw7Ci0JCXN0YXR1cyA9IGRvX2Jvb3RtIChjbWR0cCwgMCwgMSwgbG9jYWxfYXJncyk7CisJCWRvX2Jvb3RtIChjbWR0cCwgMCwgMSwgbG9jYWxfYXJncyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9ldGguYyBiL2JvYXJkL2V2YjY0MjYwL2V0aC5jCmluZGV4IDE0OTJmZmMuLmMwMmE5Y2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL2V0aC5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL2V0aC5jCkBAIC0xMjcsMzEgKzEyNywzMiBAQAogI2VuZGlmCiAKICAgICBpZihpY3ImMHgxMDAwMDAwMCkgewotCXVuc2lnbmVkIGludCBwc3I7Ci0JcHNyPUdUUkVHUkVBRChFVEhFUk5FVDBfUE9SVF9TVEFUVVNfUkVHSVNURVIgKyBwLT5yZWdfYmFzZSk7CiAjaWZkZWYgREVCVUcKKwl1bnNpZ25lZCBpbnQgcHNyOworCisJcHNyPUdUUkVHUkVBRChFVEhFUk5FVDBfUE9SVF9TVEFUVVNfUkVHSVNURVIgKyBwLT5yZWdfYmFzZSk7CiAJcHJpbnRmKCJQSFkgc3RhdGUgY2hhbmdlOlxuIgogCSAgICAgICAiICBHVDolczolczolczolc1xuIiwKLQkJcHNyJjE/IjEwMCI6IiAxMCIsCi0JCXBzciY4PyIgTGluayI6Im5MaW5rIiwKLQkJcHNyJjI/IkZEIjoiSEQiLAotCQlwc3ImND8iIEZDIjoibkZDIik7CisJCXBzciAmIDEgPyAiMTAwIiA6ICIgMTAiLAorCQlwc3IgJiA4ID8gIiBMaW5rIiA6ICJuTGluayIsCisJCXBzciAmIDIgPyAiRkQiIDogIkhEIiwKKwkJcHNyICYgNCA/ICIgRkMiIDogIm5GQyIpOwogCiAjaWZkZWYgQ09ORklHX0lOVEVMX0xYVDk3WCAvKiBub24tc3RhbmRhcmQgbWlpIHJlZyAoaW50ZWwgbHh0OTcyYSkgKi8KIAl7Ci0JdW5zaWduZWQgc2hvcnQgbWlpXzExOwotCW1paV8xMT1taWlwaHlfcmVhZF9yZXQoZXRoZXJfcG9ydF9waHlfYWRkcltwLT5kZXZdLDB4MTEpOworCQl1bnNpZ25lZCBzaG9ydCBtaWlfMTE7CisJCW1paV8xMSA9IG1paXBoeV9yZWFkX3JldChldGhlcl9wb3J0X3BoeV9hZGRyW3AtPmRldl0sIDB4MTEpOwogCi0JcHJpbnRmKCIgbWlpOiVzOiVzOiVzOiVzICVzOiVzICVzXG4iLAotCQltaWlfMTEmKDE8PDE0KT8iMTAwIjoiIDEwIiwKLQkJbWlpXzExJigxPDwxMCk/IiBMaW5rIjoibkxpbmsiLAotCQltaWlfMTEmKDE8PDkpPyJGRCI6IkhEIiwKLQkJbWlpXzExJigxPDw0KT8iIEZDIjoibkZDIiwKKwkJcHJpbnRmKCIgbWlpOiVzOiVzOiVzOiVzICVzOiVzICVzXG4iLAorCQkJbWlpXzExICYgKDEgPDwgMTQpID8gIjEwMCIgOiAiIDEwIiwKKwkJCW1paV8xMSAmICgxIDw8IDEwKSA/ICIgTGluayIgOiAibkxpbmsiLAorCQkJbWlpXzExICYgKDEgPDwgOSkgPyAiRkQiIDogIkhEIiwKKwkJCW1paV8xMSAmICgxIDw8IDQpID8gIiBGQyIgOiAibkZDIiwKIAotCQltaWlfMTEmKDE8PDcpPyJBTmMiOiJBTm5jIiwKLQkJbWlpXzExJigxPDw4KT8iQU4iOiJNYW51YWwiLAotCQkiIgotCQkpOworCQkJbWlpXzExICYgKDEgPDwgNykgPyAiQU5jIiA6ICJBTm5jIiwKKwkJCW1paV8xMSAmICgxIDw8IDgpID8gIkFOIiA6ICJNYW51YWwiLAorCQkJIiIKKwkJCSk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19JTlRFTF9MWFQ5N1ggKi8KICNlbmRpZiAvKiBERUJVRyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvZXZiNjQyNjAuYyBiL2JvYXJkL2V2YjY0MjYwL2V2YjY0MjYwLmMKaW5kZXggODA3NTZhNS4uMzkzMzIwYSAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvZXZiNjQyNjAuYworKysgYi9ib2FyZC9ldmI2NDI2MC9ldmI2NDI2MC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8Z2FsaWxlby9ndDY0MjYwUi5oPgogI2luY2x1ZGUgPG5ldC5oPgogI2luY2x1ZGUgPG5ldGRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJldGguaCIKQEAgLTM2MCw3ICszNjEsNyBAQAogewogI2lmICFkZWZpbmVkKENPTkZJR19aVU1BX1YyKSAmJiAhZGVmaW5lZChDT05GSUdfUDNHNCkKIAl2b2xhdGlsZSBpbnQgKmFkZHIgPSBOVUxMOwotCWludCBkdW1teTsKKwlfX21heWJlX3VudXNlZCBpbnQgZHVtbXk7CiAKIAlpZiAobW9kZSA9PSAxKSB7CiAJCXN3aXRjaCAobGVkKSB7CmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9pMmMuYyBiL2JvYXJkL2V2YjY0MjYwL2kyYy5jCmluZGV4IDg4ZDBkYWMuLjNlYWUzZDkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL2kyYy5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL2kyYy5jCkBAIC0yMCwyNyArMjAsMjMgQEAKIGkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkcikKIHsKIAl1bnNpZ25lZCBpbnQgbiwgbSwgZnJlcSwgbWFyZ2luLCBwb3dlcjsKLQl1bnNpZ25lZCBpbnQgYWN0dWFsRnJlcSwgYWN0dWFsTj0wLCBhY3R1YWxNPTA7CisJdW5zaWduZWQgaW50IGFjdHVhbE4gPSAwLCBhY3R1YWxNID0gMDsKIAl1bnNpZ25lZCBpbnQgY29udHJvbCwgc3RhdHVzOwogCXVuc2lnbmVkIGludCBtaW5NYXJnaW4gPSAweGZmZmZmZmZmOwogCXVuc2lnbmVkIGludCB0Y2xrID0gMTI1MDAwMDAwOwogCiAJRFAocHV0cygiaTJjX2luaXRcbiIpKTsKIAotCWZvcihuID0gMCA7IG4gPCA4IDsgbisrKQotCXsKLQkJZm9yKG0gPSAwIDsgbSA8IDE2IDsgbSsrKQotCQl7CisJZm9yIChuID0gMCA7IG4gPCA4IDsgbisrKSB7CisJCWZvciAobSA9IDAgOyBtIDwgMTYgOyBtKyspIHsKIAkJCXBvd2VyID0gMjw8bjsgLyogcG93ZXIgPSAyXihuKzEpICovCiAJCQlmcmVxID0gdGNsay8oMTAqKG0rMSkqcG93ZXIpOwogCQkJaWYgKHNwZWVkID4gZnJlcSkKIAkJCQltYXJnaW4gPSBzcGVlZCAtIGZyZXE7CiAJCQllbHNlCiAJCQkJbWFyZ2luID0gZnJlcSAtIHNwZWVkOwotCQkJaWYobWFyZ2luIDwgbWluTWFyZ2luKQotCQkJeworCQkJaWYgKG1hcmdpbiA8IG1pbk1hcmdpbikgewogCQkJCW1pbk1hcmdpbiAgID0gbWFyZ2luOwotCQkJCWFjdHVhbEZyZXEgID0gZnJlcTsKIAkJCQlhY3R1YWxOCSAgICA9IG47CiAJCQkJYWN0dWFsTQkgICAgPSBtOwogCQkJfQpAQCAtOTEsMTMgKzg3LDEzIEBACiAJCXVkZWxheShJMkNfREVMQVkpOwogCQlpZiAoY291bnQgPiAyMCkgewogCQkJR1RfUkVHX1dSSVRFKEkyQ19DT05UUk9MLCAoMHgxIDw8IDQpKTsgLypzdG9wKi8KLQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAkJR1RfUkVHX1JFQUQoSTJDX1NUQVRVU19CQVVERV9SQVRFLCAmc3RhdHVzKTsKIAkJY291bnQrKzsKIAl9CiAKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdWNoYXIKQEAgLTExMCw5ICsxMDYsOCBAQAogCiAJLyogT3V0cHV0IHNsYXZlIGFkZHJlc3MgKi8KIAotCWlmICh0ZW5fYml0KSB7CisJaWYgKHRlbl9iaXQpCiAJCWJpdHMgPSAxMDsKLQl9CiAKIAlkYXRhID0gKGRldl9hZGRyIDw8IDEpOwogCS8qIHNldCB0aGUgcmVhZCBiaXQgKi8KQEAgLTEyOSw3ICsxMjQsNyBAQAogCQl1ZGVsYXkoSTJDX0RFTEFZKTsKIAkJaWYgKGNvdW50ID4gMjApIHsKIAkJCUdUX1JFR19XUklURShJMkNfQ09OVFJPTCwgKDB4MSA8PCA0KSk7IC8qc3RvcCovCi0JCQlyZXR1cm4oc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAkJR1RfUkVHX1JFQUQoSTJDX1NUQVRVU19CQVVERV9SQVRFLCAmc3RhdHVzKTsKIAkJY291bnQrKzsKQEAgLTEzNywxNCArMTMyLDE0IEBACiAKIAlpZiAoYml0cyA9PSAxMCkgewogCQlwcmludGYoIjEwIGJpdCBJMkMgYWRkcmVzc2luZyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKLQkJcmV0dXJuICgweGZmKTsKKwkJcmV0dXJuIDB4ZmY7CiAJfQogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVjaGFyCi1pMmNfZ2V0X2RhdGEodWNoYXIqIHJldHVybl9kYXRhLCBpbnQgbGVuKSB7CitpMmNfZ2V0X2RhdGEodWNoYXIgKnJldHVybl9kYXRhLCBpbnQgbGVuKSB7CiAKIAl1bnNpZ25lZCBpbnQgZGF0YSwgc3RhdHVzID0gMDsKIAlpbnQgY291bnQgPSAwOwpAQCAtMTYzLDcgKzE1OCw3IEBACiAJCWNvdW50Kys7CiAJCXdoaWxlICgoc3RhdHVzICYgMHhmZikgIT0gMHg1MCkgewogCQkJdWRlbGF5KEkyQ19ERUxBWSk7Ci0JCQlpZihjb3VudCA+IDIpIHsKKwkJCWlmIChjb3VudCA+IDIpIHsKIAkJCQlHVF9SRUdfV1JJVEUoSTJDX0NPTlRST0wsICgweDEgPDwgNCkpOyAvKnN0b3AqLwogCQkJCXJldHVybiAwOwogCQkJfQpAQCAtMTc4LDE2ICsxNzMsMTYgQEAKIAlSRVNFVF9SRUdfQklUUyhJMkNfQ09OVFJPTCwgQklUMnxCSVQzKTsKIAl3aGlsZSAoKHN0YXR1cyAmIDB4ZmYpICE9IDB4NTgpIHsKIAkJdWRlbGF5KEkyQ19ERUxBWSk7Ci0JCWlmKGNvdW50ID4gMjAwKSB7CisJCWlmIChjb3VudCA+IDIwMCkgewogCQkJR1RfUkVHX1dSSVRFKEkyQ19DT05UUk9MLCAoMHgxIDw8IDQpKTsgLypzdG9wKi8KLQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAkJR1RfUkVHX1JFQUQoSTJDX1NUQVRVU19CQVVERV9SQVRFLCAmc3RhdHVzKTsKIAkJY291bnQrKzsKIAl9CiAJR1RfUkVHX1dSSVRFKEkyQ19DT05UUk9MLCAoMHgxIDw8IDQpKTsgLyogc3RvcCAqLwogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVjaGFyCkBAIC0yMTMsOSArMjA4LDkgQEAKIAkJY291bnQrKzsKIAkJd2hpbGUgKChzdGF0dXMgJiAweGZmKSAhPSAweDI4KSB7CiAJCQl1ZGVsYXkoSTJDX0RFTEFZKTsKLQkJCWlmKGNvdW50ID4gMjApIHsKKwkJCWlmIChjb3VudCA+IDIwKSB7CiAJCQkJR1RfUkVHX1dSSVRFKEkyQ19DT05UUk9MLCAoMHgxIDw8IDQpKTsgLypzdG9wKi8KLQkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQkJcmV0dXJuIHN0YXR1czsKIAkJCX0KIAkJCUdUX1JFR19SRUFEKEkyQ19TVEFUVVNfQkFVREVfUkFURSwgJnN0YXR1cyk7CiAJCQljb3VudCsrOwpAQCAtMjI3LDcgKzIyMiw3IEBACiAKIAl1ZGVsYXkoSTJDX0RFTEFZICogMTApOwogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVjaGFyCkBAIC0yNTQsMTEgKzI0OSwxMSBAQAogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHVjaGFyCi1pMmNfcmVhZCh1Y2hhciBkZXZfYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IGxlbiwgdWNoYXIqIGRhdGEsCitpMmNfcmVhZCh1Y2hhciBkZXZfYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IGxlbiwgdWNoYXIgKmRhdGEsCiAJIGludCB0ZW5fYml0KQogewogCXVjaGFyIHN0YXR1cyA9IDA7CkBAIC0yNjYsNyArMjYxLDcgQEAKIAogCURQKHB1dHMoImkyY19yZWFkXG4iKSk7CiAKLQlpMmNfaW5pdChpMmNGcmVxLDApOworCWkyY19pbml0KGkyY0ZyZXEsIDApOwogCiAJc3RhdHVzID0gaTJjX3N0YXJ0KCk7CiAKQEAgLTI4NSw3ICsyODAsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAotCWkyY19pbml0KGkyY0ZyZXEsMCk7CisJaTJjX2luaXQoaTJjRnJlcSwgMCk7CiAKIAlzdGF0dXMgPSBpMmNfc3RhcnQoKTsKIAlpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9zZHJhbV9pbml0LmMgYi9ib2FyZC9ldmI2NDI2MC9zZHJhbV9pbml0LmMKaW5kZXggZTJmMDc2OS4uNmY3MjVmNiAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvc2RyYW1faW5pdC5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL3NkcmFtX2luaXQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGdhbGlsZW8vcGNpLmg+CiAjaW5jbHVkZSA8Z2FsaWxlby9ndDY0MjYwUi5oPgogI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpbmNsdWRlICJldGguaCIKICNpbmNsdWRlICJtcHNjLmgiCkBAIC0zMzAsNyArMzMxLDggQEAKIHN0YXRpYyBpbnQgc2V0dXBfc2RyYW1fY29tbW9uIChzZHJhbV9pbmZvX3QgaW5mb1syXSkKIHsKIAl1bG9uZyB0bXA7Ci0JaW50IHRwYXIgPSAyLCB0cmFzX2Nsb2NrcyA9IDUsIHJlZ2lzdGVyZWQgPSAxLCBlY2MgPSAyOworCWludCB0cGFyID0gMiwgdHJhc19jbG9ja3MgPSA1LCByZWdpc3RlcmVkID0gMTsKKwlfX21heWJlX3VudXNlZCBpbnQgZWNjID0gMjsKIAogCWlmICghaW5mb1swXS5iYW5rcyAmJiAhaW5mb1sxXS5iYW5rcykKIAkJcmV0dXJuIDA7CkBAIC00MDcsOCArNDA5LDkgQEAKIC8qIHNldHMgdXAgdGhlIEdUIHByb3Blcmx5IHdpdGggaW5mb3JtYXRpb24gcGFzc2VkIGluICovCiBzdGF0aWMgaW50IHNldHVwX3NkcmFtIChzZHJhbV9pbmZvX3QgKiBpbmZvKQogewotCXVsb25nIHRtcCwgY2hlY2s7CisJdWxvbmcgdG1wOwogCXVsb25nICphZGRyID0gMDsKKwlfX21heWJlX3VudXNlZCB1bG9uZyBjaGVjazsKIAlpbnQgaTsKIAogCS8qIHNhbml0eSBjaGVja2luZyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvenVtYV9wYmJfbWJveC5jIGIvYm9hcmQvZXZiNjQyNjAvenVtYV9wYmJfbWJveC5jCmluZGV4IDhlMzgxMDIuLjYyMWM2NGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL3p1bWFfcGJiX21ib3guYworKysgYi9ib2FyZC9ldmI2NDI2MC96dW1hX3BiYl9tYm94LmMKQEAgLTEyLDU3ICsxMiw2MiBAQAogCiBzdGF0aWMgaW50IHp1bWFfbWJveF93cml0ZShzdHJ1Y3QgX3p1bWFfbWJveF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGRhdGEpCiB7Ci0gIHVuc2lnbmVkIGludCBzdGF0dXMsIGNvdW50ID0gMCwgaTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBjb3VudCA9IDAsIGk7CiAKLSAgc3RhdHVzID0gKHZvbGF0aWxlIGludClsZTMyX3RvX2NwdShkZXYtPnNpcC0+bWJveF9zdGF0dXMpOworCXN0YXR1cyA9ICh2b2xhdGlsZSBpbnQpIGxlMzJfdG9fY3B1KGRldi0+c2lwLT5tYm94X3N0YXR1cyk7CiAKLSAgd2hpbGUoKHN0YXR1cyAmIE9VVF9QRU5ESU5HKSAmJiBjb3VudCA8IDEwMDApIHsKLSAgICBjb3VudCsrOwotICAgIGZvcihpPTA7aTwxMDAwO2krKyk7Ci0gICAgc3RhdHVzID0gKHZvbGF0aWxlIGludClsZTMyX3RvX2NwdShkZXYtPnNpcC0+bWJveF9zdGF0dXMpOwotICB9Ci0gIGlmKGNvdW50IDwgMTAwMCkgewotICAgIC8qIGlmIFNFVCBpdCBtZWFucyBtc2cgcGVuZGluZyAqLwotICAgIC8qIHByaW50ZigibWJveCByZWFsIHdyaXRlICUwOHhcbiIsZGF0YSk7ICovCi0gICAgZGV2LT5zaXAtPm1ib3hfb3V0ID0gY3B1X3RvX2xlMzIoZGF0YSk7Ci0gICAgcmV0dXJuIDQ7Ci0gIH0KKwl3aGlsZSAoKHN0YXR1cyAmIE9VVF9QRU5ESU5HKSAmJiBjb3VudCA8IDEwMDApIHsKKwkJY291bnQrKzsKKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKwkJCTsKKwkJc3RhdHVzID0gKHZvbGF0aWxlIGludCkgbGUzMl90b19jcHUoZGV2LT5zaXAtPm1ib3hfc3RhdHVzKTsKKwl9CisJaWYgKGNvdW50IDwgMTAwMCkgeworCQkvKiBpZiBTRVQgaXQgbWVhbnMgbXNnIHBlbmRpbmcgKi8KKwkJLyogcHJpbnRmKCJtYm94IHJlYWwgd3JpdGUgJTA4eFxuIixkYXRhKTsgKi8KKwkJZGV2LT5zaXAtPm1ib3hfb3V0ID0gY3B1X3RvX2xlMzIoZGF0YSk7CisJCXJldHVybiA0OworCX0KIAotICBwcmludGYoIm1ib3ggdHggdGltZW91dFxuIik7Ci0gIHJldHVybiAwOworCXByaW50ZigibWJveCB0eCB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB6dW1hX21ib3hfcmVhZChzdHJ1Y3QgX3p1bWFfbWJveF9kZXYgKmRldiwgdW5zaWduZWQgaW50ICpkYXRhKQogewotICB1bnNpZ25lZCBpbnQgc3RhdHVzLCBjb3VudCA9IDAsIGk7CisJdW5zaWduZWQgaW50IHN0YXR1cywgY291bnQgPSAwLCBpOwogCi0gIHN0YXR1cyA9ICh2b2xhdGlsZSBpbnQpbGUzMl90b19jcHUoZGV2LT5zaXAtPm1ib3hfc3RhdHVzKTsKKwlzdGF0dXMgPSAodm9sYXRpbGUgaW50KSBsZTMyX3RvX2NwdShkZXYtPnNpcC0+bWJveF9zdGF0dXMpOwogCi0gIHdoaWxlKCEoc3RhdHVzICYgSU5fVkFMSUQpICYmIGNvdW50IDwgMTAwMCkgewotICAgIGNvdW50Kys7Ci0gICAgZm9yKGk9MDtpPDEwMDA7aSsrKTsKLSAgICBzdGF0dXMgPSAodm9sYXRpbGUgaW50KWxlMzJfdG9fY3B1KGRldi0+c2lwLT5tYm94X3N0YXR1cyk7Ci0gIH0KLSAgaWYoY291bnQgPCAxMDAwKSB7Ci0gICAgLyogaWYgU0VUIGl0IG1lYW5zIG1zZyBwZW5kaW5nICovCi0gICAgKmRhdGE9bGUzMl90b19jcHUoZGV2LT5zaXAtPm1ib3hfaW4pOwotICAgIC8qcHJpbnRmKCJtYm94IHJlYWwgcmVhZCAlMDh4XG4iLCAqZGF0YSk7ICovCi0gICAgcmV0dXJuIDQ7Ci0gIH0KLSAgcHJpbnRmKCJtYm94IHJ4IHRpbWVvdXRcbiIpOwotICByZXR1cm4gMDsKKwl3aGlsZSAoIShzdGF0dXMgJiBJTl9WQUxJRCkgJiYgY291bnQgPCAxMDAwKSB7CisJCWNvdW50Kys7CisJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCisJCQk7CisJCXN0YXR1cyA9ICh2b2xhdGlsZSBpbnQpIGxlMzJfdG9fY3B1KGRldi0+c2lwLT5tYm94X3N0YXR1cyk7CisJfQorCWlmIChjb3VudCA8IDEwMDApIHsKKwkJLyogaWYgU0VUIGl0IG1lYW5zIG1zZyBwZW5kaW5nICovCisJCSpkYXRhID0gbGUzMl90b19jcHUoZGV2LT5zaXAtPm1ib3hfaW4pOworCQkvKnByaW50ZigibWJveCByZWFsIHJlYWQgJTA4eFxuIiwgKmRhdGEpOyAqLworCQlyZXR1cm4gNDsKKwl9CisJcHJpbnRmKCJtYm94IHJ4IHRpbWVvdXRcbiIpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHp1bWFfbWJveF9kb19vbmVfbWFpbGJveCh1bnNpZ25lZCBpbnQgb3V0LCB1bnNpZ25lZCBpbnQgKmluKQogewotICBpbnQgcmV0OwotICByZXQ9enVtYV9tYm94X3dyaXRlKCZ6dW1hX21ib3hfZGV2LG91dCk7Ci0gIC8qcHJpbnRmKCJ3cml0ZSAweCUwOHggKCVkIGJ5dGVzKVxuIiwgb3V0LCByZXQpOyAqLwotICBpZihyZXQhPTQpIHJldHVybiAtMTsKLSAgcmV0PXp1bWFfbWJveF9yZWFkKCZ6dW1hX21ib3hfZGV2LGluKTsKLSAgLypwcmludGYoInJlYWQgMHglMDh4ICglZCBieXRlcylcbiIsICppbiwgcmV0KTsgKi8KLSAgaWYocmV0IT00KSByZXR1cm4gLTE7Ci0gIHJldHVybiAwOworCWludCByZXQ7CisKKwlyZXQgPSB6dW1hX21ib3hfd3JpdGUoJnp1bWFfbWJveF9kZXYsIG91dCk7CisJLypwcmludGYoIndyaXRlIDB4JTA4eCAoJWQgYnl0ZXMpXG4iLCBvdXQsIHJldCk7ICovCisJaWYgKHJldCAhPSA0KQorCQlyZXR1cm4gLTE7CisJcmV0ID0genVtYV9tYm94X3JlYWQoJnp1bWFfbWJveF9kZXYsIGluKTsKKwkvKnByaW50ZigicmVhZCAweCUwOHggKCVkIGJ5dGVzKVxuIiwgKmluLCByZXQpOyAqLworCWlmIChyZXQgIT0gNCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOwogfQogCiAKQEAgLTcwLDgxICs3NSw5MyBAQAogCiBzdGF0aWMgaW50IHp1bWFfbWJveF9kb19hbGxfbWFpbGJveCh2b2lkKQogewotICB1bnNpZ25lZCBpbnQgZGF0YV9pbjsKLSAgdW5zaWduZWQgc2hvcnQgc2RhdGFfaW47CisJdW5zaWduZWQgaW50IGRhdGFfaW47CisJdW5zaWduZWQgc2hvcnQgc2RhdGFfaW47CiAKLSAgUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX1NUQVJULCAmZGF0YV9pbikpOworCVJFVF9JRl9GQUlMRUQoenVtYV9tYm94X2RvX29uZV9tYWlsYm94KFpVTUFfTUJPWE1TR19TVEFSVCwgJmRhdGFfaW4pKTsKIAotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfTUFDTCwgJmRhdGFfaW4pKTsKLSAgbWVtY3B5KHp1bWFfYWNjX21hYysyLCZkYXRhX2luLDQpOwotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfTUFDSCwgJmRhdGFfaW4pKTsKLSAgc2RhdGFfaW49ZGF0YV9pbiYweGZmZmY7Ci0gIG1lbWNweSh6dW1hX2FjY19tYWMsJnNkYXRhX2luLDIpOworCVJFVF9JRl9GQUlMRUQoenVtYV9tYm94X2RvX29uZV9tYWlsYm94KFpVTUFfTUJPWE1TR19NQUNMLCAmZGF0YV9pbikpOworCW1lbWNweSh6dW1hX2FjY19tYWMgKyAyLCAmZGF0YV9pbiwgNCk7CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX01BQ0gsICZkYXRhX2luKSk7CisJc2RhdGFfaW4gPSBkYXRhX2luICYgMHhmZmZmOworCW1lbWNweSh6dW1hX2FjY19tYWMsICZzZGF0YV9pbiwgMik7CiAKLSAgUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX0lQLCAmZGF0YV9pbikpOwotICB6dW1hX2lwPWRhdGFfaW47CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX0lQLCAmZGF0YV9pbikpOworCXp1bWFfaXAgPSBkYXRhX2luOwogCi0gIFJFVF9JRl9GQUlMRUQoenVtYV9tYm94X2RvX29uZV9tYWlsYm94KFpVTUFfTUJPWE1TR19TTE9ULCAmZGF0YV9pbikpOwotICB6dW1hX3Nsb3RfYmFjPWRhdGFfaW4+PjM7CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX1NMT1QsICZkYXRhX2luKSk7CisJenVtYV9zbG90X2JhYyA9IGRhdGFfaW4gPj4gMzsKIAotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfQkFVRCwgJmRhdGFfaW4pKTsKLSAgenVtYV9jb25zb2xlX2JhdWQgPSBkYXRhX2luICYgMHhmZmZmOwotICB6dW1hX2RlYnVnX2JhdWQgICA9IGRhdGFfaW4gPj4gMTY7CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX0JBVUQsICZkYXRhX2luKSk7CisJenVtYV9jb25zb2xlX2JhdWQgPSBkYXRhX2luICYgMHhmZmZmOworCXp1bWFfZGVidWdfYmF1ZCA9IGRhdGFfaW4gPj4gMTY7CiAKLSAgUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3goWlVNQV9NQk9YTVNHX0VOR19QUlZfTUFDTCwgJmRhdGFfaW4pKTsKLSAgbWVtY3B5KHp1bWFfcHJ2X21hYysyLCZkYXRhX2luLDQpOwotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfRU5HX1BSVl9NQUNILCAmZGF0YV9pbikpOwotICBzZGF0YV9pbj1kYXRhX2luJjB4ZmZmZjsKLSAgbWVtY3B5KHp1bWFfcHJ2X21hYywmc2RhdGFfaW4sMik7CisJUkVUX0lGX0ZBSUxFRCh6dW1hX21ib3hfZG9fb25lX21haWxib3gKKwkJICAgICAgKFpVTUFfTUJPWE1TR19FTkdfUFJWX01BQ0wsICZkYXRhX2luKSk7CisJbWVtY3B5KHp1bWFfcHJ2X21hYyArIDIsICZkYXRhX2luLCA0KTsKKwlSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveAorCQkgICAgICAoWlVNQV9NQk9YTVNHX0VOR19QUlZfTUFDSCwgJmRhdGFfaW4pKTsKKwlzZGF0YV9pbiA9IGRhdGFfaW4gJiAweGZmZmY7CisJbWVtY3B5KHp1bWFfcHJ2X21hYywgJnNkYXRhX2luLCAyKTsKIAotICBSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfRE9ORSwgJmRhdGFfaW4pKTsKKwlSRVRfSUZfRkFJTEVEKHp1bWFfbWJveF9kb19vbmVfbWFpbGJveChaVU1BX01CT1hNU0dfRE9ORSwgJmRhdGFfaW4pKTsKIAotICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgdm9pZAotenVtYV9tYm94X2R1bXAodm9pZCkKK3N0YXRpYyB2b2lkIHp1bWFfbWJveF9kdW1wKHZvaWQpCiB7Ci0gIHByaW50ZigiQUNDIE1BQz0lMDR4JTA4eFxuIiwqKHVuc2lnbmVkIHNob3J0ICopKCZ6dW1hX2FjY19tYWMpLCoodW5zaWduZWQgaW50ICopKChjaGFyICopJnp1bWFfYWNjX21hYysyKSk7Ci0gIHByaW50ZigiUFJWIE1BQz0lMDR4JTA4eFxuIiwqKHVuc2lnbmVkIHNob3J0ICopKCZ6dW1hX3Bydl9tYWMpLCoodW5zaWduZWQgaW50ICopKChjaGFyICopJnp1bWFfcHJ2X21hYysyKSk7Ci0gIHByaW50Zigic2xvdDpiYWM9JWQ6JWRcbiIsKHp1bWFfc2xvdF9iYWM+PjIpJjB4ZiwgenVtYV9zbG90X2JhYyAmIDB4Myk7Ci0gIHByaW50ZigiQkFVRDE9JWQgQkFVRDI9JWRcbiIsenVtYV9jb25zb2xlX2JhdWQsenVtYV9kZWJ1Z19iYXVkKTsKKwl1bnNpZ25lZCBzaG9ydCBzOworCXVuc2lnbmVkIGludCBpOworCisJbWVtY3B5KCZzLCAmenVtYV9hY2NfbWFjLCAgICBzaXplb2YocykpOworCW1lbWNweSgmaSwgJnp1bWFfYWNjX21hY1syXSwgc2l6ZW9mKGkpKTsKKwlwcmludGYoIkFDQyBNQUM9JTA0eCUwOHhcbiIsIHMsIGkpOworCisJbWVtY3B5KCZzLCAmenVtYV9wcnZfbWFjLCAgICBzaXplb2YocykpOworCW1lbWNweSgmcywgJnp1bWFfcHJ2X21hY1syXSwgc2l6ZW9mKGkpKTsKKwlwcmludGYoIlBSViBNQUM9JTA0eCUwOHhcbiIsIHMsIGkpOworCisJcHJpbnRmKCJzbG90OmJhYz0lZDolZFxuIiwKKwkJKHp1bWFfc2xvdF9iYWMgPj4gMikgJiAweGYsCisJCXp1bWFfc2xvdF9iYWMgJiAweDMpOworCisJcHJpbnRmKCJCQVVEMT0lZCBCQVVEMj0lZFxuIiwKKwkJenVtYV9jb25zb2xlX2JhdWQsCisJCXp1bWFfZGVidWdfYmF1ZCk7CiB9CiAKIAotc3RhdGljIHZvaWQKLXp1bWFfbWJveF9zZXRlbnYodm9pZCkKK3N0YXRpYyB2b2lkIHp1bWFfbWJveF9zZXRlbnYodm9pZCkKIHsKLSAgY2hhciAqZGF0YSwgYnVmWzMyXTsKLSAgdW5zaWduZWQgY2hhciBzYXZlID0gMDsKKwljaGFyICpkYXRhLCBidWZbMzJdOworCXVuc2lnbmVkIGNoYXIgc2F2ZSA9IDA7CiAKLSAgZGF0YSA9IGdldGVudigiYmF1ZHJhdGUiKTsKKwlkYXRhID0gZ2V0ZW52KCJiYXVkcmF0ZSIpOwogCi0gIGlmKCFkYXRhIHx8ICh6dW1hX2NvbnNvbGVfYmF1ZCAhPSBzaW1wbGVfc3RydG91bChkYXRhLCBOVUxMLCAxMCkpKSB7Ci0gICAgc3ByaW50ZihidWYsICIlNmQiLCB6dW1hX2NvbnNvbGVfYmF1ZCk7Ci0gICAgc2V0ZW52KCJiYXVkcmF0ZSIsIGJ1Zik7Ci0gICAgc2F2ZT0xOwotICAgIHByaW50ZigiYmF1ZHJhdGUgZG9lc24ndCBtYXRjaCBmcm9tIG1ib3hcbiIpOwotICB9CisJaWYgKCFkYXRhIHx8ICh6dW1hX2NvbnNvbGVfYmF1ZCAhPSBzaW1wbGVfc3RydG91bChkYXRhLCBOVUxMLCAxMCkpKSB7CisJCXNwcmludGYoYnVmLCAiJTZkIiwgenVtYV9jb25zb2xlX2JhdWQpOworCQlzZXRlbnYoImJhdWRyYXRlIiwgYnVmKTsKKwkJc2F2ZSA9IDE7CisJCXByaW50ZigiYmF1ZHJhdGUgZG9lc24ndCBtYXRjaCBmcm9tIG1ib3hcbiIpOworCX0KIAotICBpcF90b19zdHJpbmcoenVtYV9pcCwgYnVmKTsKLSAgc2V0ZW52KCJpcGFkZHIiLCBidWYpOworCWlwX3RvX3N0cmluZyh6dW1hX2lwLCBidWYpOworCXNldGVudigiaXBhZGRyIiwgYnVmKTsKIAotICBzcHJpbnRmKGJ1ZiwiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAotCSAgenVtYV9wcnZfbWFjWzBdLAotCSAgenVtYV9wcnZfbWFjWzFdLAotCSAgenVtYV9wcnZfbWFjWzJdLAotCSAgenVtYV9wcnZfbWFjWzNdLAotCSAgenVtYV9wcnZfbWFjWzRdLAotCSAgenVtYV9wcnZfbWFjWzVdKTsKLSAgc2V0ZW52KCJldGhhZGRyIiwgYnVmKTsKKwlzcHJpbnRmKGJ1ZiwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJenVtYV9wcnZfbWFjWzBdLAorCQl6dW1hX3Bydl9tYWNbMV0sCisJCXp1bWFfcHJ2X21hY1syXSwKKwkJenVtYV9wcnZfbWFjWzNdLCB6dW1hX3Bydl9tYWNbNF0sIHp1bWFfcHJ2X21hY1s1XSk7CisJc2V0ZW52KCJldGhhZGRyIiwgYnVmKTsKIAotICBzcHJpbnRmKGJ1ZiwiJTAyeCIsenVtYV9zbG90X2JhYyk7Ci0gIHNldGVudigiYmFjc2xvdCIsIGJ1Zik7CisJc3ByaW50ZihidWYsICIlMDJ4IiwgenVtYV9zbG90X2JhYyk7CisJc2V0ZW52KCJiYWNzbG90IiwgYnVmKTsKIAotICBpZihzYXZlKQotICAgIHNhdmVlbnYoKTsKKwlpZiAoc2F2ZSkKKwkJc2F2ZWVudigpOwogfQogCiAvKioKQEAgLTE1MywzNyArMTcwLDM5IEBACiAKIGludCB6dW1hX21ib3hfaW5pdCh2b2lkKQogewotICB1bnNpZ25lZCBpbnQgaW9iYXNlOwotICBtZW1zZXQoJnp1bWFfbWJveF9kZXYsIDAsIHNpemVvZihzdHJ1Y3QgX3p1bWFfbWJveF9kZXYpKTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlOwogCi0gIHp1bWFfbWJveF9kZXYuZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFZFTkRPUl9JRF9aVU1BLCBERVZJQ0VfSURfWlVNQV9QQkIsIDApOworCW1lbXNldCgmenVtYV9tYm94X2RldiwgMCwgc2l6ZW9mKHN0cnVjdCBfenVtYV9tYm94X2RldikpOwogCi0gIGlmKHp1bWFfbWJveF9kZXYuZGV2ID09IC0xKSB7Ci0gICAgcHJpbnRmKCJubyB6dW1hIHBiYlxuIik7Ci0gICAgcmV0dXJuIC0xOwotICB9CisJenVtYV9tYm94X2Rldi5kZXYgPQorCQlwY2lfZmluZF9kZXZpY2UoVkVORE9SX0lEX1pVTUEsIERFVklDRV9JRF9aVU1BX1BCQiwgMCk7CiAKLSAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHp1bWFfbWJveF9kZXYuZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsICZpb2Jhc2UpOworCWlmICh6dW1hX21ib3hfZGV2LmRldiA9PSAtMSkgeworCQlwcmludGYoIm5vIHp1bWEgcGJiXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICBpb2Jhc2UgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoenVtYV9tYm94X2Rldi5kZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgJmlvYmFzZSk7CiAKLSAgenVtYV9tYm94X2Rldi5zaXAgPSAoUEJCX0RNQV9SRUdfTUFQICopaW9iYXNlOworCWlvYmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwogCi0gIHp1bWFfbWJveF9kZXYuc2lwLT5pbnRfbWFzay53b3JkPTA7CisJenVtYV9tYm94X2Rldi5zaXAgPSAoUEJCX0RNQV9SRUdfTUFQICopIGlvYmFzZTsKIAotICBwcmludGYoInBiYiBAICVwIHYlZC4lZCwgdGltZXN0YW1wICUwOHhcbiIsIHp1bWFfbWJveF9kZXYuc2lwLAotCSB6dW1hX21ib3hfZGV2LnNpcC0+dmVyc2lvbi5wY2lfYml0cy5yZXZfbWFqb3IsCi0JIHp1bWFfbWJveF9kZXYuc2lwLT52ZXJzaW9uLnBjaV9iaXRzLnJldl9taW5vciwKLQkgenVtYV9tYm94X2Rldi5zaXAtPnRpbWVzdGFtcCk7CisJenVtYV9tYm94X2Rldi5zaXAtPmludF9tYXNrLndvcmQgPSAwOwogCi0gIGlmICh6dW1hX21ib3hfZG9fYWxsX21haWxib3goKSA9PSAtMSkgewotCSAgcHJpbnRmKCJtYWlsYm94IGZhaWxlZC4uIG5vIEFDQz9cbiIpOwotCSAgcmV0dXJuIC0xOwotICB9CisJcHJpbnRmKCJwYmIgQCAlcCB2JWQuJWQsIHRpbWVzdGFtcCAlMDh4XG4iLCB6dW1hX21ib3hfZGV2LnNpcCwKKwkgICAgICAgenVtYV9tYm94X2Rldi5zaXAtPnZlcnNpb24ucGNpX2JpdHMucmV2X21ham9yLAorCSAgICAgICB6dW1hX21ib3hfZGV2LnNpcC0+dmVyc2lvbi5wY2lfYml0cy5yZXZfbWlub3IsCisJICAgICAgIHp1bWFfbWJveF9kZXYuc2lwLT50aW1lc3RhbXApOwogCi0gIHp1bWFfbWJveF9kdW1wKCk7CisJaWYgKHp1bWFfbWJveF9kb19hbGxfbWFpbGJveCgpID09IC0xKSB7CisJCXByaW50ZigibWFpbGJveCBmYWlsZWQuLiBubyBBQ0M/XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICB6dW1hX21ib3hfc2V0ZW52KCk7CisJenVtYV9tYm94X2R1bXAoKTsKIAotICByZXR1cm4gMDsKKwl6dW1hX21ib3hfc2V0ZW52KCk7CisKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vY2RzX3BjaV9mdC5jIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9jZHNfcGNpX2Z0LmMKaW5kZXggNmYyMjFhZi4uOGEwOWY5OSAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9jZHNfcGNpX2Z0LmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9jZHNfcGNpX2Z0LmMKQEAgLTI4LDEzICsyOCwxMiBAQAogI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQogc3RhdGljIHZvaWQgY2RzX3BjaV9maXh1cCh2b2lkICpibG9iKQogewotCWludCBub2RlLCB0bXBbMl07CisJaW50IG5vZGU7CiAJY29uc3QgY2hhciAqcGF0aDsKIAlpbnQgbGVuLCBzbG90LCBpOwogCXUzMiAqbWFwID0gTlVMTDsKIAogCW5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoYmxvYiwgIi9hbGlhc2VzIik7Ci0JdG1wWzBdID0gMDsKIAlpZiAobm9kZSA+PSAwKSB7CiAJCXBhdGggPSBmZHRfZ2V0cHJvcChibG9iLCBub2RlLCAicGNpMCIsIE5VTEwpOwogCQlpZiAocGF0aCkgewpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9pY3MzMDdfY2xrLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2ljczMwN19jbGsuYwppbmRleCA4OWQ4ODEwLi42YWNiYzM2IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2ljczMwN19jbGsuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2ljczMwN19jbGsuYwpAQCAtMzEsMTIgKzMxLDgxIEBACiAjaW5jbHVkZSAicGl4aXMuaCIKICNlbmRpZgogCisvKiBkZWZpbmUgZm9yIFNZUyBDTEsgb3IgQ0xLMUZyZXF1ZW5jeSAqLworI2RlZmluZSBUVEwJCTEKKyNkZWZpbmUgQ0xLMgkJMAorI2RlZmluZSBDUllTVEFMCQkwCisjZGVmaW5lIE1BWF9WRFcJCSg1MTEgKyA4KQorI2RlZmluZSBNQVhfUkRXCQkoMTI3ICsgMikKKyNkZWZpbmUgTUlOX1ZEVwkJKDQgKyA4KQorI2RlZmluZSBNSU5fUkRXCQkoMSArIDIpCisjZGVmaW5lIE5VTV9PRF9TRVRUSU5HCTgKKy8qCisgKiBUaGVzZSBkZWZpbmVzIGNvdmVyIHRoZSBpbmR1c3RyaWFsIHRlbXBlcmF0dXJlIHJhbmdlIHBhcnQsCisgKiBmb3IgY29tbWVyY2lhbCwgY2hhbmdlIGJlbG93IHRvIDQwMDAwMCBhbmQgNTUwMDAsIHJlc3BlY3RpdmVseQorICovCisjZGVmaW5lIE1BWF9WQ08JCTM2MDAwMAorI2RlZmluZSBNSU5fVkNPCQk2MDAwMAorCiAvKiBkZWNvZGUgU1swLTJdIHRvIE91dHB1dCBEaXZpZGVyIChPRCkgKi8KIHN0YXRpYyB1OCBpY3MzMDdfc190b19vZFtdID0gewogCTEwLCAyLCA4LCA0LCA1LCA3LCAzLCA2CiB9OwogCiAvKgorICogRmluZCBvbmUgc29sdXRpb24gdG8gZ2VuZXJhdGUgcmVxdWlyZWQgZnJlcXVlbmN5IGZvciBTWVNDTEsKKyAqIG91dF9mcmVxOiBLSHosIHJlcXVpcmVkIGZyZXF1ZW5jeSB0byB0aGUgU1lTQ0xLCisgKiB0aGUgcmVzdWx0IHdpbGwgYmUgcmV0dW5lZCB3aXRoIGNvbXBvbmVudCBSRFcsIFZEVywgT0QsIFRUTCwKKyAqIENMSzIgYW5kIGNyeXN0YWwKKyAqLwordW5zaWduZWQgbG9uZyBpY3MzMDdfc3lzY2xrX2NhbGN1bGF0b3IodW5zaWduZWQgbG9uZyBvdXRfZnJlcSkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nIGlucHV0X2ZyZXEgPSBDT05GSUdfSUNTMzA3X1JFRkNMS19IWjsKKwl1bnNpZ25lZCBsb25nIHZkdywgcmR3LCBvZHAsIHNfdmR3ID0gMCwgc19yZHcgPSAwLCBzX29kcCA9IDAsIG9kOworCXVuc2lnbmVkIGxvbmcgdG1wX291dCwgZGlmZiwgcmVzdWx0ID0gMDsKKwlpbnQgZm91bmQgPSAwOworCisJZm9yIChvZHAgPSAwOyBvZHAgPCBOVU1fT0RfU0VUVElORzsgb2RwKyspIHsKKwkJb2QgPSBpY3MzMDdfc190b19vZFtvZHBdOworCQlpZiAob2QgKiBvdXRfZnJlcSA8IE1JTl9WQ08gfHwgb2QgKiBvdXRfZnJlcSA+IE1BWF9WQ08pCisJCQljb250aW51ZTsKKwkJZm9yIChyZHcgPSBNSU5fUkRXOyByZHcgPD0gTUFYX1JEVzsgcmR3KyspIHsKKwkJCS8qIENhbGN1bGF0ZSB0aGUgVkRXICovCisJCQl2ZHcgPSBvdXRfZnJlcSAqIDEwMDAgKiBvZCAqIHJkdyAvIChpbnB1dF9mcmVxICogMik7CisJCQlpZiAodmR3ID4gTUFYX1ZEVykKKwkJCQl2ZHcgPSBNQVhfVkRXOworCQkJaWYgKHZkdyA8IE1JTl9WRFcpCisJCQkJY29udGludWU7CisJCQkvKiBDYWxjdWxhdGUgdGhlIHRlbXAgb3V0IGZyZXF1ZW5jeSAqLworCQkJdG1wX291dCA9IGlucHV0X2ZyZXEgKiAyICogdmR3IC8gKHJkdyAqIG9kICogMTAwMCk7CisJCQlkaWZmID0gTUFYKG91dF9mcmVxLCB0bXBfb3V0KSAtIE1JTihvdXRfZnJlcSwgdG1wX291dCk7CisJCQkvKgorCQkJICogY2FsY3VsYXRlIHRoZSBwZXJjZW50LCB0aGUgcHJlY2lzaW9uIGlzIDEvMTAwMAorCQkJICogSWYgZ3JlYXRlciB0aGFuIDEvMTAwMCwgY29udGludWUKKwkJCSAqIG90aGVyd2lzZSwgd2UgdGhpbmsgdGhlIHNvbHV0aW9uIGlzIHdlIHJlcXVpcmVkCisJCQkgKi8KKwkJCWlmIChkaWZmICogMTAwMCAvIG91dF9mcmVxID4gMSkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UgeworCQkJCXNfdmR3ID0gdmR3OworCQkJCXNfcmR3ID0gcmR3OworCQkJCXNfb2RwID0gb2RwOworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmb3VuZCkKKwkJcmVzdWx0ID0gKHNfcmR3IC0gMikgfCAoc192ZHcgLSA4KSA8PCA3IHwgc19vZHAgPDwgMTYgfAorCQkJQ0xLMiA8PCAxOSB8IFRUTCA8PCAyMSB8IENSWVNUQUwgPDwgMjI7CisKKwlkZWJ1ZygiSUNTMzA3LTAyOiBSRFc6ICVsZCwgVkRXOiAlbGQsIE9EOiAlZFxuIiwgc19yZHcgLSAyLCBzX3ZkdyAtIDgsCisJCQlpY3MzMDdfc190b19vZFtzX29kcF0pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCiAgKiBDYWxjdWxhdGUgZnJlcXVlbmN5IGJlaW5nIGdlbmVyYXRlZCBieSBJQ1MzMDctMDIgY2xvY2sgY2hpcCBiYXNlZCB1cG9uCiAgKiB0aGUgY29udHJvbCBieXRlcyBiZWluZyBwcm9ncmFtbWVkIGludG8gaXQuCiAgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vaWNzMzA3X2Nsay5oIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9pY3MzMDdfY2xrLmgKaW5kZXggZGIzZGJjNC4uMzc1NzkxMiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9pY3MzMDdfY2xrLmgKKysrIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9pY3MzMDdfY2xrLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KQEAgLTIzLDggKzIzLDEwIEBACiAjZGVmaW5lIF9fSUNTX0NMS19IXwkxCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9zeXNfY2xrKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2JvYXJkX2Rkcl9jbGsodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpY3MzMDdfc3lzY2xrX2NhbGN1bGF0b3IodW5zaWduZWQgbG9uZyBvdXRfZnJlcSk7CiAjZW5kaWYKIAogI2VuZGlmCS8qIF9fSUNTX0NMS19IXyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9uZ3BpeGlzLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL25ncGl4aXMuYwppbmRleCA3NjVmMDM1Li4yNzZhZTNjIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL25ncGl4aXMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL25ncGl4aXMuYwpAQCAtMTU2LDkgKzE1NiwyOSBAQAogfQogI2VuZGlmCiAKK3ZvaWQgcGl4aXNfc3lzY2xrX3NldCh1bnNpZ25lZCBsb25nIHN5c2NsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZyZXFfd29yZDsKKwl1OCBzY2xrMCwgc2NsazEsIHNjbGsyOworCisJZnJlcV93b3JkID0gaWNzMzA3X3N5c2Nsa19jYWxjdWxhdG9yKHN5c2Nsayk7CisJc2NsazIgPSBmcmVxX3dvcmQgJiAweGZmOworCXNjbGsxID0gKGZyZXFfd29yZCA+PiA4KSAmIDB4ZmY7CisJc2NsazAgPSAoZnJlcV93b3JkID4+IDE2KSAmIDB4ZmY7CisKKwkvKiBzZXQgU1lTQ0xLIGVuYWJsZSBiaXQgKi8KKwlQSVhJU19XUklURSh2Y2ZnZW4wLCAweDAxKTsKKworCS8qIFNZU0NMSyB0byByZXF1aXJlZCBmcmVxdWVuY3kgKi8KKwlQSVhJU19XUklURShzY2xrWzBdLCBzY2xrMCk7CisJUElYSVNfV1JJVEUoc2Nsa1sxXSwgc2NsazEpOworCVBJWElTX1dSSVRFKHNjbGtbMl0sIHNjbGsyKTsKK30KKwogaW50IHBpeGlzX3Jlc2V0X2NtZChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBzeXNjbGs7CiAJY2hhciAqcF9hbHRiYW5rID0gTlVMTDsKICNpZmRlZiBERUJVRwogCWNoYXIgKnBfZHVtcCA9IE5VTEw7CkBAIC0xODIsNiArMjAyLDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogI2VuZGlmCisJCWlmIChzdHJjbXAoYXJndltpXSwgInN5c2NsayIpID09IDApIHsKKwkJCXN5c2NsayA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbaSArIDFdLCBOVUxMLCAwKTsKKwkJCWkgKz0gMTsKKwkJCXBpeGlzX3N5c2Nsa19zZXQoc3lzY2xrKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJdW5rbm93bl9wYXJhbSA9IGFyZ3ZbaV07CiAJfQpAQCAtMjE5LDQgKzI0NSw1IEBACiAjaWZkZWYgREVCVUcKIAkicGl4aXNfcmVzZXQgZHVtcCAtIGRpc3BsYXkgdGhlIFBJWElTIHJlZ2lzdGVyc1xuIgogI2VuZGlmCisJInBpeGlzX3Jlc2V0IHN5c2NsayA8U1lTQ0xLX2ZyZXE+IC0gcmVzZXQgd2l0aCBTWVNDTEsgZnJlcXVlbmN5KEtIeilcbiIKIAkpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9waXhpcy5jIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9waXhpcy5jCmluZGV4IGEzNWI1Y2YuLjhkMDcwNjEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vcGl4aXMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL3BpeGlzLmMKQEAgLTM4MCw3ICszODAsNyBAQAogewogCWludCBpLCBqOwogCWludCBtdWxjb25zdDsKLQlpbnQgaW50YXJyX2xlbiwgbm9fZGVjID0gMDsKKwlpbnQgbm9fZGVjID0gMDsKIAl1bnNpZ25lZCBsb25nIGludHZhbCA9IDAsIGRlY3ZhbCA9IDA7CiAJY2hhciBpbnRhcnJbM10sIGRlY2FyclszXTsKIApAQCAtMzk5LDggKzM5OSw2IEBACiAJCWkrKzsKIAl9CiAKLQkvKiBBc3NpZ24gbGVuZ3RoIG9mIGludGVnZXIgcGFydCB0byBpbnRhcnJfbGVuLiAqLwotCWludGFycl9sZW4gPSBpOwogCWludGFycltpXSA9ICdcMCc7CiAKIAlpZiAobm9fZGVjKSB7CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvY29yZW5ldF9kcy9ldGhfaHlkcmEuYyBiL2JvYXJkL2ZyZWVzY2FsZS9jb3JlbmV0X2RzL2V0aF9oeWRyYS5jCmluZGV4IGE3YTVlMTMuLjk2MmYzODAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9jb3JlbmV0X2RzL2V0aF9oeWRyYS5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9jb3JlbmV0X2RzL2V0aF9oeWRyYS5jCkBAIC0zNzcsNyArMzc3LDYgQEAKIGludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaXMpCiB7CiAjaWZkZWYgQ09ORklHX0ZNQU5fRU5FVAotCXN0cnVjdCBkdHNlYyAqdHNlYyA9ICh2b2lkICopQ09ORklHX1NZU19GU0xfRk0xX0RUU0VDMV9BRERSOwogCXN0cnVjdCBmc2xfcHFfbWRpb19pbmZvIGR0c2VjX21kaW9faW5mbzsKIAlzdHJ1Y3QgdGdlY19tZGlvX2luZm8gdGdlY19tZGlvX2luZm87CiAJdW5zaWduZWQgaW50IGksIHNsb3Q7CkBAIC0zODcsMTMgKzM4Niw2IEBACiAKIAlpbml0aWFsaXplX2xhbmVfdG9fc2xvdCgpOwogCi0JLyoKLQkgKiBTZXQgVEJJUEEgb24gRk0xQERUU0VDMS4gIFRoaXMgaXMgbmVlZGVkIGZvciBjb25maWd1cmF0aW9ucwotCSAqIHdoZXJlIEZNMUBEVFNFQzEgaXNuJ3QgdXNlZCBkaXJlY3RseSwgc2luY2UgaXQgcHJvdmlkZXMKLQkgKiBNRElPIGZvciBvdGhlciBwb3J0cy4KLQkgKi8KLQlvdXRfYmUzMigmdHNlYy0+dGJpcGEsIENPTkZJR19TWVNfVEJJUEFfVkFMVUUpOwotCiAJLyogV2Ugd2FudCB0byB1c2UgdGhlIFBJWElTIHRvIGNvbmZpZ3VyZSBNVVggcm91dGluZywgbm90IEdQSU9zLiAqLwogCXNldGJpdHNfOCgmcGl4aXMtPmJyZGNmZzIsIEJSRENGRzJfUkVHX0dQSU9fU0VMKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL2NvcmVuZXRfZHMvZXRoX3A0MDgwLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29yZW5ldF9kcy9ldGhfcDQwODAuYwppbmRleCA3ZmYwMGQxLi4xZjAwYzE0IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvY29yZW5ldF9kcy9ldGhfcDQwODAuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvY29yZW5ldF9kcy9ldGhfcDQwODAuYwpAQCAtMzAxLDcgKzMwMSw2IEBACiB7CiAjaWZkZWYgQ09ORklHX0ZNQU5fRU5FVAogCWNjc3JfZ3Bpb190ICpwZ3BpbyA9ICh2b2lkICopKENPTkZJR19TWVNfTVBDODV4eF9HUElPX0FERFIpOwotCXN0cnVjdCBkdHNlYyAqdHNlYyA9ICh2b2lkICopQ09ORklHX1NZU19GU0xfRk0xX0RUU0VDMV9BRERSOwogCWludCBpOwogCXN0cnVjdCBmc2xfcHFfbWRpb19pbmZvIGR0c2VjX21kaW9faW5mbzsKIAlzdHJ1Y3QgdGdlY19tZGlvX2luZm8gdGdlY19tZGlvX2luZm87CkBAIC0zMjcsMTMgKzMyNiw2IEBACiAJCVNMT1Q1LCAvKiAxNyAtIEJhbmsgMzpEICovCiAJfTsKIAotCS8qCi0JICogU2V0IFRCSVBBIG9uIEZNMUBEVFNFQzEuICBUaGlzIGlzIG5lZWRlZCBmb3IgY29uZmlndXJhdGlvbnMKLQkgKiB3aGVyZSBGTTFARFRTRUMxIGlzbid0IHVzZWQgZGlyZWN0bHksIHNpbmNlIGl0IHByb3ZpZGVzCi0JICogTURJTyBmb3Igb3RoZXIgcG9ydHMuCi0JICovCi0Jb3V0X2JlMzIoJnRzZWMtPnRiaXBhLCBDT05GSUdfU1lTX1RCSVBBX1ZBTFVFKTsKLQogCS8qIEluaXRpYWxpemUgdGhlIG1kaW9fbXV4IGFycmF5IHNvIHdlIGNhbiByZWNvZ25pemUgZW1wdHkgZWxlbWVudHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZNX1BPUlRTOyBpKyspCiAJCW1kaW9fbXV4W2ldID0gRU1JX05PTkU7CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODM2MGVtZHMvbXBjODM2MGVtZHMuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzYwZW1kcy9tcGM4MzYwZW1kcy5jCmluZGV4IGJlNzY3NzQuLmJkZDEyOTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzYwZW1kcy9tcGM4MzYwZW1kcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzYwZW1kcy9tcGM4MzYwZW1kcy5jCkBAIC0xNzIsMTAgKzE3MiwxMSBAQAogCWlmIChib2FyZF9oYW5kbGVfZXJyYXR1bTIoKSkgewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1ZWNfaW5mbyk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWVjX2luZm8pOyBpKyspIHsKIAkJCXVlY19pbmZvW2ldLmVuZXRfaW50ZXJmYWNlX3R5cGUgPQogCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOwogCQkJdWVjX2luZm9baV0uc3BlZWQgPSBTUEVFRF8xMDAwOworCQl9CiAJfQogCXJldHVybiB1ZWNfZXRoX2luaXQoYmQsIHVlY19pbmZvLCBBUlJBWV9TSVpFKHVlY19pbmZvKSk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0OGNkcy9tcGM4NTQ4Y2RzLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0OGNkcy9tcGM4NTQ4Y2RzLmMKaW5kZXggYThkNTdjZC4uZTU1NjNmNyAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvbXBjODU0OGNkcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ4Y2RzL21wYzg1NDhjZHMuYwpAQCAtMzMsNiArMzMsOSBAQAogI2luY2x1ZGUgPG1paXBoeS5oPgogI2luY2x1ZGUgPGxpYmZkdC5oPgogI2luY2x1ZGUgPGZkdF9zdXBwb3J0Lmg+CisjaW5jbHVkZSA8dHNlYy5oPgorI2luY2x1ZGUgPGZzbF9tZGlvLmg+CisjaW5jbHVkZSA8bmV0ZGV2Lmg+CiAKICNpbmNsdWRlICIuLi9jb21tb24vY2FkbXVzLmgiCiAjaW5jbHVkZSAiLi4vY29tbW9uL2VlcHJvbS5oIgpAQCAtODEsMTIgKzg0LDEwIEBACiAJdm9sYXRpbGUgZnNsX2xiY190ICpsYmMgPSBMQkNfQkFTRV9BRERSOwogCiAJdWludCBjbGtkaXY7Ci0JdWludCBsYmNfaHo7CiAJc3lzX2luZm9fdCBzeXNpbmZvOwogCiAJZ2V0X3N5c19pbmZvKCZzeXNpbmZvKTsKIAljbGtkaXYgPSAobGJjLT5sY3JyICYgTENSUl9DTEtESVYpICogMjsKLQlsYmNfaHogPSBzeXNpbmZvLmZyZXFTeXN0ZW1CdXMgLyAxMDAwMDAwIC8gY2xrZGl2OwogCiAJZ3VyLT5sYml1aXBsbGRjcjEgPSAweDAwMDc4MDgwOwogCWlmIChjbGtkaXYgPT0gMTYpIHsKQEAgLTExNSw3ICsxMTYsNiBAQAogCXVpbnQgaWR4OwogCXZvbGF0aWxlIGZzbF9sYmNfdCAqbGJjID0gTEJDX0JBU0VfQUREUjsKIAl1aW50ICpzZHJhbV9hZGRyID0gKHVpbnQgKilDT05GSUdfU1lTX0xCQ19TRFJBTV9CQVNFOwotCXVpbnQgY3B1X2JvYXJkX3JldjsKIAl1aW50IGxzZG1yX2NvbW1vbjsKIAogCXB1dHMoIkxCQyBTRFJBTTogIik7CkBAIC0xMzcsNyArMTM3LDYgQEAKIAkvKgogCSAqIE1QQzg1NDggdXNlcyAibmV3IiAxNS0xNiBzdHlsZSBhZGRyZXNzaW5nLgogCSAqLwotCWNwdV9ib2FyZF9yZXYgPSBnZXRfY3B1X2JvYXJkX3JldmlzaW9uKCk7CiAJbHNkbXJfY29tbW9uID0gQ09ORklHX1NZU19MQkNfTFNETVJfQ09NTU9OOwogCWxzZG1yX2NvbW1vbiB8PSBMU0RNUl9CU01BMTUxNjsKIApAQCAtMjg3LDcgKzI4Niw3IEBACiAJZnNsX3BjaWVfaW5pdF9ib2FyZChmaXJzdF9mcmVlX2J1c25vKTsKIH0KIAotaW50IGxhc3Rfc3RhZ2VfaW5pdCh2b2lkKQordm9pZCBjb25maWd1cmVfcmdtaWkodm9pZCkKIHsKIAl1bnNpZ25lZCBzaG9ydCB0ZW1wOwogCkBAIC0yOTUsMjkgKzI5NCw3NyBAQAogCS8qIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0aGUgUkdNSUkgd29ya2luZyBmb3IgdGhlIDEuMysKIAkgKiBDRFMgY2FyZHMgKi8KIAlpZiAoZ2V0X2JvYXJkX3ZlcnNpb24oKSA9PSAgMHgxMykgewotCQltaWlwaHlfd3JpdGUoQ09ORklHX1RTRUMxX05BTUUsCisJCW1paXBoeV93cml0ZShERUZBVUxUX01JSV9OQU1FLAogCQkJCVRTRUMxX1BIWV9BRERSLCAyOSwgMTgpOwogCi0JCW1paXBoeV9yZWFkKENPTkZJR19UU0VDMV9OQU1FLAorCQltaWlwaHlfcmVhZChERUZBVUxUX01JSV9OQU1FLAogCQkJCVRTRUMxX1BIWV9BRERSLCAzMCwgJnRlbXApOwogCiAJCXRlbXAgPSAodGVtcCAmIDB4ZjAzZik7CiAJCXRlbXAgfD0gMiA8PCA5OwkJLyogMzYgb2htICovCiAJCXRlbXAgfD0gMiA8PCA2OwkJLyogMzkgb2htICovCiAKLQkJbWlpcGh5X3dyaXRlKENPTkZJR19UU0VDMV9OQU1FLAorCQltaWlwaHlfd3JpdGUoREVGQVVMVF9NSUlfTkFNRSwKIAkJCQlUU0VDMV9QSFlfQUREUiwgMzAsIHRlbXApOwogCi0JCW1paXBoeV93cml0ZShDT05GSUdfVFNFQzFfTkFNRSwKKwkJbWlpcGh5X3dyaXRlKERFRkFVTFRfTUlJX05BTUUsCiAJCQkJVFNFQzFfUEhZX0FERFIsIDI5LCAzKTsKIAotCQltaWlwaHlfd3JpdGUoQ09ORklHX1RTRUMxX05BTUUsCisJCW1paXBoeV93cml0ZShERUZBVUxUX01JSV9OQU1FLAogCQkJCVRTRUMxX1BIWV9BRERSLCAzMCwgMHg4MDAwKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm47CiB9CiAKKyNpZmRlZiBDT05GSUdfVFNFQ19FTkVUCitpbnQgYm9hcmRfZXRoX2luaXQoYmRfdCAqYmlzKQoreworCXN0cnVjdCBmc2xfcHFfbWRpb19pbmZvIG1kaW9faW5mbzsKKwlzdHJ1Y3QgdHNlY19pbmZvX3N0cnVjdCB0c2VjX2luZm9bNF07CisJaW50IG51bSA9IDA7CisKKyNpZmRlZiBDT05GSUdfVFNFQzEKKwlTRVRfU1REX1RTRUNfSU5GTyh0c2VjX2luZm9bbnVtXSwgMSk7CisJbnVtKys7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFNFQzIKKwlTRVRfU1REX1RTRUNfSU5GTyh0c2VjX2luZm9bbnVtXSwgMik7CisJbnVtKys7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFNFQzMKKwkvKiBpbml0aWFsaXplIFRTRUMzIG9ubHkgaWYgQ2FycmllciBpcyAxLjMgb3IgYWJvdmUgb24gQ0RTICovCisJaWYgKGdldF9ib2FyZF92ZXJzaW9uKCkgPj0gMHgxMykgeworCQlTRVRfU1REX1RTRUNfSU5GTyh0c2VjX2luZm9bbnVtXSwgMyk7CisJCXRzZWNfaW5mb1tudW1dLmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDsKKwkJbnVtKys7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1RTRUM0CisJLyogaW5pdGlhbGl6ZSBUU0VDNCBvbmx5IGlmIENhcnJpZXIgaXMgMS4zIG9yIGFib3ZlIG9uIENEUyAqLworCWlmIChnZXRfYm9hcmRfdmVyc2lvbigpID49IDB4MTMpIHsKKwkJU0VUX1NURF9UU0VDX0lORk8odHNlY19pbmZvW251bV0sIDQpOworCQl0c2VjX2luZm9bbnVtXS5pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7CisJCW51bSsrOworCX0KKyNlbmRpZgorCisJaWYgKCFudW0pIHsKKwkJcHJpbnRmKCJObyBUU0VDcyBpbml0aWFsaXplZFxuIik7CisKKwkJcmV0dXJuIDA7CisJfQorCisJbWRpb19pbmZvLnJlZ3MgPSAoc3RydWN0IHRzZWNfbWlpX21uZyAqKUNPTkZJR19TWVNfTURJT19CQVNFX0FERFI7CisJbWRpb19pbmZvLm5hbWUgPSBERUZBVUxUX01JSV9OQU1FOworCWZzbF9wcV9tZGlvX2luaXQoYmlzLCAmbWRpb19pbmZvKTsKKworCXRzZWNfZXRoX2luaXQoYmlzLCB0c2VjX2luZm8sIG51bSk7CisJY29uZmlndXJlX3JnbWlpKCk7CisKKwlyZXR1cm4gcGNpX2V0aF9pbml0KGJpcyk7Cit9CisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQogdm9pZCBmdF9wY2lfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9tcGM4NTY4bWRzLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9tcGM4NTY4bWRzLmMKaW5kZXggMjI1YzVkOC4uNmUzOTQ1ZSAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjhtZHMvbXBjODU2OG1kcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTY4bWRzL21wYzg1NjhtZHMuYwpAQCAtMTQ3LDEyICsxNDcsMTAgQEAKIAl2b2xhdGlsZSBmc2xfbGJjX3QgKmxiYyA9IExCQ19CQVNFX0FERFI7CiAKIAl1aW50IGNsa2RpdjsKLQl1aW50IGxiY19oejsKIAlzeXNfaW5mb190IHN5c2luZm87CiAKIAlnZXRfc3lzX2luZm8oJnN5c2luZm8pOwogCWNsa2RpdiA9IChsYmMtPmxjcnIgJiBMQ1JSX0NMS0RJVikgKiAyOwotCWxiY19oeiA9IHN5c2luZm8uZnJlcVN5c3RlbUJ1cyAvIDEwMDAwMDAgLyBjbGtkaXY7CiAKIAlndXItPmxiaXVpcGxsZGNyMSA9IDB4MDAwNzgwODA7CiAJaWYgKGNsa2RpdiA9PSAxNikgewpAQCAtMzAyLDYgKzMwMCw3IEBACiAJaTJjX3dyaXRlKDB4MjcsIDB4MywgMSwgJnZhbDgsIDEpOwogCiAJYXNtKCJlaWVpbyIpOworCWkyY19zZXRfYnVzX251bShvcmlnX2kyY19idXMpOwogfQogCiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjltZHMvbXBjODU2OW1kcy5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjltZHMvbXBjODU2OW1kcy5jCmluZGV4IDg5NTU3ZDIuLmQxMTljNjUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTY5bWRzL21wYzg1NjltZHMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OW1kcy9tcGM4NTY5bWRzLmMKQEAgLTMwMywxMiArMzAzLDEwIEBACiAJdm9sYXRpbGUgZnNsX2xiY190ICpsYmMgPSBMQkNfQkFTRV9BRERSOwogCiAJdWludCBjbGtkaXY7Ci0JdWludCBsYmNfaHo7CiAJc3lzX2luZm9fdCBzeXNpbmZvOwogCiAJZ2V0X3N5c19pbmZvKCZzeXNpbmZvKTsKIAljbGtkaXYgPSAobGJjLT5sY3JyICYgTENSUl9DTEtESVYpICogMjsKLQlsYmNfaHogPSBzeXNpbmZvLmZyZXFTeXN0ZW1CdXMgLyAxMDAwMDAwIC8gY2xrZGl2OwogCiAJb3V0X2JlMzIoJmd1ci0+bGJpdWlwbGxkY3IxLCAweDAwMDc4MDgwKTsKIAlpZiAoY2xrZGl2ID09IDE2KQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NzJkcy90bGIuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTcyZHMvdGxiLmMKaW5kZXggNTc1YmRiNS4uNmQ2MDUxMyAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NzJkcy90bGIuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU3MmRzL3RsYi5jCkBAIC01OCw2ICs1OCw3IEBACiAJCSAgICAgIE1BUzNfU1h8TUFTM19TUiwgTUFTMl9XfE1BUzJfRywKIAkJICAgICAgMCwgMiwgQk9PS0VfUEFHRVNaXzI1Nk0sIDEpLAogCisjaWZuZGVmIENPTkZJR19OQU5EX1NQTAogCS8qICpJKkcqIC0gUENJICovCiAJU0VUX1RMQl9FTlRSWSgxLCBDT05GSUdfU1lTX1BDSUUzX01FTV9WSVJULCBDT05GSUdfU1lTX1BDSUUzX01FTV9QSFlTLAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKQEAgLTc2LDYgKzc3LDcgQEAKIAlTRVRfVExCX0VOVFJZKDEsIENPTkZJR19TWVNfUENJRTNfSU9fVklSVCwgQ09ORklHX1NZU19QQ0lFM19JT19QSFlTLAogCQkgICAgICBNQVMzX1NYfE1BUzNfU1d8TUFTM19TUiwgTUFTMl9JfE1BUzJfRywKIAkJICAgICAgMCwgNiwgQk9PS0VfUEFHRVNaXzI1NkssIDEpLAorI2VuZGlmCiAKIAkvKiAqSSpHIC0gTkFORCAqLwogCVNFVF9UTEJfRU5UUlkoMSwgQ09ORklHX1NZU19OQU5EX0JBU0UsIENPTkZJR19TWVNfTkFORF9CQVNFX1BIWVMsCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvcDEwMTByZGIvcDEwMTByZGIuYyBiL2JvYXJkL2ZyZWVzY2FsZS9wMTAxMHJkYi9wMTAxMHJkYi5jCmluZGV4IDAzZTlkYTEuLmI5ZTY2ZjcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMTAxMHJkYi9wMTAxMHJkYi5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9wMTAxMHJkYi9wMTAxMHJkYi5jCkBAIC0yNzUsNyArMjc1LDkgQEAKIAogCWZkdF9maXh1cF9tZW1vcnkoYmxvYiwgKHU2NCliYXNlLCAodTY0KXNpemUpOwogCisjaWYgZGVmaW5lZChDT05GSUdfSEFTX0ZTTF9EUl9VU0IpCiAJZmR0X2ZpeHVwX2RyX3VzYihibG9iLCBiZCk7CisjZW5kaWYKIAogICAgICAgIC8qIFAxMDE0IGFuZCBpdCdzIGRlcml2YXRpdmVzIGRvbid0IHN1cHBvcnQgQ0FOIGFuZCBlVFNFQzMgKi8KIAlpZiAoY3B1LT5zb2NfdmVyID09IFNWUl9QMTAxNCB8fCBjcHUtPnNvY192ZXIgPT0gU1ZSX1AxMDE0X0UpIHsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGIvcDFfcDJfcmRiLmMgYi9ib2FyZC9mcmVlc2NhbGUvcDFfcDJfcmRiL3AxX3AyX3JkYi5jCmluZGV4IDg2NGIzY2UuLmNmYmFlNjkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGIvcDFfcDJfcmRiLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3AxX3AyX3JkYi9wMV9wMl9yZGIuYwpAQCAtMjY0LDcgKzI2NCw5IEBACiAKIAlmZHRfZml4dXBfbWVtb3J5KGJsb2IsICh1NjQpYmFzZSwgKHU2NClzaXplKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hBU19GU0xfRFJfVVNCKQogCWZkdF9maXh1cF9kcl91c2IoYmxvYiwgYmQpOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TRENBUkQpIHx8IGRlZmluZWQoQ09ORklHX1NQSUZMQVNIKQogCS8qIERlbGV0ZSBlTEJDIG5vZGUgYXMgaXQgaXMgbXV4ZWQgd2l0aCBVU0IyIGNvbnRyb2xsZXIgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGJfcGMvbGF3LmMgYi9ib2FyZC9mcmVlc2NhbGUvcDFfcDJfcmRiX3BjL2xhdy5jCmluZGV4IDVmZjZlYTYuLjc5Njg5MTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGJfcGMvbGF3LmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3AxX3AyX3JkYl9wYy9sYXcuYwpAQCAtMjUsMTUgKzI1LDE3IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiBzdHJ1Y3QgbGF3X2VudHJ5IGxhd190YWJsZVtdID0gewotCVNFVF9MQVcoQ09ORklHX1NZU19GTEFTSF9CQVNFX1BIWVMsIExBV19TSVpFXzY0TSwgTEFXX1RSR1RfSUZfTEJDKSwKKyNpZm5kZWYgQ09ORklHX05BTkRfU1BMCiAJU0VUX0xBVyhDT05GSUdfU1lTX0NQTERfQkFTRV9QSFlTLCBMQVdfU0laRV8xTSwgTEFXX1RSR1RfSUZfTEJDKSwKIAlTRVRfTEFXKENPTkZJR19TWVNfUE1DX0JBU0VfUEhZUywgTEFXX1NJWkVfNjRLLCBMQVdfVFJHVF9JRl9MQkMpLAotI2lmZGVmIENPTkZJR19TWVNfTkFORF9CQVNFX1BIWVMKLQlTRVRfTEFXKENPTkZJR19TWVNfTkFORF9CQVNFX1BIWVMsIExBV19TSVpFXzFNLCBMQVdfVFJHVF9JRl9MQkMpLAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1ZTQzczODVfRU5FVAogCVNFVF9MQVcoQ09ORklHX1NZU19WU0M3Mzg1X0JBU0VfUEhZUywgTEFXX1NJWkVfMU0sIExBV19UUkdUX0lGX0xCQyksCiAjZW5kaWYKKyNlbmRpZgorCVNFVF9MQVcoQ09ORklHX1NZU19GTEFTSF9CQVNFX1BIWVMsIExBV19TSVpFXzY0TSwgTEFXX1RSR1RfSUZfTEJDKSwKKyNpZmRlZiBDT05GSUdfU1lTX05BTkRfQkFTRV9QSFlTCisJU0VUX0xBVyhDT05GSUdfU1lTX05BTkRfQkFTRV9QSFlTLCBMQVdfU0laRV8xTSwgTEFXX1RSR1RfSUZfTEJDKSwKKyNlbmRpZgogfTsKIAogaW50IG51bV9sYXdfZW50cmllcyA9IEFSUkFZX1NJWkUobGF3X3RhYmxlKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGJfcGMvcDFfcDJfcmRiX3BjLmMgYi9ib2FyZC9mcmVlc2NhbGUvcDFfcDJfcmRiX3BjL3AxX3AyX3JkYl9wYy5jCmluZGV4IDQ2NzExMjguLmE2MGM1YTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMV9wMl9yZGJfcGMvcDFfcDJfcmRiX3BjLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL3AxX3AyX3JkYl9wYy9wMV9wMl9yZGJfcGMuYwpAQCAtNDQ0LDYgKzQ0NCw5IEBACiAJZmR0X2JvYXJkX2ZpeHVwX3FlX3BpbnMoYmxvYik7CiAjZW5kaWYKICNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSEFTX0ZTTF9EUl9VU0IpCiAJZmR0X2ZpeHVwX2RyX3VzYihibG9iLCBiZCk7CisjZW5kaWYKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL3AyMDQxcmRiL2V0aC5jIGIvYm9hcmQvZnJlZXNjYWxlL3AyMDQxcmRiL2V0aC5jCmluZGV4IDBhMWRmYTcuLjRiMGQ1NzcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9wMjA0MXJkYi9ldGguYworKysgYi9ib2FyZC9mcmVlc2NhbGUvcDIwNDFyZGIvZXRoLmMKQEAgLTEzOSw3ICsxMzksNiBAQAogaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKIHsKICNpZmRlZiBDT05GSUdfRk1BTl9FTkVUCi0Jc3RydWN0IGR0c2VjICp0c2VjID0gKHZvaWQgKilDT05GSUdfU1lTX0ZTTF9GTTFfRFRTRUMxX0FERFI7CiAJc3RydWN0IGZzbF9wcV9tZGlvX2luZm8gZHRzZWNfbWRpb19pbmZvOwogCXN0cnVjdCB0Z2VjX21kaW9faW5mbyB0Z2VjX21kaW9faW5mbzsKIAl1bnNpZ25lZCBpbnQgaSwgc2xvdDsKQEAgLTE0OSwxMyArMTQ4LDYgQEAKIAogCWluaXRpYWxpemVfbGFuZV90b19zbG90KCk7CiAKLQkvKgotCSAqIFNldCBUQklQQSBvbiBGTTFARFRTRUMxLiAgVGhpcyBpcyBuZWVkZWQgZm9yIGNvbmZpZ3VyYXRpb25zCi0JICogd2hlcmUgRk0xQERUU0VDMSBpc24ndCB1c2VkIGRpcmVjdGx5LCBzaW5jZSBpdCBwcm92aWRlcwotCSAqIE1ESU8gZm9yIG90aGVyIHBvcnRzLgotCSAqLwotCW91dF9iZTMyKCZ0c2VjLT50YmlwYSwgQ09ORklHX1NZU19UQklQQV9WQUxVRSk7Ci0KIAlkdHNlY19tZGlvX2luZm8ucmVncyA9CiAJCShzdHJ1Y3QgdHNlY19taWlfbW5nICopQ09ORklHX1NZU19GTTFfRFRTRUMxX01ESU9fQUREUjsKIAlkdHNlY19tZGlvX2luZm8ubmFtZSA9IERFRkFVTFRfRk1fTURJT19OQU1FOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZ2RzeXMvNDA1ZXAvZGx2aXNpb24tMTBnLmMgYi9ib2FyZC9nZHN5cy80MDVlcC9kbHZpc2lvbi0xMGcuYwppbmRleCBlY2JhNjZlLi5mNTVhZmJkIDEwMDY0NAotLS0gYS9ib2FyZC9nZHN5cy80MDVlcC9kbHZpc2lvbi0xMGcuYworKysgYi9ib2FyZC9nZHN5cy80MDVlcC9kbHZpc2lvbi0xMGcuYwpAQCAtODcsNyArODcsNiBAQAogCXUxNiBmcGdhX2ZlYXR1cmVzID0gaW5fbGUxNigmZnBnYS0+ZnBnYV9mZWF0dXJlcyk7CiAJdW5zaWduZWQgdW5pdF90eXBlOwogCXVuc2lnbmVkIGhhcmR3YXJlX3ZlcnNpb247Ci0JdW5zaWduZWQgZmVhdHVyZV9jb21wcmVzc2lvbjsKIAl1bnNpZ25lZCBmZWF0dXJlX3JzMjMyOwogCXVuc2lnbmVkIGZlYXR1cmVfYXVkaW87CiAJdW5zaWduZWQgZmVhdHVyZV9zeXNjbG9jazsKQEAgLTExMSw3ICsxMTAsNiBAQAogCiAJdW5pdF90eXBlID0gKHZlcnNpb25zID4+IDQpICYgMHgwMDBmOwogCWhhcmR3YXJlX3ZlcnNpb24gPSB2ZXJzaW9ucyAmIDB4MDAwZjsKLQlmZWF0dXJlX2NvbXByZXNzaW9uID0gKGZwZ2FfZmVhdHVyZXMgPj4gMTMpICYgMHgwMDAzOwogCWZlYXR1cmVfcnMyMzIgPSBmcGdhX2ZlYXR1cmVzICYgKDE8PDExKTsKIAlmZWF0dXJlX2F1ZGlvID0gKGZwZ2FfZmVhdHVyZXMgPj4gOSkgJiAweDAwMDM7CiAJZmVhdHVyZV9zeXNjbG9jayA9IChmcGdhX2ZlYXR1cmVzID4+IDcpICYgMHgwMDAzOwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5ub2tvbS9NYWtlZmlsZSBiL2JvYXJkL2lubm9rb20vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNThiN2YuLjAwMDAwMDAKLS0tIGEvYm9hcmQvaW5ub2tvbS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSMgcHJvamVjdC4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSMgTUEgMDIxMTEtMTMwNyBVU0EKLSMKLQotaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCi0KLUxJQgk9ICQob2JqKWxpYiQoQk9BUkQpLm8KLQotQ09CSlMJOj0gaW5ub2tvbS5vIGZsYXNoLm8KLQotU1JDUwk6PSAkKENPQkpTOi5vPS5jKQotT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCi0KLSQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCi0JJChjYWxsIGNtZF9saW5rX29fdGFyZ2V0LCAkKE9CSlMpKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAotaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCi0KLXNpbmNsdWRlICQob2JqKS5kZXBlbmQKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5ub2tvbS9mbGFzaC5jIGIvYm9hcmQvaW5ub2tvbS9mbGFzaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiOTg3Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2lubm9rb20vZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDQyMSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peCwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+Ci0gKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBBdWVyc3dhbGQgR21iSCAmIENvIEtHLCBHZXJtYW55Ci0gKiBLYWktVXdlIEJsb2VtIDxrYWktdXdlLmJsb2VtQGF1ZXJzd2FsZC5kZT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLQotLyogRGVidWdnaW5nIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICovCi0KLSN1bmRlZiBGTEFTSF9ERUJVRwotCi0vKiBTb21lIGRlYnVnIG1hY3JvcyAqLwotI2lmIChGTEFTSF9ERUJVRyA+IDIgKQotI2RlZmluZSBQUklOVEszKGFyZ3MuLi4pIHByaW50ZihhcmdzKQotI2Vsc2UKLSNkZWZpbmUgUFJJTlRLMyhhcmdzLi4uKQotI2VuZGlmCi0KLSNpZiBGTEFTSF9ERUJVRyA+IDEKLSNkZWZpbmUgUFJJTlRLMihhcmdzLi4uKSBwcmludGYoYXJncykKLSNlbHNlCi0jZGVmaW5lIFBSSU5USzIoYXJncy4uLikKLSNlbmRpZgotCi0jaWZkZWYgRkxBU0hfREVCVUcKLSNkZWZpbmUgUFJJTlRLKGFyZ3MuLi4pIHByaW50ZihhcmdzKQotI2Vsc2UKLSNkZWZpbmUgUFJJTlRLKGFyZ3MuLi4pCi0jZW5kaWYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIERldmVsb3BtZW50IHN5c3RlbTogd2UgaGF2ZSBvbmx5IDE2IE1CIEZsYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmZGVmIENPTkZJR19NVERfSU5OT0tPTV8xNk1CCi0jZGVmaW5lIEZMQVNIX0JBTktfU0laRSAweDAxMDAwMDAwCS8qIDE2IE1CIChkdXJpbmcgZGV2ZWxvcG1lbnQpICAgICAgICovCi0jZGVmaW5lIE1BSU5fU0VDVF9TSVpFICAweDAwMDIwMDAwCS8qIDEyOGsgcGVyIHNlY3RvciAgICAgICAgICAgICAgICAgICovCi0jZW5kaWYKLQotLyogUHJvZHVjdGlvbiBzeXN0ZW06IHdlIGhhdmUgNjQgTUIgRmxhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZkZWYgQ09ORklHX01URF9JTk5PS09NXzY0TUIKLSNkZWZpbmUgRkxBU0hfQkFOS19TSVpFIDB4MDQwMDAwMDAJLyogNjQgTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTUFJTl9TRUNUX1NJWkUgIDB4MDAwMjAwMDAJLyogMTI4ayBwZXIgc2VjdG9yICAgICAgICAgICAgICAgICAgKi8KLSNlbmRpZgotCi1mbGFzaF9pbmZvX3QgICAgZmxhc2hfaW5mb1tDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LU107Ci0KLS8qKgotICogZmxhc2hfaW5pdDogLSBpbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcyBmb3IgZmxhc2ggY2hpcHMKLSAqCi0gKiBAcmV0dXJuOiBzaXplIG9mIHRoZSBmbGFzaAotICovCi0KLXVsb25nIGZsYXNoX2luaXQodm9pZCkKLXsKLQlpbnQgaSwgajsKLQl1bG9uZyBzaXplID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7Ci0JCXVsb25nIGZsYXNoYmFzZSA9IDA7Ci0JCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPQotCQkJKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spIHwKLQkJCShJTlRFTF9JRF8yOEYxMjhKMyAmIEZMQVNIX1RZUEVNQVNLKTsKLQkJZmxhc2hfaW5mb1tpXS5zaXplID0gRkxBU0hfQkFOS19TSVpFOwotCQlmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudCA9IENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1Q7Ci0JCW1lbXNldChmbGFzaF9pbmZvW2ldLnByb3RlY3QsIDAsIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QpOwotCi0JCXN3aXRjaCAoaSkgewotCQkJY2FzZSAwOgotCQkJCWZsYXNoYmFzZSA9IFBIWVNfRkxBU0hfMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcGFuaWMoImNvbmZpZ3VyZWQgdG9vIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKLQkJCQlicmVhazsKLQkJfQotCQlmb3IgKGogPSAwOyBqIDwgZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQ7IGorKykgewotCQkJZmxhc2hfaW5mb1tpXS5zdGFydFtqXSA9IGZsYXNoYmFzZSArIGoqTUFJTl9TRUNUX1NJWkU7Ci0JCX0KLQkJc2l6ZSArPSBmbGFzaF9pbmZvW2ldLnNpemU7Ci0JfQotCi0JLyogUHJvdGVjdCB1LWJvb3Qgc2VjdG9ycyAqLwotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJCUNPTkZJR19TWVNfRkxBU0hfQkFTRSwKLQkJCUNPTkZJR19TWVNfRkxBU0hfQkFTRSArICgyNTYqMTAyNCkgLSAxLAotCQkJJmZsYXNoX2luZm9bMF0pOwotCi0jaWZkZWYgQ09ORklHX0VOVl9JU19JTl9GTEFTSAotCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLQkJCUNPTkZJR19FTlZfQUREUiwKLQkJCUNPTkZJR19FTlZfQUREUiArIENPTkZJR19FTlZfU0laRSAtIDEsCi0JCQkmZmxhc2hfaW5mb1swXSk7Ci0jZW5kaWYKLQotCXJldHVybiBzaXplOwotfQotCi0KLS8qKgotICogZmxhc2hfcHJpbnRfaW5mbzogLSBwcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmxhc2ggc2l0dWF0aW9uCi0gKgotICogQHBhcmFtIGluZm86Ci0gKi8KLQotdm9pZCBmbGFzaF9wcmludF9pbmZvICAoZmxhc2hfaW5mb190ICppbmZvKQotewotCWludCBpLCBqOwotCi0JZm9yIChqPTA7IGo8Q09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1M7IGorKykgewotCi0JCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewotCi0JCQljYXNlIChJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKToKLQkJCQlwcmludGYoIkludGVsOiAiKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRmKCJVbmtub3duIFZlbmRvciAiKTsKLQkJCQlicmVhazsKLQkJfQotCi0JCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotCi0JCQljYXNlIChJTlRFTF9JRF8yOEYxMjhKMyAmIEZMQVNIX1RZUEVNQVNLKToKLQkJCQlwcmludGYoIjI4RjEyOEozICgxMjhNYml0KVxuIik7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50ZigiVW5rbm93biBDaGlwIFR5cGVcbiIpOwotCQkJCXJldHVybjsKLQkJfQotCi0JCXByaW50ZigiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKLQkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7Ci0KLQkJcHJpbnRmKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotCQkJaWYgKChpICUgNSkgPT0gMCkgcHJpbnRmICgiXG4gICAiKTsKLQotCQkJcHJpbnRmICgiICUwOGxYJXMiLCBpbmZvLT5zdGFydFtpXSwKLQkJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOwotCQl9Ci0JCXByaW50ZiAoIlxuIik7Ci0JCWluZm8rKzsKLQl9Ci19Ci0KLQotLyoqCi0gKiBmbGFzaF9lcmFzZTogLSBlcmFzZSBmbGFzaCBzZWN0b3JzCi0gKgotICovCi0KLWludCBmbGFzaF9lcmFzZShmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQotewotCWludCBmbGFnLCBwcm90LCBzZWN0OwotCWludCByYyA9IEVSUl9PSzsKLQl1bG9uZyBzdGFydDsKLQotCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQotCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVFlQRTsKLQotCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotCQlyZXR1cm4gRVJSX0lOVkFMOwotCX0KLQotCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgIT0gKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spKQotCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVkVORE9SOwotCi0JcHJvdCA9IDA7Ci0JZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSBwcm90Kys7Ci0JfQotCi0JaWYgKHByb3QpIHJldHVybiBFUlJfUFJPVEVDVEVEOwotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0Ci0JICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCi0JICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQotCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCi0JICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgotCSAqLwotCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0JLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdCAmJiAhY3RybGMoKTsgc2VjdCsrKSB7Ci0KLQkJcHJpbnRmKCJFcmFzaW5nIHNlY3RvciAlMmQgLi4uICIsIHNlY3QpOwotCi0JCVBSSU5USygiXG4iKTsKLQotCQkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLwotCQlzdGFydCA9IGdldF90aW1lcigwKTsKLQotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkJCXUxNiAqIHZvbGF0aWxlIGFkZHIgPSAodTE2ICogdm9sYXRpbGUpKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQotCQkJUFJJTlRLKCJ1bmxvY2tpbmcgc2VjdG9yXG4iKTsKLQkJCSphZGRyID0gMHgwMDYwOwotCQkJKmFkZHIgPSAweDAwZDA7Ci0JCQkqYWRkciA9IDB4MDBmZjsKLQotCQkJUFJJTlRLKCJlcmFzaW5nIHNlY3RvclxuIik7Ci0JCQkqYWRkciA9IDB4MDAyMDsKLQkJCVBSSU5USygiY29uZmlybWluZyBlcmFzZVxuIik7Ci0JCQkqYWRkciA9IDB4MDBEMDsKLQotCQkJd2hpbGUgKCgqYWRkciAmIDB4MDA4MCkgIT0gMHgwMDgwKSB7Ci0JCQkJUFJJTlRLKCIuIik7Ci0JCQkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQpIHsKLQkJCQkJKmFkZHIgPSAweDAwQjA7IC8qIHN1c3BlbmQgZXJhc2UqLwotCQkJCQkqYWRkciA9IDB4MDBGRjsgLyogcmVhZCBtb2RlICAgICovCi0JCQkJCXJjID0gRVJSX1RJTU9VVDsKLQkJCQkJZ290byBvdXRhaGVyZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCVBSSU5USygiY2xlYXJpbmcgc3RhdHVzIHJlZ2lzdGVyXG4iKTsKLQkJCSphZGRyID0gMHgwMDUwOwotCQkJUFJJTlRLKCJyZXNldHRpbmcgdG8gcmVhZCBtb2RlIik7Ci0JCQkqYWRkciA9IDB4MDBGRjsKLQkJfQotCi0JCXByaW50Zigib2suXG4iKTsKLQl9Ci0KLQlpZiAoY3RybGMoKSkgcHJpbnRmKCJVc2VyIEludGVycnVwdCFcbiIpOwotCi0Jb3V0YWhlcmU6Ci0KLQkvKiBhbGxvdyBmbGFzaCB0byBzZXR0bGUgLSB3YWl0IDEwIG1zICovCi0JdWRlbGF5X21hc2tlZCgxMDAwMCk7Ci0KLQlpZiAoZmxhZykgZW5hYmxlX2ludGVycnVwdHMoKTsKLQotCXJldHVybiByYzsKLX0KLQotCi0vKioKLSAqIHdyaXRlX3dvcmQ6IC0gY29weSBtZW1vcnkgdG8gZmxhc2gKLSAqCi0gKiBAcGFyYW0gaW5mbzoKLSAqIEBwYXJhbSBkZXN0OgotICogQHBhcmFtIGRhdGE6Ci0gKiBAcmV0dXJuOgotICovCi0KLXN0YXRpYyBpbnQgd3JpdGVfd29yZCAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1c2hvcnQgZGF0YSkKLXsKLQl2b2xhdGlsZSB1MTYgKmFkZHIgPSAodTE2ICopZGVzdCwgdmFsOwotCWludCByYyA9IEVSUl9PSzsKLQlpbnQgZmxhZzsKLQl1bG9uZyBzdGFydDsKLQotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCWlmICgoKmFkZHIgJiBkYXRhKSAhPSBkYXRhKSByZXR1cm4gRVJSX05PVF9FUkFTRUQ7Ci0KLQkvKgotCSAqIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQKLQkgKiBoZXJlLiBSZW1lbWJlciB0aGF0IG91ciBleGNlcHRpb24gdmVjdG9ycyBhcmUKLQkgKiBhdCBhZGRyZXNzIDAgaW4gdGhlIGZsYXNoLCBhbmQgd2UgZG9uJ3Qgd2FudCBhCi0JICogKHRpY2tlcikgZXhjZXB0aW9uIHRvIGhhcHBlbiB3aGlsZSB0aGUgZmxhc2gKLQkgKiBjaGlwIGlzIGluIHByb2dyYW1taW5nIG1vZGUuCi0JICovCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0JLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNvbW1hbmQgKi8KLQkqYWRkciA9IDB4NTA7Ci0KLQkvKiBwcm9ncmFtIHNldC11cCBjb21tYW5kICovCi0JKmFkZHIgPSAweDQwOwotCi0JLyogbGF0Y2ggYWRkcmVzcy9kYXRhICovCi0JKmFkZHIgPSBkYXRhOwotCi0JLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KLQlzdGFydCA9IGdldF90aW1lcigwKTsKLQotCS8qIHdhaXQgd2hpbGUgcG9sbGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCi0Jd2hpbGUoKCh2YWwgPSAqYWRkcikgJiAweDgwKSAhPSAweDgwKSB7Ci0JCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKSB7Ci0JCQlyYyA9IEVSUl9USU1PVVQ7Ci0JCQkqYWRkciA9IDB4QjA7IC8qIHN1c3BlbmQgcHJvZ3JhbSBjb21tYW5kICovCi0JCQlnb3RvIG91dGFoZXJlOwotCQl9Ci0JfQotCi0JaWYodmFsICYgMHgxQSkgewkvKiBjaGVjayBmb3IgZXJyb3IgKi8KLQkJcHJpbnRmKCJcbkZsYXNoIHdyaXRlIGVycm9yICUwMnggYXQgYWRkcmVzcyAlMDhseFxuIiwKLQkJCShpbnQpdmFsLCAodW5zaWduZWQgbG9uZylkZXN0KTsKLQkJaWYodmFsICYgKDE8PDMpKSB7Ci0JCQlwcmludGYoIlZvbHRhZ2UgcmFuZ2UgZXJyb3IuXG4iKTsKLQkJCXJjID0gRVJSX1BST0dfRVJST1I7Ci0JCQlnb3RvIG91dGFoZXJlOwotCQl9Ci0JCWlmKHZhbCAmICgxPDwxKSkgewotCQkJcHJpbnRmKCJEZXZpY2UgcHJvdGVjdCBlcnJvci5cbiIpOwotCQkJcmMgPSBFUlJfUFJPVEVDVEVEOwotCQkJZ290byBvdXRhaGVyZTsKLQkJfQotCQlpZih2YWwgJiAoMTw8NCkpIHsKLQkJCXByaW50ZigiUHJvZ3JhbW1pbmcgZXJyb3IuXG4iKTsKLQkJCXJjID0gRVJSX1BST0dfRVJST1I7Ci0JCQlnb3RvIG91dGFoZXJlOwotCQl9Ci0JCXJjID0gRVJSX1BST0dfRVJST1I7Ci0JCWdvdG8gb3V0YWhlcmU7Ci0JfQotCi0Jb3V0YWhlcmU6Ci0KLQkqYWRkciA9IDB4RkY7IC8qIHJlYWQgYXJyYXkgY29tbWFuZCAqLwotCWlmIChmbGFnKSBlbmFibGVfaW50ZXJydXB0cygpOwotCi0JcmV0dXJuIHJjOwotfQotCi0KLS8qKgotICogd3JpdGVfYnVmOiAtIENvcHkgbWVtb3J5IHRvIGZsYXNoLgotICoKLSAqIEBwYXJhbSBpbmZvOgotICogQHBhcmFtIHNyYzoJc291cmNlIG9mIGNvcHkgdHJhbnNhY3Rpb24KLSAqIEBwYXJhbSBhZGRyOgl3aGVyZSB0byBjb3B5IHRvCi0gKiBAcGFyYW0gY250OgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQotICoKLSAqIEByZXR1cm4JZXJyb3IgY29kZQotICovCi0KLWludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKLXsKLQl1bG9uZyBjcCwgd3A7Ci0JdXNob3J0IGRhdGE7Ci0JaW50IGw7Ci0JaW50IGksIHJjOwotCi0Jd3AgPSAoYWRkciAmIH4xKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0KLQkvKgotCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKLQkgKi8KLQlpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKLQkJZGF0YSA9IDA7Ci0JCWZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKLQkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopY3AgPDwgOCk7Ci0JCX0KLQkJZm9yICg7IGk8MiAmJiBjbnQ+MDsgKytpKSB7Ci0JCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKnNyYysrIDw8IDgpOwotCQkJLS1jbnQ7Ci0JCQkrK2NwOwotCQl9Ci0JCWZvciAoOyBjbnQ9PTAgJiYgaTwyOyArK2ksICsrY3ApIHsKLQkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopY3AgPDwgOCk7Ci0JCX0KLQotCQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJCXJldHVybiAocmMpOwotCQl9Ci0JCXdwICs9IDI7Ci0JfQotCi0JLyoKLQkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKLQkgKi8KLQl3aGlsZSAoY250ID49IDIpIHsKLQkJLyogZGF0YSA9ICooKHZ1c2hvcnQqKXNyYyk7ICovCi0JCWRhdGEgPSAqKCh1c2hvcnQqKXNyYyk7Ci0JCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkJcmV0dXJuIChyYyk7Ci0JCX0KLQkJc3JjICs9IDI7Ci0JCXdwICArPSAyOwotCQljbnQgLT0gMjsKLQl9Ci0KLQlpZiAoY250ID09IDApIHJldHVybiBFUlJfT0s7Ci0KLQkvKgotCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcwotCSAqLwotCWRhdGEgPSAwOwotCWZvciAoaT0wLCBjcD13cDsgaTwyICYmIGNudD4wOyArK2ksICsrY3ApIHsKLQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCpzcmMrKyA8PCA4KTsKLQkJLS1jbnQ7Ci0JfQotCWZvciAoOyBpPDI7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKWNwIDw8IDgpOwotCX0KLQotCXJldHVybiB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2lubm9rb20vaW5ub2tvbS5jIGIvYm9hcmQvaW5ub2tvbS9pbm5va29tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZGU3ZTMuLjAwMDAwMDAKLS0tIGEvYm9hcmQvaW5ub2tvbS9pbm5va29tLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peCwgci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZQotICogS3lsZSBIYXJyaXMsIE5leHVzIFRlY2hub2xvZ2llcywgSW5jLiwga2hhcnJpc0BuZXh1cy10ZWNoLm5ldAotICogTWFyaXVzIEdyb2VnZXIsIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMgR21iSCwgbWdyb2VnZXJAc3lzZ28uZGUKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bmV0ZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi1ERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotI2lmZGVmIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKLSMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpICAgICAgICBzaG93X2Jvb3RfcHJvZ3Jlc3MoYXJnKQotI2Vsc2UKLSMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpCi0jZW5kaWYKLQotLyoqCi0gKiBpMmNfaW5pdF9ib2FyZCAtIHJlc2V0IGkyYyBidXMuIFdoZW4gdGhlIGJvYXJkIGlzIHBvd2VyY3ljbGVkIGR1cmluZyBhCi0gKiBidXMgdHJhbnNmZXIgaXQgbWlnaHQgaGFuZzsgZm9yIGRldGFpbHMgc2VlIGRvYy9JMkNfRWRnZV9Db25kaXRpb25zLgotICogVGhlIElubm9rb20gYm9hcmQgaGFzIEdQSU83MCBjb25uZWN0ZWQgdG8gU0NMSyB3aGljaCBjYW4gYmUgdG9nZ2xlZAotICogdW50aWwgYWxsIGNoaXBzIHRoaW5rIHRoYXQgdGhlaXIgY3VycmVudCBjeWNsZXMgYXJlIGZpbmlzaGVkLgotICovCi1pbnQgaTJjX2luaXRfYm9hcmQodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIHNldCBncGlvIHBpbiBsb3cgX2JlZm9yZV8gd2UgY2hhbmdlIGRpcmVjdGlvbiB0byBvdXRwdXQgICAgICAgICAgKi8KLQl3cml0ZWwoR1BJT19iaXQoNzApLCBHUENSKDcwKSk7Ci0KLQkvKiBub3cgdG9nZ2xlIGJldHdlZW4gb3V0cHV0PWxvdyBhbmQgaGlnaC1pbXBlZGFuY2UgICAgICAgICAgICAgICAgICovCi0JZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKLQkJd3JpdGVsKHJlYWRsKEdQRFIoNzApKSB8IEdQSU9fYml0KDcwKSwgR1BEUig3MCkpOyAgLyogb3V0cHV0ICovCi0JCXVkZWxheSgxMCk7Ci0JCXdyaXRlbChyZWFkbChHUERSKDcwKSkgJiB+R1BJT19iaXQoNzApLCBHUERSKDcwKSk7IC8qIGlucHV0ICAqLwotCQl1ZGVsYXkoMTApOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLS8qKgotICogbWlzY19pbml0X3I6IC0gbWlzYyBpbml0aWFsaXNhdGlvbiByb3V0aW5lcwotICovCi0KLWludCBtaXNjX2luaXRfcih2b2lkKQotewotCWNoYXIgKnN0cjsKLQotCS8qIGRldGVybWluZSBpZiB0aGUgc29mdHdhcmUgdXBkYXRlIGtleSBpcyBwcmVzc2VkIGR1cmluZyBzdGFydHVwICAgKi8KLQlpZiAocmVhZGwoR1BMUjApICYgMHgwMDAwMDgwMCkgewotCQlwcmludGYoInVzaW5nIGJvb3RjbWRfbm9ybWFsIChzdy11cGRhdGUgYnV0dG9uIG5vdCBwcmVzc2VkKVxuIik7Ci0JCXN0ciA9IGdldGVudigiYm9vdGNtZF9ub3JtYWwiKTsKLQl9IGVsc2UgewotCQlwcmludGYoInVzaW5nIGJvb3RjbWRfdXBkYXRlIChzdy11cGRhdGUgYnV0dG9uIHByZXNzZWQpXG4iKTsKLQkJc3RyID0gZ2V0ZW52KCJib290Y21kX3VwZGF0ZSIpOwotCX0KLQotCXNldGVudigiYm9vdGNtZCIsc3RyKTsKLQotCXJldHVybiAwOwotfQotCi0KLS8qKgotICogYm9hcmRfaW5pdDogLSBzZXR1cCBzb21lIGRhdGEgc3RydWN0dXJlcwotICoKLSAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzCi0gKi8KLQotaW50IGJvYXJkX2luaXQgKHZvaWQpCi17Ci0JLyogV2UgaGF2ZSBSQU0sIGRpc2FibGUgY2FjaGUgKi8KLQlkY2FjaGVfZGlzYWJsZSgpOwotCWljYWNoZV9kaXNhYmxlKCk7Ci0KLQlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0lOTk9LT007Ci0JZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IDB4YTAwMDAxMDA7Ci0JZ2QtPmJkLT5iaV9iYXVkcmF0ZSA9IENPTkZJR19CQVVEUkFURTsKLQotCXJldHVybiAwOwotfQotCi1leHRlcm4gdm9pZCBweGFfZHJhbV9pbml0KHZvaWQpOwotaW50IGRyYW1faW5pdCh2b2lkKQotewotCXB4YV9kcmFtX2luaXQoKTsKLQlnZC0+cmFtX3NpemUgPSBQSFlTX1NEUkFNXzFfU0laRTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkcmFtX2luaXRfYmFua3NpemUodm9pZCkKLXsKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNXzFfU0laRTsKLX0KLQotLyoqCi0gKiBpbm5va29tX3NldF9sZWQ6IC0gc3dpdGNoIExFRHMgb24gb3Igb2ZmCi0gKgotICogQHBhcmFtIGxlZDogICBMRUQgdG8gc3dpdGNoICgwLDEsMikKLSAqIEBwYXJhbSBzdGF0ZTogc3dpdGNoIG9uICgxKSBvciBvZmYgKDApCi0gKi8KLQotdm9pZCBpbm5va29tX3NldF9sZWQoaW50IGxlZCwgaW50IHN0YXRlKQotewotCXN3aXRjaChsZWQpIHsKLS8qCi0JCWNhc2UgMDogaWYgKHN0YXRlPT0xKSB7Ci0JCQkJR1BDUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMDsKLQkJCX0gZWxzZSBpZiAoc3RhdGU9PTApIHsKLQkJCQlHUFNSMCB8PSBDU0IyMjZfVVNFUl9MRUQwOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAxOiBpZiAoc3RhdGU9PTEpIHsKLQkJCQlHUENSMCB8PSBDU0IyMjZfVVNFUl9MRUQxOwotCQkJfSBlbHNlIGlmIChzdGF0ZT09MCkgewotCQkJCUdQU1IwIHw9IENTQjIyNl9VU0VSX0xFRDE7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIDI6IGlmIChzdGF0ZT09MSkgewotCQkJCUdQQ1IwIHw9IENTQjIyNl9VU0VSX0xFRDI7Ci0JCQl9IGVsc2UgaWYgKHN0YXRlPT0wKSB7Ci0JCQkJR1BTUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMjsKLQkJCX0KLQkJCWJyZWFrOwotKi8KLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLQotLyoqCi0gKiBzaG93X2Jvb3RfcHJvZ3Jlc3M6IC0gaW5kaWNhdGUgc3RhdGUgb2YgdGhlIGJvb3QgcHJvY2VzcwotICoKLSAqIEBwYXJhbSBzdGF0dXM6IFN0YXR1cyBudW1iZXIgLSBzZWUgUkVBRE1FIGZvciBkZXRhaWxzLgotICoKLSAqIFRoZSBDU0IyMjYgZG9lcyBvbmx5IGhhdmUgMyBMRURzLCBzbyB3ZSBzd2l0Y2ggdGhlbSBvbiBhdCB0aGUgbW9zdAotICogaW1wb3J0YW50IHN0YXRlcyAoMSwgNSwgMTUpLgotICovCi0KLXZvaWQgc2hvd19ib290X3Byb2dyZXNzIChpbnQgc3RhdHVzKQotewotCXN3aXRjaChzdGF0dXMpIHsKLS8qCi0JCWNhc2UgIDE6IGNzYjIyNl9zZXRfbGVkKDAsMSk7IGJyZWFrOwotCQljYXNlICA1OiBjc2IyMjZfc2V0X2xlZCgxLDEpOyBicmVhazsKLQkJY2FzZSAxNTogY3NiMjI2X3NldF9sZWQoMiwxKTsgYnJlYWs7Ci0qLwotCX0KLQotCXJldHVybjsKLX0KLQotI2lmZGVmIENPTkZJR19DTURfTkVUCi1pbnQgYm9hcmRfZXRoX2luaXQoYmRfdCAqYmlzKQotewotCWludCByYyA9IDA7Ci0jaWZkZWYgQ09ORklHX1NNQzkxMTExCi0JcmMgPSBzbWM5MTExMV9pbml0aWFsaXplKDAsIENPTkZJR19TTUM5MTExMV9CQVNFKTsKLSNlbmRpZgotCXJldHVybiByYzsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQva2V5bWlsZS9rbTgzeHgva204M3h4X2kyYy5jIGIvYm9hcmQva2V5bWlsZS9rbTgzeHgva204M3h4X2kyYy5jCmluZGV4IGJlMTc3NzUuLjhkZjkyZDggMTAwNjQ0Ci0tLSBhL2JvYXJkL2tleW1pbGUva204M3h4L2ttODN4eF9pMmMuYworKysgYi9ib2FyZC9rZXltaWxlL2ttODN4eC9rbTgzeHhfaTJjLmMKQEAgLTQxLDcgKzQxLDYgQEAKIHsKIAlzdHJ1Y3QgZnNsX2kyYyAqZGV2OwogCWRldiA9IChzdHJ1Y3QgZnNsX2kyYyAqKSAoQ09ORklHX1NZU19JTU1SICsgQ09ORklHX1NZU19JMkNfT0ZGU0VUKTsKLQl1Y2hhcglkdW1teTsKIAl1Y2hhciAgIGxhc3Q7CiAJaW50ICAgICBuYnJfcmVhZCA9IDA7CiAJaW50ICAgICBpID0gMDsKQEAgLTUyLDcgKzUxLDcgQEAKIAl1ZGVsYXkoREVMQVlfQUJPUlRfU0VRKTsKIAlvdXRfOCgmZGV2LT5jciwgKEkyQ19DUl9NRU4gfCBJMkNfQ1JfTVNUQSkpOwogCXVkZWxheShERUxBWV9BQk9SVF9TRVEpOwotCWR1bW15ID0gaW5fOCgmZGV2LT5kcik7CisJaW5fOCgmZGV2LT5kcik7CiAJdWRlbGF5KERFTEFZX0FCT1JUX1NFUSk7CiAJbGFzdCA9IGluXzgoJmRldi0+ZHIpOwogCW5icl9yZWFkKys7CmRpZmYgLS1naXQgYS9ib2FyZC9tY2MyMDAvbGNkLmMgYi9ib2FyZC9tY2MyMDAvbGNkLmMKaW5kZXggNzI2MzY2ZC4uZDhmNzU0YyAxMDA2NDQKLS0tIGEvYm9hcmQvbWNjMjAwL2xjZC5jCisrKyBiL2JvYXJkL21jYzIwMC9sY2QuYwpAQCAtNTUsNiArNTUsOSBAQAogI2RlZmluZSBQU09DX1JFVFJJRVMJMTAJLyogZWFjaCBvZiBQU09DX1dBSVRfVElNRSAqLwogI2RlZmluZSBQU09DX1dBSVRfVElNRQkxMAkvKiB1c2VjICovCiAKKyNpbmNsdWRlIDx2aWRlb19mb250Lmg+CisjZGVmaW5lIEZPTlRfV0lEVEgJVklERU9fRk9OVF9XSURUSAorCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAogLyoKQEAgLTE4NSw3ICsxODgsNiBAQAogfQogI2lmZGVmIENPTkZJR19QUk9HUkVTU0JBUgogCi0jZGVmaW5lIEZPTlRfV0lEVEggICAgICA4IC8qIHRoZSBzYW1lIGFzIFZJREVPX0ZPTlRfV0lEVEggaW4gdmlkZW9fZm9udC5oICovCiB2b2lkIHNob3dfcHJvZ3Jlc3MgKGludCBzaXplLCBpbnQgdG90KQogewogCWludCBjbnQ7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvbWlwNDA1L21pcDQwNS5jIGIvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuYwppbmRleCBlOTNkOTk0Li45ZDBkYjY0IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvbWlwNDA1L21pcDQwNS5jCisrKyBiL2JvYXJkL21wbC9taXA0MDUvbWlwNDA1LmMKQEAgLTI0Niw4ICsyNDYsNyBAQAogCXVuc2lnbmVkIGNoYXIJdHJwX2Nsb2NrcywKIAkJCXRyY2RfY2xvY2tzLAogCQkJdHJhc19jbG9ja3MsCi0JCQl0cmNfY2xvY2tzLAotCQkJdGN0cF9jbG9ja3M7CisJCQl0cmNfY2xvY2tzOwogCXVuc2lnbmVkIGNoYXIJY2FsX3ZhbDsKIAl1bnNpZ25lZCBjaGFyCWJjOwogCXVuc2lnbmVkIGxvbmcJc2RyYW1fdGltLCBzZHJhbV9iYW5rOwpAQCAtMzQ1LDcgKzM0NCw2IEBACiAJdHJjZF9jbG9ja3MgPSBzZHJhbV90YWJsZVtpXS50cmNkOwkvKiAyMG5zIC83LjUgbnMgKGRhdGFpblsyOV0pICovCiAJdHJhc19jbG9ja3MgPSBzZHJhbV90YWJsZVtpXS50cmFzOwkvKiA0NG5zIC83LjUgbnMgIChkYXRhaW5bMzBdKSAqLwogCS8qIGN0cCA9ICgodHJwICsgdHJhcykgLSB0cnAgLSB0cmNkKSA9PiB0cmFzIC0gdHJjZCAqLwotCXRjdHBfY2xvY2tzID0gc2RyYW1fdGFibGVbaV0udGN0cDsJLyogNDQgLSAyMG5zID0gMjRucyAqLwogCS8qIHRyY19jbG9ja3MgaXMgc3VtIG9mIHRycF9jbG9ja3MgKyB0cmFzX2Nsb2NrcyAqLwogCXRyY19jbG9ja3MgPSB0cnBfY2xvY2tzICsgdHJhc19jbG9ja3M7CiAJLyogZ2V0IFNEUkFNIHRpbWluZyByZWdpc3RlciAqLwpAQCAtNjI2LDEwICs2MjQsOSBAQAogewogCiAJdW5zaWduZWQgbG9uZyBiYW5rX3JlZ1s0XSwgdG1wLCBiYW5rX3NpemU7Ci0JaW50IGksIGRzOworCWludCBpOwogCXVuc2lnbmVkIGxvbmcgVG90YWxTaXplOwogCi0JZHMgPSAwOwogCS8qIHNpbmNlIHRoZSBEUkFNIGNvbnRyb2xsZXIgaXMgYWxscmVhZHkgc2V0IHVwLCBjYWxjdWxhdGUgdGhlIHNpemUgd2l0aCB0aGUKIAkgICBiYW5rIHJlZ2lzdGVycyAgICAqLwogCW10ZGNyIChTRFJBTTBfQ0ZHQUREUiwgU0RSQU0wX0IwQ1IpOwpAQCAtNjQ2LDggKzY0Myw3IEBACiAJCQl0bXAgPSAoYmFua19yZWdbaV0gPj4gMTcpICYgMHg3OwogCQkJYmFua19zaXplID0gNCA8PCB0bXA7CiAJCQlUb3RhbFNpemUgKz0gYmFua19zaXplOwotCQl9IGVsc2UKLQkJCWRzID0gMTsKKwkJfQogCX0KIAltdGRjciAoU0RSQU0wX0NGR0FERFIsIFNEUkFNMF9FQ0NDRkcpOwogCXRtcCA9IG1mZGNyIChTRFJBTTBfQ0ZHREFUQSk7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvcGlwNDA1L3BpcDQwNS5jIGIvYm9hcmQvbXBsL3BpcDQwNS9waXA0MDUuYwppbmRleCA3YjQ4YzA2Li5hMWYwYjY1IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvcGlwNDA1L3BpcDQwNS5jCisrKyBiL2JvYXJkL21wbC9waXA0MDUvcGlwNDA1LmMKQEAgLTE3OSw3ICsxNzksNiBAQAogCiBpbnQgYm9hcmRfZWFybHlfaW5pdF9mICh2b2lkKQogewotCXVuc2lnbmVkIGNoYXIgZGF0YW91dFsxXTsKIAl1bnNpZ25lZCBjaGFyIGRhdGFpblsxMjhdOwogCXVuc2lnbmVkIGxvbmcgc2RyYW1fc2l6ZSA9IDA7CiAJU0RSQU1fU0VUVVAgKnQgPSAoU0RSQU1fU0VUVVAgKikgc2RyYW1fc2V0dXBfdGFibGU7CkBAIC0xODksOSArMTg4LDEzIEBACiAJdW5zaWduZWQgc2hvcnQgaTsKIAl1bnNpZ25lZCBjaGFyIHJvd3MsIGNvbHMsIGJhbmtzLCBzZHJhbV9iYW5rcywgZGVuc2l0eTsKIAl1bnNpZ25lZCBjaGFyIHN1cHBvcnRlZF9jYWwsIHRycF9jbG9ja3MsIHRyY2RfY2xvY2tzLCB0cmFzX2Nsb2NrcywKLQkJCXRyY19jbG9ja3MsIHRjdHBfY2xvY2tzOworCQl0cmNfY2xvY2tzOwogCXVuc2lnbmVkIGNoYXIgY2FsX2luZGV4LCBjYWxfdmFsLCBzcGRfdmVyc2lvbiwgc3BkX2Noa3N1bTsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKKyNpZmRlZiBTRFJBTV9ERUJVRworCXVuc2lnbmVkIGNoYXIgdGN0cF9jbG9ja3M7CisjZW5kaWYKKwogCS8qIHNldCB1cCB0aGUgY29uZmlnIHBvcnQgKi8KIAltdGRjciAoRUJDMF9DRkdBRERSLCBQQjdBUCk7CiAJbXRkY3IgKEVCQzBfQ0ZHREFUQSwgQ09ORklHX1BPUlRfQVApOwpAQCAtMjEwLDcgKzIxMyw2IEBACiAKIAkvKiBSZWFkIFNlcmlhbCBQcmVzZW5jZSBEZXRlY3QgSW5mb3JtYXRpb24gKi8KIAlpMmNfaW5pdCAoQ09ORklHX1NZU19JMkNfU1BFRUQsIENPTkZJR19TWVNfSTJDX1NMQVZFKTsKLQlkYXRhb3V0WzBdID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCiAJCWRhdGFpbltpXSA9IDEyNzsKIAlpMmNfcmVhZChTUERfRUVQUk9NX0FERFJFU1MsMCwxLGRhdGFpbiwxMjgpOwpAQCAtMzA3LDEyICszMDksMTMgQEAKIAogCS8qIHRyY19jbG9ja3MgaXMgc3VtIG9mIHRycF9jbG9ja3MgKyB0cmFzX2Nsb2NrcyAqLwogCXRyY19jbG9ja3MgPSB0cnBfY2xvY2tzICsgdHJhc19jbG9ja3M7CisKKyNpZmRlZiBTRFJBTV9ERUJVRwogCS8qIGN0cCA9ICgodHJwICsgdHJhcykgLSB0cnAgLSB0cmNkKSA9PiB0cmFzIC0gdHJjZCAqLwogCXRjdHBfY2xvY2tzID0KIAkJCSgoTlN0bzEwUFMgKGRhdGFpblszMF0pIC0gTlN0bzEwUFMgKGRhdGFpblsyOV0pKSArCiAJCQkgKHRtZW1jbGsgLSAxKSkgLyB0bWVtY2xrOwogCi0jaWZkZWYgU0RSQU1fREVCVUcKIAlzZXJpYWxfcHV0cyAoImNfUlA6ICIpOwogCXdyaXRlX2hleCAodHJwX2Nsb2Nrcyk7CiAJc2VyaWFsX3B1dHMgKCJcbmNfUkNEOiAiKTsKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC92Y21hOS92Y21hOS5jIGIvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmMKaW5kZXggZTYzNjI1Yi4uOWYyNTljMiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmMKKysrIGIvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmMKQEAgLTcyLDkgKzcyLDYgQEAKIAogaW50IGJvYXJkX2luaXQodm9pZCkKIHsKLQkvKiBhcmNoIG51bWJlciBvZiBWQ01BOS1Cb2FyZCAqLwotCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfTVBMX1ZDTUE5OwotCiAJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLwogCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweDMwMDAwMTAwOwogCmRpZmYgLS1naXQgYS9ib2FyZC9yb25ldGl4L3BtOTI2MS9wbTkyNjEuYyBiL2JvYXJkL3JvbmV0aXgvcG05MjYxL3BtOTI2MS5jCmluZGV4IDg3MWI5NGEuLmIyNmUzM2EgMTAwNjQ0Ci0tLSBhL2JvYXJkL3JvbmV0aXgvcG05MjYxL3BtOTI2MS5jCisrKyBiL2JvYXJkL3JvbmV0aXgvcG05MjYxL3BtOTI2MS5jCkBAIC0yNDgsOSArMjQ4LDYgQEAKIAkJMSA8PCBBVE1FTF9JRF9QSU9DLAogCQkmcG1jLT5wY2VyKTsKIAotCS8qIGFyY2ggbnVtYmVyIG9mIFBNOTI2MS1Cb2FyZCAqLwotCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfUE05MjYxOwotCiAJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLwogCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBQSFlTX1NEUkFNICsgMHgxMDA7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL3JvbmV0aXgvcG05MjYzL3BtOTI2My5jIGIvYm9hcmQvcm9uZXRpeC9wbTkyNjMvcG05MjYzLmMKaW5kZXggY2ZjOTg0Ny4uYjBmN2VhNiAxMDA2NDQKLS0tIGEvYm9hcmQvcm9uZXRpeC9wbTkyNjMvcG05MjYzLmMKKysrIGIvYm9hcmQvcm9uZXRpeC9wbTkyNjMvcG05MjYzLmMKQEAgLTM0OSw5ICszNDksNiBAQAogCQkoMSA8PCBBVE1FTF9JRF9QSU9CKSwKIAkJJnBtYy0+cGNlcik7CiAKLQkvKiBhcmNoIG51bWJlciBvZiBBVDkxU0FNOTI2M0VLLUJvYXJkICovCi0JZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9QTTkyNjM7Ci0KIAkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCiAJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IFBIWVNfU0RSQU0gKyAweDEwMDsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvcm9uZXRpeC9wbTlnNDUvcG05ZzQ1LmMgYi9ib2FyZC9yb25ldGl4L3BtOWc0NS9wbTlnNDUuYwppbmRleCBmMzM3NGE0Li45NjFkMTkzIDEwMDY0NAotLS0gYS9ib2FyZC9yb25ldGl4L3BtOWc0NS9wbTlnNDUuYworKysgYi9ib2FyZC9yb25ldGl4L3BtOWc0NS9wbTlnNDUuYwpAQCAtMTM5LDggKzEzOSw2IEBACiAJCSgxIDw8IEFUTUVMX0lEX1BJT0MpIHwKIAkJKDEgPDwgQVRNRUxfSURfUElPREUpLCAmcG1jLT5wY2VyKTsKIAotCS8qIGFyY2ggbnVtYmVyIG9mIEFUOTFTQU05TTEwRzQ1RUstQm9hcmQgKi8KLQlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX1BNOUc0NTsKIAkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCiAJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IFBIWVNfU0RSQU0gKyAweDEwMDsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjODU0OC9zYmM4NTQ4LmMgYi9ib2FyZC9zYmM4NTQ4L3NiYzg1NDguYwppbmRleCBlMWEzZWEzLi4yNjA5NWE1IDEwMDY0NAotLS0gYS9ib2FyZC9zYmM4NTQ4L3NiYzg1NDguYworKysgYi9ib2FyZC9zYmM4NTQ4L3NiYzg1NDguYwpAQCAtNzcsMTIgKzc3LDEwIEBACiAJdm9sYXRpbGUgZnNsX2xiY190ICpsYmMgPSBMQkNfQkFTRV9BRERSOwogCiAJdWludCBjbGtkaXY7Ci0JdWludCBsYmNfaHo7CiAJc3lzX2luZm9fdCBzeXNpbmZvOwogCiAJZ2V0X3N5c19pbmZvKCZzeXNpbmZvKTsKIAljbGtkaXYgPSAoaW5fYmUzMigmbGJjLT5sY3JyKSAmIExDUlJfQ0xLRElWKSAqIDI7Ci0JbGJjX2h6ID0gc3lzaW5mby5mcmVxU3lzdGVtQnVzIC8gMTAwMDAwMCAvIGNsa2RpdjsKIAogCW91dF9iZTMyKCZndXItPmxiaXVpcGxsZGNyMSwgMHgwMDA3ODA4MCk7CiAJaWYgKGNsa2RpdiA9PSAxNikgewpkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMgYi9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYwppbmRleCBjNWZlOTJlLi45OGJjN2RmIDEwMDY0NAotLS0gYS9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYworKysgYi9ib2FyZC9zYmM4NTYwL3NiYzg1NjAuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiB2b2lkCiBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKIHsKLQlpbnQgbm9kZSwgdG1wWzJdOworCWludCBub2RlOwogI2lmZGVmIENPTkZJR19QQ0kKIAljb25zdCBjaGFyICpwYXRoOwogI2VuZGlmCkBAIC0zNTYsNyArMzU2LDYgQEAKIAlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOwogCiAJbm9kZSA9IGZkdF9wYXRoX29mZnNldChibG9iLCAiL2FsaWFzZXMiKTsKLQl0bXBbMF0gPSAwOwogCWlmIChub2RlID49IDApIHsKICNpZmRlZiBDT05GSUdfUENJCiAJCXBhdGggPSBmZHRfZ2V0cHJvcChibG9iLCBub2RlLCAicGNpMCIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvc3l0ZWNvL3pteDI1L3pteDI1LmMgYi9ib2FyZC9zeXRlY28vem14MjUvem14MjUuYwppbmRleCBhODllZTFhLi5jNTZiMTk1IDEwMDY0NAotLS0gYS9ib2FyZC9zeXRlY28vem14MjUvem14MjUuYworKysgYi9ib2FyZC9zeXRlY28vem14MjUvem14MjUuYwpAQCAtMTI4LDcgKzEyOCw2IEBACiAKICNpZmRlZiBDT05GSUdfRkVDX01YQwogCXN0cnVjdCBpb211eGNfbXV4X2N0bCAqbXV4Y3RsOwotCXN0cnVjdCBpb211eGNfcGFkX2N0bCAqcGFkY3RsOwogCXUzMiBncGlvX211eF9tb2RlMiA9IE1YMjVfUElOX01VWF9NT0RFKDIpOwogCXUzMiBncGlvX211eF9tb2RlNSA9IE1YMjVfUElOX01VWF9NT0RFKDUpOwogCkBAIC0xNDQsNyArMTQzLDYgQEAKIAkgKiBGRUNfUlhfRVJSOiBGRUNfUlhfRVJSIGlzIEFMVCAyIG1vZGUgb2YgcGluIFIyCiAJICovCiAJbXV4Y3RsID0gKHN0cnVjdCBpb211eGNfbXV4X2N0bCAqKUlNWF9JT1BBRE1VWF9CQVNFOwotCXBhZGN0bCA9IChzdHJ1Y3QgaW9tdXhjX3BhZF9jdGwgKilJTVhfSU9QQURDVExfQkFTRTsKIAogCXdyaXRlbChncGlvX211eF9tb2RlNSwgJm11eGN0bC0+cGFkX3VwbGxfYnlwY2xrKTsKIAl3cml0ZWwoZ3Bpb19tdXhfbW9kZTIsICZtdXhjdGwtPnBhZF91YXJ0Ml9jdHMpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlIGIvYm9hcmQvdGkvb21hcDVfZXZtL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggODUlCmNvcHkgZnJvbSBib2FyZC9jc2IyMjYvTWFrZWZpbGUKY29weSB0byBib2FyZC90aS9vbWFwNV9ldm0vTWFrZWZpbGUKaW5kZXggNmZlOWJlYy4uZmE4MWQ2NCAxMDA2NDQKLS0tIGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlCisrKyBiL2JvYXJkL3RpL29tYXA1X2V2bS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKKyMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjUsNyArMjUsNyBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5vCiAKLUNPQkpTCTo9IGNzYjIyNi5vIGZsYXNoLm8KK0NPQkpTCTo9IGV2bS5vCiAKIFNSQ1MJOj0gJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQpAQCAtMzMsNiArMzMsMTIgQEAKICQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChjYWxsIGNtZF9saW5rX29fdGFyZ2V0LCAkKE9CSlMpKQogCitjbGVhbjoKKwlybSAtZiAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAkKG9iaikuZGVwZW5kCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CmRpZmYgLS1naXQgYS9ib2FyZC90aS9vbWFwNV9ldm0vZXZtLmMgYi9ib2FyZC90aS9vbWFwNV9ldm0vZXZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwY2IxMwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3RpL29tYXA1X2V2bS9ldm0uYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMAorICogVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkLCA8d3d3LnRpLmNvbT4KKyAqIEFuZWVzaCBWICAgICAgIDxhbmVlc2hAdGkuY29tPgorICogU3RldmUgU2Frb21hbiAgPHN0ZXZlQHNha29tYW4uY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDx0d2w2MDMwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbW1jX2hvc3RfZGVmLmg+CisKKyNpbmNsdWRlICJtdXhfZGF0YS5oIgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworY29uc3Qgc3RydWN0IG9tYXBfc3lzaW5mbyBzeXNpbmZvID0geworCSJCb2FyZDogT01BUDU0MzAgRVZNXG4iCit9OworCisvKioKKyAqIEBicmllZiBib2FyZF9pbml0CisgKgorICogQHJldHVybiAwCisgKi8KK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJZ3BtY19pbml0KCk7CisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9PTUFQNV9TRVZNOworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAoMHg4MDAwMDAwMCArIDB4MTAwKTsgLyogYm9vdCBwYXJhbSBhZGRyICovCisKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBAYnJpZWYgbWlzY19pbml0X3IgLSBDb25maWd1cmUgRVZNIGJvYXJkIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zCisgKiBzdWNoIGFzIHBvd2VyIGNvbmZpZ3VyYXRpb25zLCBldGhlcm5ldCBpbml0aWFsaXphdGlvbiBhcyBwaGFzZTIgb2YKKyAqIGJvb3Qgc2VxdWVuY2UKKyAqCisgKiBAcmV0dXJuIDAKKyAqLworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1RXTDYwMzBfUE9XRVIKKwl0d2w2MDMwX2luaXRfYmF0dGVyeV9jaGFyZ2luZygpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0X211eGNvbmZfcmVnc19lc3NlbnRpYWwodm9pZCkKK3sKKwlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9DT1JFLCBjb3JlX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsLAorCQkgICBzaXplb2YoY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCkgLworCQkgICBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7CisKKwlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9XS1VQLCB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsLAorCQkgICBzaXplb2Yod2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCkgLworCQkgICBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7Cit9CisKK3ZvaWQgc2V0X211eGNvbmZfcmVnc19ub25fZXNzZW50aWFsKHZvaWQpCit7CisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWwsCisJCSAgIHNpemVvZihjb3JlX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbCkgLworCQkgICBzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7CisKKwlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9XS1VQLCB3a3VwX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbCwKKwkJICAgc2l6ZW9mKHdrdXBfcGFkY29uZl9hcnJheV9ub25fZXNzZW50aWFsKSAvCisJCSAgIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKK30KKworI2lmICFkZWZpbmVkKENPTkZJR19TUExfQlVJTEQpICYmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfTU1DKQoraW50IGJvYXJkX21tY19pbml0KGJkX3QgKmJpcykKK3sKKwlvbWFwX21tY19pbml0KDApOworCW9tYXBfbW1jX2luaXQoMSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL3RpL29tYXA1X2V2bS9tdXhfZGF0YS5oIGIvYm9hcmQvdGkvb21hcDVfZXZtL211eF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmNDcyOQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3RpL29tYXA1X2V2bS9tdXhfZGF0YS5oCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDEwCisgKiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQsIDx3d3cudGkuY29tPgorICoKKyAqCUJhbGFqaSBLcmlzaG5hbW9vcnRoeQk8YmFsYWppdGtAdGkuY29tPgorICoJQW5lZXNoIFYJCTxhbmVlc2hAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX0VWTTU0MzBfTVVYX0RBVEFfSAorI2RlZmluZSBfRVZNNTQzMF9NVVhfREFUQV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9tdXhfb21hcDUuaD4KKworY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxbXSA9IHsKKwore0dQTUNfQUQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDAgKi8KK3tHUE1DX0FEMSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQxICovCit7R1BNQ19BRDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MiAqLwore0dQTUNfQUQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDMgKi8KK3tHUE1DX0FENCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ0ICovCit7R1BNQ19BRDUsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NSAqLwore0dQTUNfQUQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDYgKi8KK3tHUE1DX0FENywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ3ICovCit7R1BNQ19OT0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0xKX0sCSAvKiBzZG1tYzJfY2xrICovCit7R1BNQ19OV0UsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfY21kICovCit7U0RNTUMxX0NMSywgKFBUVSB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJIC8qIHNkbW1jMV9jbGsgKi8KK3tTRE1NQzFfQ01ELCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2NtZCAqLwore1NETU1DMV9EQVQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDAgKi8KK3tTRE1NQzFfREFUMSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQxICovCit7U0RNTUMxX0RBVDIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MiAqLwore1NETU1DMV9EQVQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDMgKi8KK3tTRE1NQzFfREFUNCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ0ICovCit7U0RNTUMxX0RBVDUsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NSAqLwore1NETU1DMV9EQVQ2LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDYgKi8KK3tTRE1NQzFfREFUNywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ3ICovCit7VUFSVDNfQ1RTX1JDVFgsIChQVFUgfCBJRU4gfCBNMCl9LAkJCS8qIHVhcnQzX3R4ICovCit7VUFSVDNfUlRTX1NELCAoTTApfSwJCQkJCS8qIHVhcnQzX3J0c19zZCAqLwore1VBUlQzX1JYX0lSUlgsIChJRU4gfCBNMCl9LAkJCQkvKiB1YXJ0M19yeCAqLwore1VBUlQzX1RYX0lSVFgsIChNMCl9CQkJCQkvKiB1YXJ0M190eCAqLworCit9OworCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbFtdID0geworCit7UEFEMV9TUl9TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LCAvKiBzcl9zY2wgKi8KK3tQQUQwX1NSX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sIC8qIHNyX3NkYSAqLwore1BBRDFfU1lTXzMySywgKElFTiB8IE0wKX0JIC8qIHN5c18zMmsgKi8KKworfTsKKworY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IGNvcmVfcGFkY29uZl9hcnJheV9ub25fZXNzZW50aWFsW10gPSB7CisJe0dQTUNfQUQ4LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTMpfSwJLyogZ3Bpb18zMiAqLworCXtHUE1DX0FEOSwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzMzICovCisJe0dQTUNfQUQxMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzM0ICovCisJe0dQTUNfQUQxMSwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzM1ICovCisJe0dQTUNfQUQxMiwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzM2ICovCisJe0dQTUNfQUQxMywgKFBURCB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9PVVRfUFREIHwgTTMpfSwJLyogZ3Bpb18zNyAqLworCXtHUE1DX0FEMTQsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0zKX0sCS8qIGdwaW9fMzggKi8KKwl7R1BNQ19BRDE1LCAoUFREIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX09VVF9QVEQgfCBNMyl9LAkvKiBncGlvXzM5ICovCisJe0dQTUNfQTE2LCAoTTMpfSwJCQkJCQkvKiBncGlvXzQwICovCisJe0dQTUNfQTE3LCAoUFREIHwgTTMpfSwJCQkJCQkvKiBncGlvXzQxICovCisJe0dQTUNfQTE4LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzYgKi8KKwl7R1BNQ19BMTksIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBrcGRfcm93NyAqLworCXtHUE1DX0EyMCwgKElFTiB8IE0zKX0sCQkJCQkJLyogZ3Bpb180NCAqLworCXtHUE1DX0EyMSwgKE0zKX0sCQkJCQkJLyogZ3Bpb180NSAqLworCXtHUE1DX0EyMiwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCQkJLyoga3BkX2NvbDYgKi8KKwl7R1BNQ19BMjMsIChPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkJCS8qIGtwZF9jb2w3ICovCisJe0dQTUNfQTI0LCAoUFREIHwgTTMpfSwJCQkJCQkvKiBncGlvXzQ4ICovCisJe0dQTUNfQTI1LCAoUFREIHwgTTMpfSwJCQkJCQkvKiBncGlvXzQ5ICovCisJe0dQTUNfTkNTMCwgKE0zKX0sCQkJCQkJLyogZ3Bpb181MCAqLworCXtHUE1DX05DUzEsIChJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb181MSAqLworCXtHUE1DX05DUzIsIChJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb181MiAqLworCXtHUE1DX05DUzMsIChJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb181MyAqLworCXtHUE1DX05XUCwgKE0zKX0sCQkJCQkJLyogZ3Bpb181NCAqLworCXtHUE1DX0NMSywgKFBURCB8IE0zKX0sCQkJCQkJLyogZ3Bpb181NSAqLworCXtHUE1DX05BRFZfQUxFLCAoTTMpfSwJCQkJCQkvKiBncGlvXzU2ICovCisJe0dQTUNfTkJFMF9DTEUsIChNMyl9LAkJCQkJCS8qIGdwaW9fNTkgKi8KKwl7R1BNQ19OQkUxLCAoUFREIHwgTTMpfSwJCQkJCS8qIGdwaW9fNjAgKi8KKwl7R1BNQ19XQUlUMCwgKFBUVSB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzYxICovCisJe0dQTUNfV0FJVDEsIChJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb182MiAqLworCXtDMkNfREFUQTExLCAoUFREIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTAwICovCisJe0MyQ19EQVRBMTIsIChNMSl9LAkJCQkJCS8qIGRzaTFfdGUwICovCisJe0MyQ19EQVRBMTMsIChQVEQgfCBNMyl9LAkJCQkJLyogZ3Bpb18xMDIgKi8KKwl7QzJDX0RBVEExNCwgKE0xKX0sCQkJCQkJLyogZHNpMl90ZTAgKi8KKwl7QzJDX0RBVEExNSwgKFBURCB8IE0zKX0sCQkJCQkvKiBncGlvXzEwNCAqLworCXtIRE1JX0hQRCwgKE0wKX0sCQkJCQkJLyogaGRtaV9ocGQgKi8KKwl7SERNSV9DRUMsIChNMCl9LAkJCQkJCS8qIGhkbWlfY2VjICovCisJe0hETUlfRERDX1NDTCwgKFBUVSB8IE0wKX0sCQkJCQkvKiBoZG1pX2RkY19zY2wgKi8KKwl7SERNSV9ERENfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaGRtaV9kZGNfc2RhICovCisJe0NTSTIxX0RYMCwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMV9keDAgKi8KKwl7Q1NJMjFfRFkwLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIxX2R5MCAqLworCXtDU0kyMV9EWDEsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjFfZHgxICovCisJe0NTSTIxX0RZMSwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMV9keTEgKi8KKwl7Q1NJMjFfRFgyLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIxX2R4MiAqLworCXtDU0kyMV9EWTIsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjFfZHkyICovCisJe0NTSTIxX0RYMywgKFBURCB8IE03KX0sCQkJCQkvKiBjc2kyMV9keDMgKi8KKwl7Q1NJMjFfRFkzLCAoUFREIHwgTTcpfSwJCQkJCS8qIGNzaTIxX2R5MyAqLworCXtDU0kyMV9EWDQsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNyl9LAkJLyogY3NpMjFfZHg0ICovCisJe0NTSTIxX0RZNCwgKFBURCB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE03KX0sCQkvKiBjc2kyMV9keTQgKi8KKwl7Q1NJMjJfRFgwLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIyX2R4MCAqLworCXtDU0kyMl9EWTAsIChJRU4gfCBNMCl9LAkJCQkJLyogY3NpMjJfZHkwICovCisJe0NTSTIyX0RYMSwgKElFTiB8IE0wKX0sCQkJCQkvKiBjc2kyMl9keDEgKi8KKwl7Q1NJMjJfRFkxLCAoSUVOIHwgTTApfSwJCQkJCS8qIGNzaTIyX2R5MSAqLworCXtDQU1fU0hVVFRFUiwgKE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9PVVRfUFREIHwgTTApfSwJCS8qIGNhbV9zaHV0dGVyICovCisJe0NBTV9TVFJPQkUsIChPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBjYW1fc3Ryb2JlICovCisJe0NBTV9HTE9CQUxSRVNFVCwgKFBURCB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9PVVRfUFREIHwgTTMpfSwJLyogZ3Bpb184MyAqLworCXtVU0JCMV9VTFBJVExMX0NMSywgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2Nhd2FrZSAqLworCXtVU0JCMV9VTFBJVExMX1NUUCwgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2NhZGF0YSAqLworCXtVU0JCMV9VTFBJVExMX0RJUiwgKElFTiB8IE9GRl9FTiB8IE9GRl9JTiB8IE0xKX0sCQkvKiBoc2kxX2NhZmxhZyAqLworCXtVU0JCMV9VTFBJVExMX05YVCwgKE9GRl9FTiB8IE0xKX0sCQkJCS8qIGhzaTFfYWNyZWFkeSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDAsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2Fjd2FrZSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDEsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2FjZGF0YSAqLworCXtVU0JCMV9VTFBJVExMX0RBVDIsIChPRkZfRU4gfCBNMSl9LAkJCQkvKiBoc2kxX2FjZmxhZyAqLworCXtVU0JCMV9VTFBJVExMX0RBVDMsIChJRU4gfCBPRkZfRU4gfCBPRkZfSU4gfCBNMSl9LAkJLyogaHNpMV9jYXJlYWR5ICovCisJe1VTQkIxX1VMUElUTExfREFUNCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0NCAqLworCXtVU0JCMV9VTFBJVExMX0RBVDUsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNNCl9LAkvKiB1c2JiMV91bHBpcGh5X2RhdDUgKi8KKwl7VVNCQjFfVUxQSVRMTF9EQVQ2LCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTQpfSwJLyogdXNiYjFfdWxwaXBoeV9kYXQ2ICovCisJe1VTQkIxX1VMUElUTExfREFUNywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE00KX0sCS8qIHVzYmIxX3VscGlwaHlfZGF0NyAqLworCXtVU0JCMV9IU0lDX0RBVEEsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiB1c2JiMV9oc2ljX2RhdGEgKi8KKwl7VVNCQjFfSFNJQ19TVFJPQkUsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiB1c2JiMV9oc2ljX3N0cm9iZSAqLworCXtVU0JDMV9JQ1VTQl9EUCwgKElFTiB8IE0wKX0sCQkJCQkvKiB1c2JjMV9pY3VzYl9kcCAqLworCXtVU0JDMV9JQ1VTQl9ETSwgKElFTiB8IE0wKX0sCQkJCQkvKiB1c2JjMV9pY3VzYl9kbSAqLworCXtBQkVfTUNCU1AyX0NMS1gsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfbWNic3AyX2Nsa3ggKi8KKwl7QUJFX01DQlNQMl9EUiwgKElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCS8qIGFiZV9tY2JzcDJfZHIgKi8KKwl7QUJFX01DQlNQMl9EWCwgKE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTApfSwJCQkvKiBhYmVfbWNic3AyX2R4ICovCisJe0FCRV9NQ0JTUDJfRlNYLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogYWJlX21jYnNwMl9mc3ggKi8KKwl7QUJFX01DQlNQMV9DTEtYLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogYWJlX21jYnNwMV9jbGt4ICovCisJe0FCRV9NQ0JTUDFfRFIsIChJRU4gfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBhYmVfbWNic3AxX2RyICovCisJe0FCRV9NQ0JTUDFfRFgsIChPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkJLyogYWJlX21jYnNwMV9keCAqLworCXtBQkVfTUNCU1AxX0ZTWCwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9tY2JzcDFfZnN4ICovCisJe0FCRV9QRE1fVUxfREFUQSwgKFBURCB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9wZG1fdWxfZGF0YSAqLworCXtBQkVfUERNX0RMX0RBVEEsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfcGRtX2RsX2RhdGEgKi8KKwl7QUJFX1BETV9GUkFNRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9wZG1fZnJhbWUgKi8KKwl7QUJFX1BETV9MQl9DTEssIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBhYmVfcGRtX2xiX2NsayAqLworCXtBQkVfQ0xLUywgKFBURCB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIGFiZV9jbGtzICovCisJe0FCRV9ETUlDX0NMSzEsIChNMCl9LAkJCQkJCS8qIGFiZV9kbWljX2NsazEgKi8KKwl7QUJFX0RNSUNfRElOMSwgKElFTiB8IE0wKX0sCQkJCQkvKiBhYmVfZG1pY19kaW4xICovCisJe0FCRV9ETUlDX0RJTjIsIChJRU4gfCBNMCl9LAkJCQkJLyogYWJlX2RtaWNfZGluMiAqLworCXtBQkVfRE1JQ19ESU4zLCAoSUVOIHwgTTApfSwJCQkJCS8qIGFiZV9kbWljX2RpbjMgKi8KKwl7VUFSVDJfQ1RTLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJCS8qIHVhcnQyX2N0cyAqLworCXtVQVJUMl9SVFMsIChNMCl9LAkJCQkJCS8qIHVhcnQyX3J0cyAqLworCXtVQVJUMl9SWCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiB1YXJ0Ml9yeCAqLworCXtVQVJUMl9UWCwgKE0wKX0sCQkJCQkJLyogdWFydDJfdHggKi8KKwl7SERRX1NJTywgKE0zKX0sCQkJCQkJLyogZ3Bpb18xMjcgKi8KKwl7TUNTUEkxX0NMSywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTFfY2xrICovCisJe01DU1BJMV9TT01JLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJCS8qIG1jc3BpMV9zb21pICovCisJe01DU1BJMV9TSU1PLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJCS8qIG1jc3BpMV9zaW1vICovCisJe01DU1BJMV9DUzAsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBtY3NwaTFfY3MwICovCisJe01DU1BJMV9DUzEsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMyl9LAkvKiBtY3NwaTFfY3MxICovCisJe01DU1BJMV9DUzIsIChQVFUgfCBPRkZfRU4gfCBPRkZfT1VUX1BUVSB8IE0zKX0sCQkvKiBncGlvXzEzOSAqLworCXtNQ1NQSTFfQ1MzLCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTQwICovCisJe1NETU1DNV9DTEssIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCQkvKiBzZG1tYzVfY2xrICovCisJe1NETU1DNV9DTUQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzVfY21kICovCisJe1NETU1DNV9EQVQwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWM1X2RhdDAgKi8KKwl7U0RNTUM1X0RBVDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBzZG1tYzVfZGF0MSAqLworCXtTRE1NQzVfREFUMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCS8qIHNkbW1jNV9kYXQyICovCisJe1NETU1DNV9EQVQzLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJLyogc2RtbWM1X2RhdDMgKi8KKwl7TUNTUEk0X0NMSywgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiBtY3NwaTRfY2xrICovCisJe01DU1BJNF9TSU1PLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJCS8qIG1jc3BpNF9zaW1vICovCisJe01DU1BJNF9TT01JLCAoSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwJCS8qIG1jc3BpNF9zb21pICovCisJe01DU1BJNF9DUzAsIChQVEQgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkvKiBtY3NwaTRfY3MwICovCisJe1VBUlQ0X1JYLCAoSUVOIHwgTTApfSwJCQkJCQkvKiB1YXJ0NF9yeCAqLworCXtVQVJUNF9UWCwgKE0wKX0sCQkJCQkJLyogdWFydDRfdHggKi8KKwl7VVNCQjJfVUxQSVRMTF9DTEssIChQVEQgfCBJRU4gfCBNMyl9LAkJCQkvKiBncGlvXzE1NyAqLworCXtVU0JCMl9VTFBJVExMX1NUUCwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMjMgKi8KKwl7VVNCQjJfVUxQSVRMTF9ESVIsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTIyICovCisJe1VTQkIyX1VMUElUTExfTlhULCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGEyMSAqLworCXtVU0JCMl9VTFBJVExMX0RBVDAsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTIwICovCisJe1VTQkIyX1VMUElUTExfREFUMSwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMTkgKi8KKwl7VVNCQjJfVUxQSVRMTF9EQVQyLCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGExOCAqLworCXtVU0JCMl9VTFBJVExMX0RBVDMsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTE1ICovCisJe1VTQkIyX1VMUElUTExfREFUNCwgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMTQgKi8KKwl7VVNCQjJfVUxQSVRMTF9EQVQ1LCAoSUVOIHwgTTUpfSwJCQkJLyogZGlzcGMyX2RhdGExMyAqLworCXtVU0JCMl9VTFBJVExMX0RBVDYsIChJRU4gfCBNNSl9LAkJCQkvKiBkaXNwYzJfZGF0YTEyICovCisJe1VTQkIyX1VMUElUTExfREFUNywgKElFTiB8IE01KX0sCQkJCS8qIGRpc3BjMl9kYXRhMTEgKi8KKwl7VVNCQjJfSFNJQ19EQVRBLCAoUFREIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVFUgfCBNMyl9LAkJLyogZ3Bpb18xNjkgKi8KKwl7VVNCQjJfSFNJQ19TVFJPQkUsIChQVEQgfCBPRkZfRU4gfCBPRkZfT1VUX1BUVSB8IE0zKX0sCQkvKiBncGlvXzE3MCAqLworCXtVTklQUk9fVFgwLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sMCAqLworCXtVTklQUk9fVFkwLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sMSAqLworCXtVTklQUk9fVFgxLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sMiAqLworCXtVTklQUk9fVFkxLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sMyAqLworCXtVTklQUk9fVFgyLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sNCAqLworCXtVTklQUk9fVFkyLCAoT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJCQkvKiBrcGRfY29sNSAqLworCXtVTklQUk9fUlgwLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzAgKi8KKwl7VU5JUFJPX1JZMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIGtwZF9yb3cxICovCisJe1VOSVBST19SWDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBrcGRfcm93MiAqLworCXtVTklQUk9fUlkxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwJLyoga3BkX3JvdzMgKi8KKwl7VU5JUFJPX1JYMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sCS8qIGtwZF9yb3c0ICovCisJe1VOSVBST19SWTIsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LAkvKiBrcGRfcm93NSAqLworCXtVU0JBMF9PVEdfQ0UsIChQVEQgfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfT1VUX1BURCB8IE0wKX0sCS8qIHVzYmEwX290Z19jZSAqLworCXtVU0JBMF9PVEdfRFAsIChJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LAkJLyogdXNiYTBfb3RnX2RwICovCisJe1VTQkEwX09UR19ETSwgKElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sCQkvKiB1c2JhMF9vdGdfZG0gKi8KKwl7RlJFRl9DTEsxX09VVCwgKE0wKX0sCQkJCQkJLyogZnJlZl9jbGsxX291dCAqLworCXtGUkVGX0NMSzJfT1VULCAoTTApfSwJCQkJCQkvKiBmcmVmX2NsazJfb3V0ICovCisJe1NZU19OSVJRMSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiBzeXNfbmlycTEgKi8KKwl7U1lTX05JUlEyLCAoTTcpfSwJCQkJCQkvKiBzeXNfbmlycTIgKi8KKwl7U1lTX0JPT1QwLCAoUFRVIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTg0ICovCisJe1NZU19CT09UMSwgKE0zKX0sCQkJCQkJLyogZ3Bpb18xODUgKi8KKwl7U1lTX0JPT1QyLCAoUFREIHwgSUVOIHwgTTMpfSwJCQkJCS8qIGdwaW9fMTg2ICovCisJe1NZU19CT09UMywgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4NyAqLworCXtTWVNfQk9PVDQsIChNMyl9LAkJCQkJCS8qIGdwaW9fMTg4ICovCisJe1NZU19CT09UNSwgKFBURCB8IElFTiB8IE0zKX0sCQkJCQkvKiBncGlvXzE4OSAqLworCXtEUE1fRU1VMCwgKElFTiB8IE0wKX0sCQkJCQkJLyogZHBtX2VtdTAgKi8KKwl7RFBNX0VNVTEsIChJRU4gfCBNMCl9LAkJCQkJCS8qIGRwbV9lbXUxICovCisJe0RQTV9FTVUyLCAoSUVOIHwgTTApfSwJCQkJCQkvKiBkcG1fZW11MiAqLworCXtEUE1fRU1VMywgKElFTiB8IE01KX0sCQkJCQkJLyogZGlzcGMyX2RhdGExMCAqLworCXtEUE1fRU1VNCwgKElFTiB8IE01KX0sCQkJCQkJLyogZGlzcGMyX2RhdGE5ICovCisJe0RQTV9FTVU1LCAoSUVOIHwgTTUpfSwJCQkJCQkvKiBkaXNwYzJfZGF0YTE2ICovCisJe0RQTV9FTVU2LCAoSUVOIHwgTTUpfSwJCQkJCQkvKiBkaXNwYzJfZGF0YTE3ICovCisJe0RQTV9FTVU3LCAoSUVOIHwgTTUpfSwJCQkJCQkvKiBkaXNwYzJfaHN5bmMgKi8KKwl7RFBNX0VNVTgsIChJRU4gfCBNNSl9LAkJCQkJCS8qIGRpc3BjMl9wY2xrICovCisJe0RQTV9FTVU5LCAoSUVOIHwgTTUpfSwJCQkJCQkvKiBkaXNwYzJfdnN5bmMgKi8KKwl7RFBNX0VNVTEwLCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kZSAqLworCXtEUE1fRU1VMTEsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGE4ICovCisJe0RQTV9FTVUxMiwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTcgKi8KKwl7RFBNX0VNVTEzLCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhNiAqLworCXtEUE1fRU1VMTQsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGE1ICovCisJe0RQTV9FTVUxNSwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTQgKi8KKwl7RFBNX0VNVTE2LCAoTTMpfSwJCQkJCQkvKiBncGlvXzI3ICovCisJe0RQTV9FTVUxNywgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTIgKi8KKwl7RFBNX0VNVTE4LCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhMSAqLworCXtEUE1fRU1VMTksIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGEwICovCisJe0kyQzFfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMV9zY2wgKi8KKwl7STJDMV9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMxX3NkYSAqLworCXtJMkMyX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzJfc2NsICovCisJe0kyQzJfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMl9zZGEgKi8KKwl7STJDM19TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMzX3NjbCAqLworCXtJMkMzX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzNfc2RhICovCisJe0kyQzRfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjNF9zY2wgKi8KKwl7STJDNF9TREEsIChQVFUgfCBJRU4gfCBNMCl9CQkJCS8qIGkyYzRfc2RhICovCit9OworCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgd2t1cF9wYWRjb25mX2FycmF5X25vbl9lc3NlbnRpYWxbXSA9IHsKKwl7UEFEMF9TSU1fSU8sIChJRU4gfCBNMCl9LAkJLyogc2ltX2lvICovCisJe1BBRDFfU0lNX0NMSywgKE0wKX0sCQkJLyogc2ltX2NsayAqLworCXtQQUQwX1NJTV9SRVNFVCwgKE0wKX0sCQkJLyogc2ltX3Jlc2V0ICovCisJe1BBRDFfU0lNX0NELCAoUFRVIHwgSUVOIHwgTTApfSwJLyogc2ltX2NkICovCisJe1BBRDBfU0lNX1BXUkNUUkwsIChNMCl9LAkJLyogc2ltX3B3cmN0cmwgKi8KKwl7UEFEMV9GUkVGX1hUQUxfSU4sIChNMCl9LAkJLyogIyAqLworCXtQQUQwX0ZSRUZfU0xJQ0VSX0lOLCAoTTApfSwJCS8qIGZyZWZfc2xpY2VyX2luICovCisJe1BBRDFfRlJFRl9DTEtfSU9SRVEsIChNMCl9LAkJLyogZnJlZl9jbGtfaW9yZXEgKi8KKwl7UEFEMF9GUkVGX0NMSzBfT1VULCAoTTIpfSwJCS8qIHN5c19kcm1fbXNlY3VyZSAqLworCXtQQUQxX0ZSRUZfQ0xLM19SRVEsIChQVFUgfCBJRU4gfCBNMCl9LAkvKiAjICovCisJe1BBRDBfRlJFRl9DTEszX09VVCwgKE0wKX0sCQkvKiBmcmVmX2NsazNfb3V0ICovCisJe1BBRDFfRlJFRl9DTEs0X1JFUSwgKFBUVSB8IElFTiB8IE0wKX0sCS8qICMgKi8KKwl7UEFEMF9GUkVGX0NMSzRfT1VULCAoTTApfSwJCS8qICMgKi8KKwl7UEFEMF9TWVNfTlJFU1BXUk9OLCAoTTApfSwJCS8qIHN5c19ucmVzcHdyb24gKi8KKwl7UEFEMV9TWVNfTlJFU1dBUk0sIChNMCl9LAkJLyogc3lzX25yZXN3YXJtICovCisJe1BBRDBfU1lTX1BXUl9SRVEsIChQVFUgfCBNMCl9LAkJLyogc3lzX3B3cl9yZXEgKi8KKwl7UEFEMV9TWVNfUFdST05fUkVTRVQsIChNMyl9LAkJLyogZ3Bpb193azI5ICovCisJe1BBRDBfU1lTX0JPT1Q2LCAoSUVOIHwgTTMpfSwJCS8qIGdwaW9fd2s5ICovCisJe1BBRDFfU1lTX0JPT1Q3LCAoSUVOIHwgTTMpfSwJCS8qIGdwaW9fd2sxMCAqLworCXtQQUQxX0ZSRUZfQ0xLM19SRVEsIChNMyl9LAkJLyogZ3Bpb193azMwICovCisJe1BBRDFfRlJFRl9DTEs0X1JFUSwgKE0zKX0sCQkvKiBncGlvX3drNyAqLworCXtQQUQwX0ZSRUZfQ0xLNF9PVVQsIChNMyl9LAkJLyogZ3Bpb193azggKi8KK307CisKKyNlbmRpZiAvKiBfRVZNNDQzMF9NVVhfREFUQV9IICovCmRpZmYgLS1naXQgYS9ib2FyZC90aS9wYW5kYS9NYWtlZmlsZSBiL2JvYXJkL3RpL3BhbmRhL01ha2VmaWxlCmluZGV4IGVjNDkzZjUuLmIyOTllMmYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL3BhbmRhL01ha2VmaWxlCisrKyBiL2JvYXJkL3RpL3BhbmRhL01ha2VmaWxlCkBAIC0yNSw5ICsyNSw3IEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLm8KIAotaWZuZGVmIENPTkZJR19TUExfQlVJTEQKIENPQkpTCTo9IHBhbmRhLm8KLWVuZGlmCiAKIFNSQ1MJOj0gJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvcGFuZGEvcGFuZGEuYyBiL2JvYXJkL3RpL3BhbmRhL3BhbmRhLmMKaW5kZXggOTczMjBjYi4uYjQyNzFmYiAxMDA2NDQKLS0tIGEvYm9hcmQvdGkvcGFuZGEvcGFuZGEuYworKysgYi9ib2FyZC90aS9wYW5kYS9wYW5kYS5jCkBAIC02NSw2ICs2NSwyMyBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKHZvaWQpCit7CisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCwKKwkJICAgc2l6ZW9mKGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwpIC8KKwkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOworCisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCwKKwkJICAgc2l6ZW9mKHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwpIC8KKwkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOworCisJaWYgKG9tYXBfcmV2aXNpb24oKSA+PSBPTUFQNDQ2MF9FUzFfMCkKKwkJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwKKwkJCQkgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwLAorCQkJCSBzaXplb2Yod2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwKSAvCisJCQkJIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKK30KKwogdm9pZCBzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwodm9pZCkKIHsKIAlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9DT1JFLCBjb3JlX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbCwKQEAgLTkzLDEwICsxMTAsMTggQEAKIAkJCQlzaXplb2Yoc3RydWN0IHBhZF9jb25mX2VudHJ5KSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfR0VORVJJQ19NTUMKKyNpZiAhZGVmaW5lZChDT05GSUdfU1BMX0JVSUxEKSAmJiBkZWZpbmVkKENPTkZJR19HRU5FUklDX01NQykKIGludCBib2FyZF9tbWNfaW5pdChiZF90ICpiaXMpCiB7CiAJb21hcF9tbWNfaW5pdCgwKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgorCisvKgorICogZ2V0X2JvYXJkX3JldigpIC0gZ2V0IGJvYXJkIHJldmlzaW9uCisgKi8KK3UzMiBnZXRfYm9hcmRfcmV2KHZvaWQpCit7CisJcmV0dXJuIDB4MjA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC90aS9wYW5kYS9wYW5kYV9tdXhfZGF0YS5oIGIvYm9hcmQvdGkvcGFuZGEvcGFuZGFfbXV4X2RhdGEuaAppbmRleCA4M2QwYzNmLi5jMDUxNzBlIDEwMDY0NAotLS0gYS9ib2FyZC90aS9wYW5kYS9wYW5kYV9tdXhfZGF0YS5oCisrKyBiL2JvYXJkL3RpL3BhbmRhL3BhbmRhX211eF9kYXRhLmgKQEAgLTI4LDYgKzI4LDU4IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXhfb21hcDQuaD4KIAorCitjb25zdCBzdHJ1Y3QgcGFkX2NvbmZfZW50cnkgY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbFtdID0geworCit7R1BNQ19BRDAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MCAqLwore0dQTUNfQUQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDEgKi8KK3tHUE1DX0FEMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQyICovCit7R1BNQ19BRDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MyAqLwore0dQTUNfQUQ0LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDQgKi8KK3tHUE1DX0FENSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ1ICovCit7R1BNQ19BRDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NiAqLwore0dQTUNfQUQ3LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDcgKi8KK3tHUE1DX05PRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9PVVRfUFREIHwgTTEpfSwJIC8qIHNkbW1jMl9jbGsgKi8KK3tHUE1DX05XRSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9jbWQgKi8KK3tTRE1NQzFfQ0xLLCAoUFRVIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMCl9LAkgLyogc2RtbWMxX2NsayAqLwore1NETU1DMV9DTUQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfY21kICovCit7U0RNTUMxX0RBVDAsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MCAqLwore1NETU1DMV9EQVQxLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDEgKi8KK3tTRE1NQzFfREFUMiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQyICovCit7U0RNTUMxX0RBVDMsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MyAqLwore1NETU1DMV9EQVQ0LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDQgKi8KK3tTRE1NQzFfREFUNSwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ1ICovCit7U0RNTUMxX0RBVDYsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NiAqLwore1NETU1DMV9EQVQ3LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDcgKi8KK3tJMkMxX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzFfc2NsICovCit7STJDMV9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMxX3NkYSAqLwore0kyQzJfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjMl9zY2wgKi8KK3tJMkMyX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzJfc2RhICovCit7STJDM19TQ0wsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmMzX3NjbCAqLwore0kyQzNfU0RBLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkJLyogaTJjM19zZGEgKi8KK3tJMkM0X1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCS8qIGkyYzRfc2NsICovCit7STJDNF9TREEsIChQVFUgfCBJRU4gfCBNMCl9LAkJCQkvKiBpMmM0X3NkYSAqLwore1VBUlQzX0NUU19SQ1RYLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkvKiB1YXJ0M190eCAqLwore1VBUlQzX1JUU19TRCwgKE0wKX0sCQkJCQkvKiB1YXJ0M19ydHNfc2QgKi8KK3tVQVJUM19SWF9JUlJYLCAoSUVOIHwgTTApfSwJCQkJLyogdWFydDNfcnggKi8KK3tVQVJUM19UWF9JUlRYLCAoTTApfQkJCQkJLyogdWFydDNfdHggKi8KKworfTsKKworY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxbXSA9IHsKKwore1BBRDFfU1JfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwgLyogc3Jfc2NsICovCit7UEFEMF9TUl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LCAvKiBzcl9zZGEgKi8KK3tQQUQxX1NZU18zMkssIChJRU4gfCBNMCl9CSAvKiBzeXNfMzJrICovCisKK307CisKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsXzQ0NjBbXSA9IHsKKwore1BBRDFfRlJFRl9DTEs0X1JFUSwgKE0zKX0sCSAvKiBncGlvX3drNywgVFBTICovCisKK307CisKIGNvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb3JlX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbFtdID0gewogCXtHUE1DX0FEOCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0zKX0sCS8qIGdwaW9fMzIgKi8KIAl7R1BNQ19BRDksIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18zMyAqLwpAQCAtMjE5LDcgKzI3MSw3IEBACiAJe1BBRDBfRlJFRl9TTElDRVJfSU4sIChNMCl9LAkJLyogZnJlZl9zbGljZXJfaW4gKi8KIAl7UEFEMV9GUkVGX0NMS19JT1JFUSwgKE0wKX0sCQkvKiBmcmVmX2Nsa19pb3JlcSAqLwogCXtQQUQwX0ZSRUZfQ0xLMF9PVVQsIChNMil9LAkJLyogc3lzX2RybV9tc2VjdXJlICovCi0Je1BBRDFfRlJFRl9DTEszX1JFUSwgTTd9LAkJCQkJLyogc2FmZSBtb2RlICovCisJe1BBRDFfRlJFRl9DTEszX1JFUSwgTTd9LAkJLyogc2FmZSBtb2RlICovCiAJe1BBRDBfRlJFRl9DTEszX09VVCwgKE0wKX0sCQkvKiBmcmVmX2NsazNfb3V0ICovCiAJe1BBRDBfRlJFRl9DTEs0X09VVCwgKFBUVSB8IE0zKX0sCS8qIGxlZCBzdGF0dXNfMiAqLwogCXtQQUQwX1NZU19OUkVTUFdST04sIChNMCl9LAkJLyogc3lzX25yZXNwd3JvbiAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvc2RwNDQzMC9NYWtlZmlsZSBiL2JvYXJkL3RpL3NkcDQ0MzAvTWFrZWZpbGUKaW5kZXggODA2ZmRmNC4uNzJhZDNlYiAxMDA2NDQKLS0tIGEvYm9hcmQvdGkvc2RwNDQzMC9NYWtlZmlsZQorKysgYi9ib2FyZC90aS9zZHA0NDMwL01ha2VmaWxlCkBAIC0yNSw4ICsyNSwxMCBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5vCiAKK0NPQkpTCTo9IHNkcC5vCisKIGlmbmRlZiBDT05GSUdfU1BMX0JVSUxECi1DT0JKUwk6PSBzZHAubyBjbWRfYmF0Lm8KK0NPQkpTCSs9IGNtZF9iYXQubwogZW5kaWYKIAogU1JDUwk6PSAkKENPQkpTOi5vPS5jKQpkaWZmIC0tZ2l0IGEvYm9hcmQvdGkvc2RwNDQzMC9zZHAuYyBiL2JvYXJkL3RpL3NkcDQ0MzAvc2RwLmMKaW5kZXggYTVlYTY4Mi4uZTFiODUzYyAxMDA2NDQKLS0tIGEvYm9hcmQvdGkvc2RwNDQzMC9zZHAuYworKysgYi9ib2FyZC90aS9zZHA0NDMwL3NkcC5jCkBAIC03MCw2ICs3MCwyMyBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHNldF9tdXhjb25mX3JlZ3NfZXNzZW50aWFsKHZvaWQpCit7CisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfQ09SRSwgY29yZV9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCwKKwkJICAgc2l6ZW9mKGNvcmVfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwpIC8KKwkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOworCisJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbCwKKwkJICAgc2l6ZW9mKHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWwpIC8KKwkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOworCisJaWYgKG9tYXBfcmV2aXNpb24oKSA+PSBPTUFQNDQ2MF9FUzFfMCkKKwkJZG9fc2V0X211eChDT05UUk9MX1BBRENPTkZfV0tVUCwKKwkJCQkgd2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwLAorCQkJCSBzaXplb2Yod2t1cF9wYWRjb25mX2FycmF5X2Vzc2VudGlhbF80NDYwKSAvCisJCQkJIHNpemVvZihzdHJ1Y3QgcGFkX2NvbmZfZW50cnkpKTsKK30KKwogdm9pZCBzZXRfbXV4Y29uZl9yZWdzX25vbl9lc3NlbnRpYWwodm9pZCkKIHsKIAlkb19zZXRfbXV4KENPTlRST0xfUEFEQ09ORl9DT1JFLCBjb3JlX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbCwKQEAgLTgxLDcgKzk4LDcgQEAKIAkJICAgc2l6ZW9mKHN0cnVjdCBwYWRfY29uZl9lbnRyeSkpOwogfQogCi0jaWZkZWYgQ09ORklHX0dFTkVSSUNfTU1DCisjaWYgIWRlZmluZWQoQ09ORklHX1NQTF9CVUlMRCkgJiYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19NTUMpCiBpbnQgYm9hcmRfbW1jX2luaXQoYmRfdCAqYmlzKQogewogCW9tYXBfbW1jX2luaXQoMCk7CkBAIC04OSwzICsxMDYsMTEgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgorCisvKgorICogZ2V0X2JvYXJkX3JldigpIC0gZ2V0IGJvYXJkIHJldmlzaW9uCisgKi8KK3UzMiBnZXRfYm9hcmRfcmV2KHZvaWQpCit7CisJcmV0dXJuIDB4MjA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC90aS9zZHA0NDMwL3NkcDQ0MzBfbXV4X2RhdGEuaCBiL2JvYXJkL3RpL3NkcDQ0MzAvc2RwNDQzMF9tdXhfZGF0YS5oCmluZGV4IDA2ZWZhZWEuLjFjNmUwZWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RpL3NkcDQ0MzAvc2RwNDQzMF9tdXhfZGF0YS5oCisrKyBiL2JvYXJkL3RpL3NkcDQ0MzAvc2RwNDQzMF9tdXhfZGF0YS5oCkBAIC0yOCw2ICsyOCw0OSBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4X29tYXA0Lmg+CiAKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb3JlX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsW10gPSB7CisKK3tHUE1DX0FEMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQwICovCit7R1BNQ19BRDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0MSAqLwore0dQTUNfQUQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDIgKi8KK3tHUE1DX0FEMywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQzICovCit7R1BNQ19BRDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NCAqLwore0dQTUNfQUQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2RhdDUgKi8KK3tHUE1DX0FENiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0xKX0sIC8qIHNkbW1jMl9kYXQ2ICovCit7R1BNQ19BRDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMSl9LCAvKiBzZG1tYzJfZGF0NyAqLwore0dQTUNfTk9FLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX09VVF9QVEQgfCBNMSl9LAkgLyogc2RtbWMyX2NsayAqLwore0dQTUNfTldFLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTEpfSwgLyogc2RtbWMyX2NtZCAqLwore1NETU1DMV9DTEssIChQVFUgfCBPRkZfRU4gfCBPRkZfT1VUX1BURCB8IE0wKX0sCSAvKiBzZG1tYzFfY2xrICovCit7U0RNTUMxX0NNRCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9jbWQgKi8KK3tTRE1NQzFfREFUMCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQwICovCit7U0RNTUMxX0RBVDEsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0MSAqLwore1NETU1DMV9EQVQyLCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDIgKi8KK3tTRE1NQzFfREFUMywgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQzICovCit7U0RNTUMxX0RBVDQsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NCAqLwore1NETU1DMV9EQVQ1LCAoUFRVIHwgSUVOIHwgT0ZGX0VOIHwgT0ZGX1BEIHwgT0ZGX0lOIHwgTTApfSwgLyogc2RtbWMxX2RhdDUgKi8KK3tTRE1NQzFfREFUNiwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0wKX0sIC8qIHNkbW1jMV9kYXQ2ICovCit7U0RNTUMxX0RBVDcsIChQVFUgfCBJRU4gfCBPRkZfRU4gfCBPRkZfUEQgfCBPRkZfSU4gfCBNMCl9LCAvKiBzZG1tYzFfZGF0NyAqLwore1VBUlQzX0NUU19SQ1RYLCAoUFRVIHwgSUVOIHwgTTApfSwJCQkvKiB1YXJ0M190eCAqLwore1VBUlQzX1JUU19TRCwgKE0wKX0sCQkJCQkvKiB1YXJ0M19ydHNfc2QgKi8KK3tVQVJUM19SWF9JUlJYLCAoSUVOIHwgTTApfSwJCQkJLyogdWFydDNfcnggKi8KK3tVQVJUM19UWF9JUlRYLCAoTTApfQkJCQkJLyogdWFydDNfdHggKi8KKworfTsKKworY29uc3Qgc3RydWN0IHBhZF9jb25mX2VudHJ5IHdrdXBfcGFkY29uZl9hcnJheV9lc3NlbnRpYWxbXSA9IHsKKwore1BBRDFfU1JfU0NMLCAoUFRVIHwgSUVOIHwgTTApfSwgLyogc3Jfc2NsICovCit7UEFEMF9TUl9TREEsIChQVFUgfCBJRU4gfCBNMCl9LCAvKiBzcl9zZGEgKi8KK3tQQUQxX1NZU18zMkssIChJRU4gfCBNMCl9CSAvKiBzeXNfMzJrICovCisKK307CisKK2NvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfZXNzZW50aWFsXzQ0NjBbXSA9IHsKKwore1BBRDFfRlJFRl9DTEs0X1JFUSwgKE0zKX0sCSAvKiBncGlvX3drNywgVFBTICovCisKK307CisKIGNvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSBjb3JlX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbFtdID0gewogCXtHUE1DX0FEOCwgKFBUVSB8IElFTiB8IE9GRl9FTiB8IE9GRl9QRCB8IE9GRl9JTiB8IE0zKX0sCS8qIGdwaW9fMzIgKi8KIAl7R1BNQ19BRDksIChQVFUgfCBJRU4gfCBNMyl9LAkJCQkJLyogZ3Bpb18zMyAqLwpAQCAtMjAwLDYgKzI0MywxNSBAQAogCXtEUE1fRU1VMTcsIChJRU4gfCBNNSl9LAkJCQkJLyogZGlzcGMyX2RhdGEyICovCiAJe0RQTV9FTVUxOCwgKElFTiB8IE01KX0sCQkJCQkvKiBkaXNwYzJfZGF0YTEgKi8KIAl7RFBNX0VNVTE5LCAoSUVOIHwgTTUpfSwJCQkJCS8qIGRpc3BjMl9kYXRhMCAqLworCXtJMkMxX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiBpMmMxX3NjbCAqLworCXtJMkMxX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiBpMmMxX3NkYSAqLworCXtJMkMyX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiBpMmMyX3NjbCAqLworCXtJMkMyX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiBpMmMyX3NkYSAqLworCXtJMkMzX1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiBpMmMzX3NjbCAqLworCXtJMkMzX1NEQSwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiBpMmMzX3NkYSAqLworCXtJMkM0X1NDTCwgKFBUVSB8IElFTiB8IE0wKX0sCQkJCQkvKiBpMmM0X3NjbCAqLworCXtJMkM0X1NEQSwgKFBUVSB8IElFTiB8IE0wKX0JCQkJCS8qIGkyYzRfc2RhICovCisKIH07CiAKIGNvbnN0IHN0cnVjdCBwYWRfY29uZl9lbnRyeSB3a3VwX3BhZGNvbmZfYXJyYXlfbm9uX2Vzc2VudGlhbFtdID0gewpAQCAtMjE0LDcgKzI2Niw2IEBACiAJe1BBRDBfRlJFRl9DTEswX09VVCwgKE0yKX0sCQkvKiBzeXNfZHJtX21zZWN1cmUgKi8KIAl7UEFEMV9GUkVGX0NMSzNfUkVRLCAoTTMpfSwJCS8qIGdwaW9fd2szMCAtIERlYnVnIGxlZC0xICovCiAJe1BBRDBfRlJFRl9DTEszX09VVCwgKE0wKX0sCQkvKiBmcmVmX2NsazNfb3V0ICovCi0Je1BBRDFfRlJFRl9DTEs0X1JFUSwgKE0zKX0sCQkvKiBncGlvX3drNyAtIERlYnVnIGxlZC0yICovCiAJe1BBRDBfRlJFRl9DTEs0X09VVCwgKE0zKX0sCQkvKiBncGlvX3drOCAtIERlYnVnIGxlZC0zICovCiAJe1BBRDBfU1lTX05SRVNQV1JPTiwgKE0wKX0sCQkvKiBzeXNfbnJlc3B3cm9uICovCiAJe1BBRDFfU1lTX05SRVNXQVJNLCAoTTApfSwJCS8qIHN5c19ucmVzd2FybSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdnBhYzI3MC92cGFjMjcwLmMgYi9ib2FyZC92cGFjMjcwL3ZwYWMyNzAuYwppbmRleCA0M2JiZGZmLi5jZjhlN2I2IDEwMDY0NAotLS0gYS9ib2FyZC92cGFjMjcwL3ZwYWMyNzAuYworKysgYi9ib2FyZC92cGFjMjcwL3ZwYWMyNzAuYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1tYy5oPgogI2luY2x1ZGUgPG5ldGRldi5oPgogI2luY2x1ZGUgPHNlcmlhbC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNzIsNiArNzMsMTQgQEAKICNlbmRpZgogfQogCisjaWZkZWYJQ09ORklHX0NNRF9NTUMKK2ludCBib2FyZF9tbWNfaW5pdChiZF90ICpiaXMpCit7CisJcHhhX21tY19yZWdpc3RlcigwKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjaWZkZWYJQ09ORklHX0NNRF9VU0IKIGludCB1c2JfYm9hcmRfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYm9hcmRzLmNmZyBiL2JvYXJkcy5jZmcKaW5kZXggOGI3YTAzYi4uYzgzZDg2MSAxMDA2NDQKLS0tIGEvYm9hcmRzLmNmZworKysgYi9ib2FyZHMuY2ZnCkBAIC0zNSw3ICszNSw3IEBACiAjIFRhcmdldCAgICAgICAgICAgICAgICAgICAgIEFSQ0ggICAgICAgIENQVSAgICAgICAgIEJvYXJkIG5hbWUgICAgICAgICAgVmVuZG9yCSAgICAgICAgU29DICAgICAgICAgT3B0aW9ucwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotaW50ZWdyYXRvcmNwX2NtMTEzNiAgICAgICAgICBhcm0gICAgICAgICBhcm0xMTM2ICAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgIGludGVncmF0b3JjcAoraW50ZWdyYXRvcmNwX2NtMTEzNiAgICAgICAgICBhcm0gICAgICAgICBhcm0xMTM2ICAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgIGludGVncmF0b3JjcDpDTTExMzYKIHFvbmcgICAgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtMTEzNiAgICAgLSAgICAgICAgICAgICAgICAgICBkYXZlZGVueCAgICAgICBteDMxCiBteDMxYWRzICAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTExMzYgICAgIC0gICAgICAgICAgICAgICAgICAgZnJlZXNjYWxlICAgICAgbXgzMQogaW14MzFfbGl0ZWtpdCAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm0xMTM2ICAgICAtICAgICAgICAgICAgICAgICAgIGxvZ2ljcGQgICAgICAgIG14MzEKQEAgLTQ3LDkgKzQ3LDkgQEAKIG14MzVwZGsgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtMTEzNiAgICAgLSAgICAgICAgICAgICAgICAgICBmcmVlc2NhbGUgICAgICBteDM1CiBvbWFwMjQyMGg0ICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTExMzYgICAgIC0gICAgICAgICAgICAgICAgICAgdGkgICAgICAgICAgICAgb21hcDI0eHgKIHRuZXR2MTA3eF9ldm0gICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtMTE3NiAgICAgdG5ldHYxMDd4ZXZtICAgICAgICB0aSAgICAgICAgICAgICB0bmV0djEwN3gKLWludGVncmF0b3JhcF9jbTcyMHQgICAgICAgICAgYXJtICAgICAgICAgYXJtNzIwdCAgICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICBpbnRlZ3JhdG9yYXAKLWludGVncmF0b3JhcF9jbTkyMHQgICAgICAgICAgYXJtICAgICAgICAgYXJtOTIwdCAgICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICBpbnRlZ3JhdG9yYXAKLWludGVncmF0b3JjcF9jbTkyMHQgICAgICAgICAgYXJtICAgICAgICAgYXJtOTIwdCAgICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICBpbnRlZ3JhdG9yY3AKK2ludGVncmF0b3JhcF9jbTcyMHQgICAgICAgICAgYXJtICAgICAgICAgYXJtNzIwdCAgICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICBpbnRlZ3JhdG9yYXA6Q003MjBUCitpbnRlZ3JhdG9yYXBfY205MjB0ICAgICAgICAgIGFybSAgICAgICAgIGFybTkyMHQgICAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgaW50ZWdyYXRvcmFwOkNNOTIwVAoraW50ZWdyYXRvcmNwX2NtOTIwdCAgICAgICAgICBhcm0gICAgICAgICBhcm05MjB0ICAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgIGludGVncmF0b3JjcDpDTTkyMFQKIGEzMjBldmIgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTIwdCAgICAgLSAgICAgICAgICAgICAgICAgICBmYXJhZGF5ICAgICAgICBhMzIwCiBhdDkxcm05MjAwZWsgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyMHQgICAgIGF0OTFybTkyMDBlayAgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXJtOTIwMGVrCiBhdDkxcm05MjAwZWtfcmFtICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyMHQgICAgIGF0OTFybTkyMDBlayAgICAgICAgYXRtZWwgICAgICAgICAgYXQ5MSAgICAgICAgYXQ5MXJtOTIwMGVrOlJBTUJPT1QKQEAgLTYzLDggKzYzLDggQEAKIFZDTUE5ICAgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTIwdCAgICAgdmNtYTkgICAgICAgICAgICAgICBtcGwgICAgICAgICAgICBzM2MyNHgwCiBzbWRrMjQxMCAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyMHQgICAgIC0gICAgICAgICAgICAgICAgICAgc2Ftc3VuZyAgICAgICAgczNjMjR4MAogb21hcDE1MTBpbm4gICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjV0ICAgICAtICAgICAgICAgICAgICAgICAgIHRpCi1pbnRlZ3JhdG9yYXBfY205MjZlanMgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgaW50ZWdyYXRvcmFwCi1pbnRlZ3JhdG9yY3BfY205MjZlanMgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgaW50ZWdyYXRvcmNwCitpbnRlZ3JhdG9yYXBfY205MjZlanMgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgaW50ZWdyYXRvcmFwOkNNOTI2RUpfUworaW50ZWdyYXRvcmNwX2NtOTI2ZWpzICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgIGludGVncmF0b3JjcDpDTTkyNEVKX1MKIHZlcnNhdGlsZXFlbXUgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgdmVyc2F0aWxlICAgICAgICAgICBhcm1sdGQgICAgICAgICB2ZXJzYXRpbGUgICB2ZXJzYXRpbGU6QVJDSF9WRVJTQVRJTEVfUUVNVSxBUkNIX1ZFUlNBVElMRV9QQgogdmVyc2F0aWxlcGIgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICB2ZXJzYXRpbGUgICAgICAgICAgIGFybWx0ZCAgICAgICAgIHZlcnNhdGlsZSAgIHZlcnNhdGlsZTpBUkNIX1ZFUlNBVElMRV9QQgogdmVyc2F0aWxlYWIgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICB2ZXJzYXRpbGUgICAgICAgICAgIGFybWx0ZCAgICAgICAgIHZlcnNhdGlsZSAgIHZlcnNhdGlsZTpBUkNIX1ZFUlNBVElMRV9BQgpAQCAtMTIxLDYgKzEyMSw3IEBACiBwbTlnNDUgICAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIHBtOWc0NSAgICAgICAgICAgICAgcm9uZXRpeCAgICAgICAgYXQ5MSAgICAgICAgcG05ZzQ1OkFUOTFTQU05RzQ1CiBkYTgzMGV2bSAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGRhOHh4ZXZtICAgICAgICAgICAgZGF2aW5jaSAgICAgICAgZGF2aW5jaQogZGE4NTBldm0gICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBkYTh4eGV2bSAgICAgICAgICAgIGRhdmluY2kgICAgICAgIGRhdmluY2kKK2RhODUwX2FtMTh4eGV2bSAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgZGE4eHhldm0gICAgICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpCiBjYW1fZW5jXzR4eCAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGNhbV9lbmNfNHh4ICAgICAgICAgYWl0ICAgICAgICAgICAgZGF2aW5jaSAgICAgY2FtX2VuY180eHgKIGhhd2tib2FyZCAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgZGE4eHhldm0gICAgICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpCiBoYXdrYm9hcmRfbmFuZCAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGRhOHh4ZXZtICAgICAgICAgICAgZGF2aW5jaSAgICAgICAgZGF2aW5jaSAgICAgaGF3a2JvYXJkOk5BTkRfVV9CT09UCkBAIC0xMzAsNiArMTMxLDcgQEAKIGRhdmluY2lfZG0zNTVsZW9wYXJkICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgZG0zNTVsZW9wYXJkICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpCiBkYXZpbmNpX2RtMzY1ZXZtICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGRtMzY1ZXZtICAgICAgICAgICAgZGF2aW5jaSAgICAgICAgZGF2aW5jaQogZGF2aW5jaV9kbTY0Njdldm0gICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBkbTY0Njdldm0gICAgICAgICAgIGRhdmluY2kgICAgICAgIGRhdmluY2kKK2RhdmluY2lfZG02NDY3VGV2bSAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgZG02NDY3ZXZtICAgICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpCiBkYXZpbmNpX2R2ZXZtICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGR2ZXZtICAgICAgICAgICAgICAgZGF2aW5jaSAgICAgICAgZGF2aW5jaQogZGF2aW5jaV9zY2htb29naWUgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICBzY2htb29naWUgICAgICAgICAgIGRhdmluY2kgICAgICAgIGRhdmluY2kKIGRhdmluY2lfc2Zmc2RyICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgc2Zmc2RyICAgICAgICAgICAgICBkYXZpbmNpICAgICAgICBkYXZpbmNpCkBAIC0xNTYsMTMgKzE1OCwxNCBAQAogem14MjUgICAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICB6bXgyNSAgICAgICAgICAgICAgIHN5dGVjbyAgICAgICAgIG14MjUKIGlteDI3bGl0ZSAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgaW14MjdsaXRlICAgICAgICAgICBsb2dpY3BkICAgICAgICBteDI3CiBtYWduZXNpdW0gICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIGlteDI3bGl0ZSAgICAgICAgICAgbG9naWNwZCAgICAgICAgbXgyNworbTI4ZXZrICAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICAtICAgICAgICAgICAgICAgICAgIGRlbnggICAgICAgICAgIG14MjgKIG5oazg4MTUgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgbmhrODgxNSAgICAgICAgICAgICBzdCAgICAgICAgICAgICBub21hZGlrCiBuaGs4ODE1X29uZW5hbmQgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIG5oazg4MTUgICAgICAgICAgICAgc3QgICAgICAgICAgICAgbm9tYWRpayAgICAgICBuaGs4ODE1OkJPT1RfT05FTkFORAogb21hcDU5MTJvc2sgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm05MjZlanMgICAtICAgICAgICAgICAgICAgICAgIHRpICAgICAgICAgICAgIG9tYXAKIGVkbWluaXYyICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtOTI2ZWpzICAgLSAgICAgICAgICAgICAgICAgICBMYUNpZSAgICAgICAgICBvcmlvbjV4CiBka2IJCQkgICAgIGFybSAgICAgICAgIGFybTkyNmVqcyAgIC0gICAgICAgICAgICAgICAgICAgTWFydmVsbCAgICAgICAgcGFudGhlb24KLWludGVncmF0b3JhcF9jbTk0NmVzICAgICAgICAgYXJtICAgICAgICAgYXJtOTQ2ZXMgICAgaW50ZWdyYXRvciAgICAgICAgICBhcm1sdGQgICAgICAgICAtICAgICAgICAgICAgICAgaW50ZWdyYXRvcmFwCi1pbnRlZ3JhdG9yY3BfY205NDZlcyAgICAgICAgIGFybSAgICAgICAgIGFybTk0NmVzICAgIGludGVncmF0b3IgICAgICAgICAgYXJtbHRkICAgICAgICAgLSAgICAgICAgICAgICAgIGludGVncmF0b3JjcAoraW50ZWdyYXRvcmFwX2NtOTQ2ZXMgICAgICAgICBhcm0gICAgICAgICBhcm05NDZlcyAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgICAgICBpbnRlZ3JhdG9yYXA6Q005NDZFUworaW50ZWdyYXRvcmNwX2NtOTQ2ZXMgICAgICAgICBhcm0gICAgICAgICBhcm05NDZlcyAgICBpbnRlZ3JhdG9yICAgICAgICAgIGFybWx0ZCAgICAgICAgIC0gICAgICAgICAgICAgICBpbnRlZ3JhdG9yY3A6Q005NDZFUwogY2E5eDRfY3RfdnhwICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm12NyAgICAgICB2ZXhwcmVzcyAgICAgICAgICAgIGFybWx0ZAogaGlnaGJhbmsgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm12NyAgICAgICBoaWdoYmFuayAgICAgICAgICAgIC0gICAgICAgICAgICAgIGhpZ2hiYW5rCiBhbTMzNXhfZXZtICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybXY3ICAgICAgIGFtMzM1eCAgICAgICAgICAgICAgdGkgICAgICAgICAgICAgYW0zM3h4CkBAIC0xOTMsNiArMTk2LDcgQEAKIGRldmtpdDgwMDAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtdjcgICAgICAgZGV2a2l0ODAwMCAgICAgICAgICB0aW1sbCAgICAgICAgICBvbWFwMwogb21hcDRfcGFuZGEgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBhcm12NyAgICAgICBwYW5kYSAgICAgICAgICAgICAgIHRpICAgICAgICAgICAgIG9tYXA0CiBvbWFwNF9zZHA0NDMwICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybXY3ICAgICAgIHNkcDQ0MzAgICAgICAgICAgICAgdGkgICAgICAgICAgICAgb21hcDQKK29tYXA1X2V2bSAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtdjcgICAgICAgb21hcDVfZXZtICAgICAgICAgICB0aQkJb21hcDUKIHM1cF9nb25pICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgYXJtdjcgICAgICAgZ29uaSAgICAgICAgICAgICAgICBzYW1zdW5nICAgICAgICBzNXBjMXh4CiBzbWRrYzEwMCAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIGFybXY3ICAgICAgIHNtZGtjMTAwICAgICAgICAgICAgc2Ftc3VuZyAgICAgICAgczVwYzF4eAogb3JpZ2VuCQkJICAgICBhcm0JIGFybXY3CSAgICAgb3JpZ2VuCQkgc2Ftc3VuZwlzNXBjMnh4CkBAIC0yMTMsOCArMjE3LDYgQEAKIGNlcmYyNTAgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgcHhhCiBjb2xpYnJpX3B4YTI3MCAgICAgICAgICAgICAgIGFybSAgICAgICAgIHB4YQogY3JhZGxlICAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBweGEKLWNzYjIyNiAgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgcHhhCi1pbm5va29tICAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIHB4YQogbHViYm9jayAgICAgICAgICAgICAgICAgICAgICBhcm0gICAgICAgICBweGEKIHBhbG1sZCAgICAgICAgICAgICAgICAgICAgICAgYXJtICAgICAgICAgcHhhCiBwYWxtdGMgICAgICAgICAgICAgICAgICAgICAgIGFybSAgICAgICAgIHB4YQpAQCAtMzQ2LDYgKzM0OCw3IEBACiBxaV9sYjYwICAgICAgICAgICAgICAgICAgICAgIG1pcHMgICAgICAgIHhidXJzdCAgICAgIHFpX2xiNjAgICAgICAgICAgICAgcWkKIG5pb3MyLWdlbmVyaWMgICAgICAgICAgICAgICAgbmlvczIgICAgICAgbmlvczIgICAgICAgbmlvczItZ2VuZXJpYyAgICAgICBhbHRlcmEKIGFkcC1hZzEwMSAgICAgICAgICAgICAgICAgICAgbmRzMzIgICAgICAgbjEyMTMgICAgICAgYWRwLWFnMTAxICAgICAgICAgICBBbmRlc1RlY2ggICAgICBhZzEwMQorYWRwLWFnMTAxcCAgICAgICAgICAgICAgICAgICBuZHMzMiAgICAgICBuMTIxMyAgICAgICBhZHAtYWcxMDFwICAgICAgICAgIEFuZGVzVGVjaCAgICAgIGFnMTAxCiBQQ0k1NDQxICAgICAgICAgICAgICAgICAgICAgIG5pb3MyICAgICAgIG5pb3MyICAgICAgIHBjaTU0NDEgICAgICAgICAgICAgcHN5ZW50CiBQSzFDMjAgICAgICAgICAgICAgICAgICAgICAgIG5pb3MyICAgICAgIG5pb3MyICAgICAgIHBrMWMyMCAgICAgICAgICAgICAgcHN5ZW50CiBFVkI2NDI2MCAgICAgICAgICAgICAgICAgICAgIHBvd2VycGMgICAgIDc0eHhfN3h4ICAgIGV2YjY0MjYwICAgICAgICAgICAgLSAgICAgICAgICAgICAgLSAgICAgICAgICAgRVZCNjQyNjAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm1wLmMgYi9jb21tb24vY21kX2JtcC5jCmluZGV4IDIzZmM4MmYuLjY4MmYzOTUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfYm1wLmMKKysrIGIvY29tbW9uL2NtZF9ibXAuYwpAQCAtMjM3LDkgKzIzNyw3IEBACiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTENEKQotCWV4dGVybiBpbnQgbGNkX2Rpc3BsYXlfYml0bWFwICh1bG9uZywgaW50LCBpbnQpOwotCi0JcmV0ID0gbGNkX2Rpc3BsYXlfYml0bWFwICgodW5zaWduZWQgbG9uZylibXAsIHgsIHkpOworCXJldCA9IGxjZF9kaXNwbGF5X2JpdG1hcCgodWxvbmcpYm1wLCB4LCB5KTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1ZJREVPKQogCWV4dGVybiBpbnQgdmlkZW9fZGlzcGxheV9iaXRtYXAgKHVsb25nLCBpbnQsIGludCk7CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZmRjLmMgYi9jb21tb24vY21kX2ZkYy5jCmluZGV4IDQwZDEyZjYuLjRmZTQxMGQgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfZmRjLmMKKysrIGIvY29tbW9uL2NtZF9mZGMuYwpAQCAtNDI4LDggKzQyOCw4IEBACiBpbnQgZmRjX3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYmxvY2tzLEZEQ19DT01NQU5EX1NUUlVDVCAqcENNRCwgRkRfR0VPX1NUUlVDVCAqcEZHKQogewogICAvKiBmaXJzdCBzZWVrIHRvIHN0YXJ0IGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nIGxlbixsYXN0YmxrLHJlYWRibGssaSx0aW1lb3V0LGlpLG9mZnNldDsKLQl1bnNpZ25lZCBjaGFyIHBjbixjLHJldHJpZXNydyxyZXRyaWVzY2FsOworCXVuc2lnbmVkIGxvbmcgbGVuLHJlYWRibGssaSx0aW1lb3V0LGlpLG9mZnNldDsKKwl1bnNpZ25lZCBjaGFyIGMscmV0cmllc3J3LHJldHJpZXNjYWw7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVydzsgLyogd29ya2luZyBidWZmZXIgKi8KIAlpbnQgc2VjdF9zaXplOwogCWludCBmbGFnczsKQEAgLTQ0MiwxOCArNDQyLDE5IEBACiAJb2Zmc2V0PTA7CiAJaWYoZmRjX3NlZWsocENNRCxwRkcpPT1GQUxTRSkgewogCQlzdG9wX2ZkY19kcml2ZShwQ01EKTsKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJaWYgKGZsYWdzKQorCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAkJcmV0dXJuIEZBTFNFOwogCX0KIAlpZigocENNRC0+cmVzdWx0W1NUQVRVU18wXSYweDIwKSE9MHgyMCkgewogCQlwcmludGYoIlNlZWsgZXJyb3IgU3RhdHVzOiAlMDJYXG4iLHBDTUQtPnJlc3VsdFtTVEFUVVNfMF0pOwogCQlzdG9wX2ZkY19kcml2ZShwQ01EKTsKLQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKwkJaWYgKGZsYWdzKQorCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAkJcmV0dXJuIEZBTFNFOwogCX0KLQlwY249cENNRC0+cmVzdWx0W1NUQVRVU19QQ05dOyAvKiBjdXJyZW50IHRyYWNrICovCiAJLyogbm93IGRldGVybWluZSB0aGUgbmV4dCBzZWVrIHBvaW50ICovCi0JbGFzdGJsaz1wQ01ELT5ibG5yICsgYmxvY2tzOworCS8qCWxhc3RibGs9cENNRC0+YmxuciArIGJsb2NrczsgKi8KIAkvKglyZWFkYmxrPShwRkctPmhlYWQqcEZHLT5zZWN0KS0ocENNRC0+YmxuciUocEZHLT5oZWFkKnBGRy0+c2VjdCkpOyAqLwogCXJlYWRibGs9cEZHLT5zZWN0LShwQ01ELT5ibG5yJXBGRy0+c2VjdCk7CiAJUFJJTlRGKCIxc3QgbnIgb2YgYmxvY2sgcG9zc2libGUgcmVhZCAlbGQgc3RhcnQgJWxkXG4iLHJlYWRibGsscENNRC0+Ymxucik7CkBAIC00NjcsNyArNDY4LDggQEAKIAkJcENNRC0+Y21kW0NPTU1BTkRdPUZEQ19DTURfUkVBRDsKIAkJaWYoZmRjX2lzc3VlX2NtZChwQ01ELHBGRyk9PUZBTFNFKSB7CiAJCQlzdG9wX2ZkY19kcml2ZShwQ01EKTsKLQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJCQlpZiAoZmxhZ3MpCisJCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAkJCXJldHVybiBGQUxTRTsKIAkJfQogCQlmb3IgKGk9MDtpPGxlbjtpKyspIHsKQEAgLTQ4OCwxNCArNDkwLDE2IEBACiAJCQkJCWlmKHJldHJpZXNydysrPkZEQ19SV19SRVRSSUVTKSB7CiAJCQkJCQlpZiAocmV0cmllc2NhbCsrPkZEQ19DQUxfUkVUUklFUykgewogCQkJCQkJCXN0b3BfZmRjX2RyaXZlKHBDTUQpOwotCQkJCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJCQkJCQkJaWYgKGZsYWdzKQorCQkJCQkJCQllbmFibGVfaW50ZXJydXB0cygpOwogCQkJCQkJCXJldHVybiBGQUxTRTsKIAkJCQkJCX0KIAkJCQkJCWVsc2UgewogCQkJCQkJCVBSSU5URigiIHRyeWluZyB0byByZWNhbGlicmF0ZSBUcnkgJWRcbiIscmV0cmllc2NhbCk7CiAJCQkJCQkJaWYoZmRjX3JlY2FsaWJyYXRlKHBDTUQscEZHKT09RkFMU0UpIHsKIAkJCQkJCQkJc3RvcF9mZGNfZHJpdmUocENNRCk7Ci0JCQkJCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJCQkJCQkJCWlmIChmbGFncykKKwkJCQkJCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAJCQkJCQkJCXJldHVybiBGQUxTRTsKIAkJCQkJCQl9CiAJCQkJCQkJcmV0cmllc3J3PTA7CkBAIC01MjgsNyArNTMyLDggQEAKIAkJLyogYSBzZWVrIGlzIG5lY2Vzc2FyeSAqLwogCQlpZihmZGNfc2VlayhwQ01ELHBGRyk9PUZBTFNFKSB7CiAJCQlzdG9wX2ZkY19kcml2ZShwQ01EKTsKLQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJCQlpZiAoZmxhZ3MpCisJCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAkJCXJldHVybiBGQUxTRTsKIAkJfQogCQlpZigocENNRC0+cmVzdWx0W1NUQVRVU18wXSYweDIwKSE9MHgyMCkgewpAQCAtNTM2LDEwICs1NDEsMTAgQEAKIAkJCXN0b3BfZmRjX2RyaXZlKHBDTUQpOwogCQkJcmV0dXJuIEZBTFNFOwogCQl9Ci0JCXBjbj1wQ01ELT5yZXN1bHRbU1RBVFVTX1BDTl07IC8qIGN1cnJlbnQgdHJhY2sgKi8KIAl9d2hpbGUoVFJVRSk7IC8qIHN0YXJ0IG92ZXIgKi8KIAlzdG9wX2ZkY19kcml2ZShwQ01EKTsgLyogc3dpdGNoIG9mZiBkcml2ZSAqLwotCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJaWYgKGZsYWdzKQorCQllbmFibGVfaW50ZXJydXB0cygpOwogCXJldHVybiBUUlVFOwogfQogCmRpZmYgLS1naXQgYS9jb21tb24vY21kX21lbS5jIGIvY29tbW9uL2NtZF9tZW0uYwppbmRleCA0NjFlZTE5Li4yODQ3NmQ3IDEwMDY0NAotLS0gYS9jb21tb24vY21kX21lbS5jCisrKyBiL2NvbW1vbi9jbWRfbWVtLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxkYXRhZmxhc2guaD4KICNlbmRpZgogI2luY2x1ZGUgPHdhdGNoZG9nLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpZmRlZglDTURfTUVNX0RFQlVHCiAjZGVmaW5lCVBSSU5URihmbXQsYXJncy4uLikJcHJpbnRmIChmbXQgLCMjYXJncykKQEAgLTE0MiwxMyArMTQxLDkgQEAKICMgZW5kaWYKIAogCXsKLQkJdWxvbmcgYnl0ZXMgPSBzaXplICogbGVuZ3RoOwotCQl2b2lkICpidWYgPSBtYXBfcGh5c21lbShhZGRyLCBieXRlcywgTUFQX1dSQkFDSyk7Ci0KIAkJLyogUHJpbnQgdGhlIGxpbmVzLiAqLwotCQlwcmludF9idWZmZXIoYWRkciwgYnVmLCBzaXplLCBsZW5ndGgsIERJU1BfTElORV9MRU4gLyBzaXplKTsKLQkJYWRkciArPSBieXRlczsKLQkJdW5tYXBfcGh5c21lbShidWYsIGJ5dGVzKTsKKwkJcHJpbnRfYnVmZmVyKGFkZHIsICh2b2lkKilhZGRyLCBzaXplLCBsZW5ndGgsIERJU1BfTElORV9MRU4vc2l6ZSk7CisJCWFkZHIgKz0gc2l6ZSpsZW5ndGg7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbnZlZGl0LmMgYi9jb21tb24vY21kX252ZWRpdC5jCmluZGV4IDM5NmExNzEuLjcxOTRhZGUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfbnZlZGl0LmMKKysrIGIvY29tbW9uL2NtZF9udmVkaXQuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJfQogCiAJLyogcHJpbnQgd2hvbGUgbGlzdCAqLwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcbicsICZyZXMsIDApOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcbicsICZyZXMsIDAsIDAsIE5VTEwpOwogCiAJaWYgKGxlbiA+IDApIHsKIAkJcHV0cyhyZXMpOwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfQ01EX0VYUE9SVEVOVgogLyoKLSAqIGVudiBleHBvcnQgWy10IHwgLWIgfCAtY10gYWRkciBbc2l6ZV0KKyAqIGVudiBleHBvcnQgWy10IHwgLWIgfCAtY10gWy1zIHNpemVdIGFkZHIgW3ZhciAuLi5dCiAgKgktdDoJZXhwb3J0IGFzIHRleHQgZm9ybWF0OyBpZiBzaXplIGlzIGdpdmVuLCBkYXRhIHdpbGwgYmUKICAqCQlwYWRkZWQgd2l0aCAnXDAnIGJ5dGVzOyBpZiBub3QsIG9uZSB0ZXJtaW5hdGluZyAnXDAnCiAgKgkJd2lsbCBiZSBhZGRlZCAod2hpY2ggaXMgaW5jbHVkZWQgaW4gdGhlICJmaWxlc2l6ZSIKQEAgLTY1Nyw4ICs2NTcsMTIgQEAKICAqCQknXDAnLCBsaXN0IGVuZCBtYXJrZWQgYnkgZG91YmxlICJcMFwwIikKICAqCS1jOglleHBvcnQgYXMgY2hlY2tzdW0gcHJvdGVjdGVkIGVudmlyb25tZW50IGZvcm1hdCBhcwogICoJCXVzZWQgZm9yIGV4YW1wbGUgYnkgInNhdmVlbnYiIGNvbW1hbmQKKyAqCS1zIHNpemU6CisgKgkJc2l6ZSBvZiBvdXRwdXQgYnVmZmVyCiAgKglhZGRyOgltZW1vcnkgYWRkcmVzcyB3aGVyZSBlbnZpcm9ubWVudCBnZXRzIHN0b3JlZAotICoJc2l6ZToJc2l6ZSBvZiBvdXRwdXQgYnVmZmVyCisgKgl2YXIuLi4JTGlzdCBvZiB2YXJpYWJsZSBuYW1lcyB0aGF0IGdldCBpbmNsdWRlZCBpbnRvIHRoZQorICoJCWV4cG9ydC4gV2l0aG91dCBhcmd1bWVudHMsIHRoZSB3aG9sZSBlbnZpcm9ubWVudCBnZXRzCisgKgkJZXhwb3J0ZWQuCiAgKgogICogV2l0aCAiLWMiIGFuZCBzaXplIGlzIE5PVCBnaXZlbiwgdGhlbiB0aGUgZXhwb3J0IGNvbW1hbmQgd2lsbAogICogZm9ybWF0IHRoZSBkYXRhIGFzIGN1cnJlbnRseSB1c2VkIGZvciB0aGUgcGVyc2lzdGVudCBzdG9yYWdlLApAQCAtNjkxLDcgKzY5NSw3IEBACiB7CiAJY2hhcglidWZbMzJdOwogCWNoYXIJKmFkZHIsICpjbWQsICpyZXM7Ci0Jc2l6ZV90CXNpemU7CisJc2l6ZV90CXNpemUgPSAwOwogCXNzaXplX3QJbGVuOwogCWVudl90CSplbnZwOwogCWNoYXIJc2VwID0gJ1xuJzsKQEAgLTcxNSw2ICs3MTksMTEgQEAKIAkJCQlzZXAgPSAnXDAnOwogCQkJCWNoayA9IDE7CiAJCQkJYnJlYWs7CisJCQljYXNlICdzJzoJCS8qIHNpemUgZ2l2ZW4gKi8KKwkJCQlpZiAoLS1hcmdjIDw9IDApCisJCQkJCXJldHVybiBjbWRfdXNhZ2UoY21kdHApOworCQkJCXNpemUgPSBzaW1wbGVfc3RydG91bCgqKythcmd2LCBOVUxMLCAxNik7CisJCQkJZ290byBOWFRBUkc7CiAJCQljYXNlICd0JzoJCS8qIHRleHQgZm9ybWF0ICovCiAJCQkJaWYgKGZtdCsrKQogCQkJCQlnb3RvIHNlcF9lcnI7CkBAIC03MjQsNiArNzMzLDcgQEAKIAkJCQlyZXR1cm4gY21kX3VzYWdlKGNtZHRwKTsKIAkJCX0KIAkJfQorTlhUQVJHOgkJOwogCX0KIAogCWlmIChhcmdjIDwgMSkKQEAgLTczMSwxNSArNzQxLDE0IEBACiAKIAlhZGRyID0gKGNoYXIgKilzaW1wbGVfc3RydG91bChhcmd2WzBdLCBOVUxMLCAxNik7CiAKLQlpZiAoYXJnYyA9PSAyKSB7Ci0JCXNpemUgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNik7CisJaWYgKHNpemUpCiAJCW1lbXNldChhZGRyLCAnXDAnLCBzaXplKTsKLQl9IGVsc2UgewotCQlzaXplID0gMDsKLQl9CisKKwlhcmdjLS07CisJYXJndisrOwogCiAJaWYgKHNlcCkgewkJLyogZXhwb3J0IGFzIHRleHQgZmlsZSAqLwotCQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCBzZXAsICZhZGRyLCBzaXplKTsKKwkJbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgc2VwLCAmYWRkciwgc2l6ZSwgYXJnYywgYXJndik7CiAJCWlmIChsZW4gPCAwKSB7CiAJCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwKIAkJCQllcnJubyk7CkBAIC03NTgsNyArNzY3LDcgQEAKIAllbHNlCQkJLyogZXhwb3J0IGFzIHJhdyBiaW5hcnkgZGF0YSAqLwogCQlyZXMgPSBhZGRyOwogCi0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUpOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFLCBhcmdjLCBhcmd2KTsKIAlpZiAobGVuIDwgMCkgewogCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwKIAkJCWVycm5vKTsKQEAgLTk2NSw3ICs5NzQsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9FRElURU5WKQogCSJlbnYgZWRpdCBuYW1lIC0gZWRpdCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuIgogI2VuZGlmCi0JImVudiBleHBvcnQgWy10IHwgLWIgfCAtY10gYWRkciBbc2l6ZV0gLSBleHBvcnQgZW52aXJvbm1lbnRcbiIKKwkiZW52IGV4cG9ydCBbLXQgfCAtYiB8IC1jXSBbLXMgc2l6ZV0gYWRkciBbdmFyIC4uLl0gLSBleHBvcnQgZW52aXJvbm1lbnRcbiIKICNpZiBkZWZpbmVkKENPTkZJR19DTURfR1JFUEVOVikKIAkiZW52IGdyZXAgc3RyaW5nIFsuLi5dIC0gc2VhcmNoIGVudmlyb25tZW50XG4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfdHNpMTQ4LmMgYi9jb21tb24vY21kX3RzaTE0OC5jCmluZGV4IDZkYzlkYWIuLjdmNDhlYTIgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfdHNpMTQ4LmMKKysrIGIvY29tbW9uL2NtZF90c2kxNDguYwpAQCAtNTMsNyArNTMsNyBAQAogCiBpbnQgdHNpMTQ4X2luaXQodm9pZCkKIHsKLQlpbnQgaiwgcmVzdWx0LCBsYXN0RXJyb3IgPSAwOworCWludCBqLCByZXN1bHQ7CiAJcGNpX2Rldl90IGJ1c2RldmZuOwogCXVuc2lnbmVkIGludCB2YWw7CiAKQEAgLTY5LDggKzY5LDcgQEAKIAlkZXYgPSBtYWxsb2Moc2l6ZW9mKCpkZXYpKTsKIAlpZiAoTlVMTCA9PSBkZXYpIHsKIAkJcHV0cygiVHNpMTQ4OiBObyBtZW1vcnkhXG4iKTsKLQkJcmVzdWx0ID0gLTE7Ci0JCWdvdG8gYnJlYWtfMjA7CisJCXJldHVybiAtMTsKIAl9CiAKIAltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwpAQCAtMTM5LDggKzEzOCw2IEBACiAgYnJlYWtfMzA6CiAJZnJlZShkZXYpOwogCWRldiA9IE5VTEw7Ci0gYnJlYWtfMjA6Ci0JbGFzdEVycm9yID0gcmVzdWx0OwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfdW5pdmVyc2UuYyBiL2NvbW1vbi9jbWRfdW5pdmVyc2UuYwppbmRleCBhODZhNTc0Li41ODM4NGYzIDEwMDY0NAotLS0gYS9jb21tb24vY21kX3VuaXZlcnNlLmMKKysrIGIvY29tbW9uL2NtZF91bml2ZXJzZS5jCkBAIC00Niw3ICs0Niw3IEBACiAKIGludCB1bml2ZXJzZV9pbml0KHZvaWQpCiB7Ci0JaW50IGosIHJlc3VsdCwgbGFzdEVycm9yID0gMDsKKwlpbnQgaiwgcmVzdWx0OwogCXBjaV9kZXZfdCBidXNkZXZmbjsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCkBAIC0xMjYsOCArMTI2LDYgQEAKICBicmVha18zMDoKIAlmcmVlKGRldik7CiAgYnJlYWtfMjA6Ci0JbGFzdEVycm9yID0gcmVzdWx0OwotCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9kYXRhZmxhc2guYyBiL2NvbW1vbi9lbnZfZGF0YWZsYXNoLmMKaW5kZXggMWQ1NzA3OS4uMGM0YzY3NiAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9kYXRhZmxhc2guYworKysgYi9jb21tb24vZW52X2RhdGFmbGFzaC5jCkBAIC02OCw3ICs2OCw3IEBACiAJY2hhcgkqcmVzOwogCiAJcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CiAJaWYgKGxlbiA8IDApIHsKIAkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9jb21tb24vZW52X2VlcHJvbS5jIGIvY29tbW9uL2Vudl9lZXByb20uYwppbmRleCAwYTE3OWFkLi4xMjMzYjFhIDEwMDY0NAotLS0gYS9jb21tb24vZW52X2VlcHJvbS5jCisrKyBiL2NvbW1vbi9lbnZfZWVwcm9tLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCUJVR19PTihlbnZfcHRyICE9IE5VTEwpOwogCiAJcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CiAJaWYgKGxlbiA8IDApIHsKIAkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9jb21tb24vZW52X2ZsYXNoLmMgYi9jb21tb24vZW52X2ZsYXNoLmMKaW5kZXggNTBjYTRmZmEuLjhlNDE1ZDcgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfZmxhc2guYworKysgYi9jb21tb24vZW52X2ZsYXNoLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCX0KIAogCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSk7CisJbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwogCWlmIChsZW4gPCAwKSB7CiAJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCWdvdG8gZG9uZTsKQEAgLTI4OSw3ICsyODksNyBAQAogCQlnb3RvIGRvbmU7CiAKIAlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUpOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKIAlpZiAobGVuIDwgMCkgewogCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlnb3RvIGRvbmU7CmRpZmYgLS1naXQgYS9jb21tb24vZW52X21tYy5jIGIvY29tbW9uL2Vudl9tbWMuYwppbmRleCA4M2Y0MGY0Li4xMmQ2NDdhIDEwMDY0NAotLS0gYS9jb21tb24vZW52X21tYy5jCisrKyBiL2NvbW1vbi9lbnZfbW1jLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCQlyZXR1cm4gMTsKIAogCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSk7CisJbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwogCWlmIChsZW4gPCAwKSB7CiAJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9uYW5kLmMgYi9jb21tb24vZW52X25hbmQuYwppbmRleCAxNDQ0NmE2Li5kYTRkM2IxIDEwMDY0NAotLS0gYS9jb21tb24vZW52X25hbmQuYworKysgYi9jb21tb24vZW52X25hbmQuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJCXJldHVybiAxOwogCiAJcmVzID0gKGNoYXIgKikmZW52X25ldy5kYXRhOwotCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFKTsKKwlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSwgMCwgTlVMTCk7CiAJaWYgKGxlbiA8IDApIHsKIAkJZXJyb3IoIkNhbm5vdCBleHBvcnQgZW52aXJvbm1lbnQ6IGVycm5vID0gJWRcbiIsIGVycm5vKTsKIAkJcmV0dXJuIDE7CkBAIC0yNTUsNyArMjU1LDcgQEAKIAkJcmV0dXJuIDE7CiAKIAlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUpOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKIAlpZiAobGVuIDwgMCkgewogCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9lbnZfbnZyYW0uYyBiL2NvbW1vbi9lbnZfbnZyYW0uYwppbmRleCA1NDRjZTQ3Li5iMTA4ZTZlIDEwMDY0NAotLS0gYS9jb21tb24vZW52X252cmFtLmMKKysrIGIvY29tbW9uL2Vudl9udnJhbS5jCkBAIC05NCw3ICs5NCw3IEBACiAJaW50CXJjb2RlID0gMDsKIAogCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSk7CisJbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwogCWlmIChsZW4gPCAwKSB7CiAJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9vbmVuYW5kLmMgYi9jb21tb24vZW52X29uZW5hbmQuYwppbmRleCA1ZTA0YTA2Li40MTQ0NDc1IDEwMDY0NAotLS0gYS9jb21tb24vZW52X29uZW5hbmQuYworKysgYi9jb21tb24vZW52X29uZW5hbmQuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJfTsKIAogCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSk7CisJbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwogCWlmIChsZW4gPCAwKSB7CiAJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9zZi5jIGIvY29tbW9uL2Vudl9zZi5jCmluZGV4IGQzYjM2ZDAuLmExZmYyOTcgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfc2YuYworKysgYi9jb21tb24vZW52X3NmLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAl9CiAKIAlyZXMgPSAoY2hhciAqKSZlbnZfbmV3LmRhdGE7Ci0JbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUpOworCWxlbiA9IGhleHBvcnRfcigmZW52X2h0YWIsICdcMCcsICZyZXMsIEVOVl9TSVpFLCAwLCBOVUxMKTsKIAlpZiAobGVuIDwgMCkgewogCQllcnJvcigiQ2Fubm90IGV4cG9ydCBlbnZpcm9ubWVudDogZXJybm8gPSAlZFxuIiwgZXJybm8pOwogCQlyZXR1cm4gMTsKQEAgLTI5Myw3ICsyOTMsNyBAQAogCX0KIAogCXJlcyA9IChjaGFyICopJmVudl9uZXcuZGF0YTsKLQlsZW4gPSBoZXhwb3J0X3IoJmVudl9odGFiLCAnXDAnLCAmcmVzLCBFTlZfU0laRSk7CisJbGVuID0gaGV4cG9ydF9yKCZlbnZfaHRhYiwgJ1wwJywgJnJlcywgRU5WX1NJWkUsIDAsIE5VTEwpOwogCWlmIChsZW4gPCAwKSB7CiAJCWVycm9yKCJDYW5ub3QgZXhwb3J0IGVudmlyb25tZW50OiBlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9mZHRfc3VwcG9ydC5jIGIvY29tbW9uL2ZkdF9zdXBwb3J0LmMKaW5kZXggYmRkYTY0ZC4uNTkzZjE2YyAxMDA2NDQKLS0tIGEvY29tbW9uL2ZkdF9zdXBwb3J0LmMKKysrIGIvY29tbW9uL2ZkdF9zdXBwb3J0LmMKQEAgLTQ5LDggKzQ5LDggQEAKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGZpbmQgYSBub2RlIGFuZCByZXR1cm4gaXQncyBwcm9wZXJ0eSBvciBhCiAgKiBkZWZhdWx0IHZhbHVlIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCiAgKi8KLXUzMiBmZHRfZ2V0cHJvcF91MzJfZGVmYXVsdCh2b2lkICpmZHQsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnByb3AsCi0JCQkJY29uc3QgdTMyIGRmbHQpCit1MzIgZmR0X2dldHByb3BfdTMyX2RlZmF1bHQoY29uc3Qgdm9pZCAqZmR0LCBjb25zdCBjaGFyICpwYXRoLAorCQkJCWNvbnN0IGNoYXIgKnByb3AsIGNvbnN0IHUzMiBkZmx0KQogewogCWNvbnN0IHUzMiAqdmFsOwogCWludCBvZmY7CkBAIC02MSw3ICs2MSw3IEBACiAKIAl2YWwgPSBmZHRfZ2V0cHJvcChmZHQsIG9mZiwgcHJvcCwgTlVMTCk7CiAJaWYgKHZhbCkKLQkJcmV0dXJuICp2YWw7CisJCXJldHVybiBmZHQzMl90b19jcHUoKnZhbCk7CiAJZWxzZQogCQlyZXR1cm4gZGZsdDsKIH0KQEAgLTM3Miw3ICszNzIsNyBAQAogCWNvbnN0IHUzMiAqY2VsbDsKIAogCWNlbGwgPSBmZHRfZ2V0cHJvcChibG9iLCAwLCBucl9jZWxsc19uYW1lLCBOVUxMKTsKLQlpZiAoY2VsbCAmJiAqY2VsbCA9PSAyKQorCWlmIChjZWxsICYmIGZkdDMyX3RvX2NwdSgqY2VsbCkgPT0gMikKIAkJcmV0dXJuIDg7CiAKIAlyZXR1cm4gNDsKZGlmZiAtLWdpdCBhL2NvbW1vbi9sY2QuYyBiL2NvbW1vbi9sY2QuYwppbmRleCBkOWNiOGNhLi42MzEzZWMwIDEwMDY0NAotLS0gYS9jb21tb24vbGNkLmMKKysrIGIvY29tbW9uL2xjZC5jCkBAIC01NywxMiArNTcsMTQgQEAKIC8qICoqIEZPTlQgREFUQQkJCQkJCQkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8dmlkZW9fZm9udC5oPgkJLyogR2V0IGZvbnQgZGF0YSwgd2lkdGggYW5kIGhlaWdodAkqLworI2luY2x1ZGUgPHZpZGVvX2ZvbnRfZGF0YS5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogKiogTE9HTyBEQVRBCQkJCQkJCQkqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZmRlZiBDT05GSUdfTENEX0xPR08KICMgaW5jbHVkZSA8Ym1wX2xvZ28uaD4JCS8qIEdldCBsb2dvIGRhdGEsIHdpZHRoIGFuZCBoZWlnaHQJKi8KKyMgaW5jbHVkZSA8Ym1wX2xvZ29fZGF0YS5oPgogIyBpZiAoQ09OU09MRV9DT0xPUl9XSElURSA+PSBCTVBfTE9HT19PRkZTRVQpICYmIChMQ0RfQlBQICE9IExDRF9DT0xPUjE2KQogIyAgZXJyb3IgRGVmYXVsdCBDb2xvciBNYXAgb3ZlcmxhcHMgd2l0aCBMb2dvIENvbG9yIE1hcAogIyBlbmRpZgpAQCAtNzgsNyArODAsNiBAQAogCiBzdGF0aWMgaW50IGxjZF9pbml0ICh2b2lkICpsY2RiYXNlKTsKIAotc3RhdGljIGludCBsY2RfY2xlYXIgKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pOwogc3RhdGljIHZvaWQgKmxjZF9sb2dvICh2b2lkKTsKIAogc3RhdGljIGludCBsY2RfZ2V0Ymdjb2xvciAodm9pZCk7CkBAIC0zNTMsNyArMzU0LDE0IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IGxjZF9jbGVhciAoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKK3N0YXRpYworaW50IGRvX2xjZF9jbGVhcihjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSkKK3sKKwlsY2RfY2xlYXIoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsY2RfY2xlYXIodm9pZCkKIHsKICNpZiBMQ0RfQlBQID09IExDRF9NT05PQ0hST01FCiAJLyogU2V0dGluZyB0aGUgcGFsZXR0ZSAqLwpAQCAtMzk0LDEyICs0MDIsMTAgQEAKIAogCWNvbnNvbGVfY29sID0gMDsKIAljb25zb2xlX3JvdyA9IDA7Ci0KLQlyZXR1cm4gKDApOwogfQogCiBVX0JPT1RfQ01EKAotCWNscywJMSwJMSwJbGNkX2NsZWFyLAorCWNscywJMSwJMSwJZG9fbGNkX2NsZWFyLAogCSJjbGVhciBzY3JlZW4iLAogCSIiCiApOwpAQCAtNDEzLDcgKzQxOSw3IEBACiAKIAlsY2RfY3RybF9pbml0IChsY2RiYXNlKTsKIAlsY2RfaXNfZW5hYmxlZCA9IDE7Ci0JbGNkX2NsZWFyIChOVUxMLCAxLCAxLCBOVUxMKTsJLyogZHVtbXkgYXJncyAqLworCWxjZF9jbGVhcigpOwogCWxjZF9lbmFibGUgKCk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjb25zb2xlICovCmRpZmYgLS1naXQgYS9jb21tb24vdXNiLmMgYi9jb21tb24vdXNiLmMKaW5kZXggYmVkNTExNi4uNDQxOGM3MCAxMDA2NDQKLS0tIGEvY29tbW9uL3VzYi5jCisrKyBiL2NvbW1vbi91c2IuYwpAQCAtMjYzLDE4ICsyNjMsMjQgQEAKIAkJcmV0dXJuIGRldi0+ZXBtYXhwYWNrZXRpblsoKHBpcGU+PjE1KSAmIDB4ZildOwogfQogCi0vKiBUaGUgcm91dGluZSB1c2Jfc2V0X21heHBhY2tldF9lcCgpIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBsb29wIG9mIHJvdXRpbmUKKy8qCisgKiBUaGUgcm91dGluZSB1c2Jfc2V0X21heHBhY2tldF9lcCgpIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBsb29wIG9mIHJvdXRpbmUKICAqIHVzYl9zZXRfbWF4cGFja2V0KCksIGJlY2F1c2UgdGhlIG9wdGltaXplciBvZiBHQ0MgNC54IGNob2tlcyBvbiB0aGlzIHJvdXRpbmUKICAqIHdoZW4gaXQgaXMgaW5saW5lZCBpbiAxIHNpbmdsZSByb3V0aW5lLiBXaGF0IGhhcHBlbnMgaXMgdGhhdCB0aGUgcmVnaXN0ZXIgcjMKICAqIGlzIHVzZWQgYXMgbG9vcC1jb3VudCAnaScsIGJ1dCBnZXRzIG92ZXJ3cml0dGVuIGxhdGVyIG9uLgogICogVGhpcyBpcyBjbGVhcmx5IGEgY29tcGlsZXIgYnVnLCBidXQgaXQgaXMgZWFzaWVyIHRvIHdvcmthcm91bmQgaXQgaGVyZSB0aGFuCiAgKiB0byB1cGRhdGUgdGhlIGNvbXBpbGVyIChPY2N1cnMgd2l0aCBhdCBsZWFzdCBzZXZlcmFsIEdDQyA0LnsxLDJ9LHgKICAqIENvZGVTb3VyY2VyeSBjb21waWxlcnMgbGlrZSBlLmcuIDIwMDdxMywgMjAwOHExLCAyMDA4cTMgbGl0ZSBlZGl0aW9ucyBvbiBBUk0pCisgKgorICogTk9URTogU2ltaWxhciBiZWhhdmlvdXIgd2FzIG9ic2VydmVkIHdpdGggR0NDNC42IG9uIEFSTXY1LgogICovCiBzdGF0aWMgdm9pZCAgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQotdXNiX3NldF9tYXhwYWNrZXRfZXAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcCkKK3VzYl9zZXRfbWF4cGFja2V0X2VwKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBpZl9pZHgsIGludCBlcF9pZHgpCiB7CiAJaW50IGI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcDsKKworCWVwID0gJmRldi0+Y29uZmlnLmlmX2Rlc2NbaWZfaWR4XS5lcF9kZXNjW2VwX2lkeF07CiAKIAliID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CiAKQEAgLTMxMyw4ICszMTksNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+Y29uZmlnLmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykKIAkJZm9yIChpaSA9IDA7IGlpIDwgZGV2LT5jb25maWcuaWZfZGVzY1tpXS5kZXNjLmJOdW1FbmRwb2ludHM7IGlpKyspCi0JCQl1c2Jfc2V0X21heHBhY2tldF9lcChkZXYsCi0JCQkJCSAgJmRldi0+Y29uZmlnLmlmX2Rlc2NbaV0uZXBfZGVzY1tpaV0pOworCQkJdXNiX3NldF9tYXhwYWNrZXRfZXAoZGV2LCBpLCBpaSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubTI4IGIvZG9jL1JFQURNRS5tMjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0OWNlMAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUubTI4CkBAIC0wLDAgKzEsMjIzIEBACitERU5YIE0yOEVWSworPT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIERFTlggTTI4L00yOEVWSyBVLUJvb3QgcG9ydC4gVGhpcyBkb2N1bWVudCBtb3N0bHkKK2NvdmVycyB0b3BpY3MgcmVsYXRlZCB0byBtYWtpbmcgdGhlIG1vZHVsZS9ib2FyZCBib290YWJsZS4KKworVGVybWlub2xvZ3kKKy0tLS0tLS0tLS0tCisKK1RoZSBkb2xsYXIgc3ltYm9sICgkKSBpbnRyb2R1Y2VzIGEgc25pcHBlZCBvZiBzaGVsbCBjb2RlLiBUaGlzIHNoYWxsIGJlIHR5cGVkCitpbnRvIHRoZSB1bml4IGNvbW1hbmQgcHJvbXB0IGluIFUtQm9vdCBzb3VyY2UgY29kZSByb290IGRpcmVjdG9yeS4KKworVGhlICg9PikgaW50cm9kdWNlcyBhIHNuaXBwZWQgb2YgY29kZSB0aGF0IHNob3VsZCBieSB0eXBlZCBpbnRvIFUtQm9vdCBjb21tYW5kCitwcm9tcHQuCisKK0NvbnRlbnRzCistLS0tLS0tLQorCiswKSBGaWxlcyBvZiB0aGUgTTI4L00yOEVWSyBwb3J0CisxKSBQcmVyZXF1aXNpdGVzCisyKSBDb21waWxpbmcgVS1Cb290IGZvciBNMjgKKzMpIEluc3RhbGxhdGlvbiBvZiBVLUJvb3QgZm9yIE0yOEVWSyB0byBTRCBjYXJkCis0KSBJbnN0YWxsYXRpb24gb2YgVS1Cb290IGZvciBNMjggdG8gTkFORCBmbGFzaAorCiswKSBGaWxlcyBvZiB0aGUgTTI4L00yOEVWSyBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FyY2gvYXJtL2NwdS9hcm05MjZlanMvbXgyOC8JLSBUaGUgQ1BVIHN1cHBvcnQgY29kZSBmb3IgdGhlIEZyZWVzY2FsZSBpLk1YMjgKK2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2gtbXgyOC8JLSBIZWFkZXIgZmlsZXMgZm9yIHRoZSBGcmVlc2NhbGUgaS5NWDI4Citib2FyZC9kZW54L20yOGV2ay8JCS0gTTI4RVZLIGJvYXJkIHNwZWNpZmljIGZpbGVzCitpbmNsdWRlL2NvbmZpZ3MvbTI4ZXZrLmgJLSBNMjhFVksgY29uZmlndXJhdGlvbiBmaWxlCisKKzEpIFByZXJlcXVpc2l0ZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVG8gbWFrZSB0aGUgTTI4IG1vZHVsZSBvciB0aGUgTTI4IG1vZHVsZSBvciBNMjhFVksgYm9hcmQgYm9vdGFibGUsIHNvbWUgdG9vbHMKK2FyZSBuZWNlc3NhcnkuIFRoZSBmaXJzdCBvbmUgaXMgdGhlICJlbGZ0b3NiIiB0b29sIGRpc3RyaWJ1dGVkIGJ5IEZyZWVzY2FsZQorU2VtaWNvbmR1Y3Rvci4gVGhlIG90aGVyIHRvb2wgaXMgdGhlICJteHNib290IiB0b29sIGZvdW5kIGluIFUtQm9vdCBzb3VyY2UgdHJlZS4KKworRmlyc3RseSwgb2J0YWluIHRoZSBlbGZ0b3NiIGFyY2hpdmUgZnJvbSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOgorCisJaHR0cDovL2Zvc3MuZG9yZWRldmVsb3BtZW50LmRrL21pcnJvcnMvaW14L2VsZnRvc2ItMTAuMTIuMDEudGFyLmd6CisKK1dlIHVzZSBhICRWRVIgdmFyaWFibGUgaGVyZSB0byBkZW5vdGUgdGhlIGN1cnJlbnQgdmVyc2lvbi4gQXQgdGhlIHRpbWUgb2YKK3dyaXRpbmcgb2YgdGhpcyBkb2N1bWVudCwgdGhhdCBpcyAiMTAuMTIuMDEiLiBUbyBvYnRhaW4gdGhlIGZpbGUgZnJvbSBjb21tYW5kCitsaW5lLCB1c2U6CisKKwkkIFZFUj0iMTAuMTIuMDEiCisJJCB3Z2V0IGh0dHA6Ly9mb3NzLmRvcmVkZXZlbG9wbWVudC5kay9taXJyb3JzL2lteC9lbGZ0b3NiLSR7VkVSfS50YXIuZ3oKKworRXh0cmFjdCB0aGUgZmlsZToKKworCSQgdGFyIHh6ZiBlbGZ0b3NiLSR7VkVSfS50YXIuZ3oKKworQ29tcGlsZSB0aGUgZmlsZS4gV2UgbmVlZCB0byBtYW51YWxseSB0ZWxsIHRoZSBsaW5rZXIgdG8gdXNlIGFsc28gbGlibToKKworCSQgY2QgZWxmdG9zYi0ke1ZFUn0vCisJJCBtYWtlIExJQlM9Ii1sc3RkYysrIC1sbSIgZWxmdG9zYgorCitPcHRpb25hbGx5LCByZW1vdmUgZGVidWdnaW5nIHN5bWJvbHMgZnJvbSBlbGZ0b3NiOgorCisJJCBzdHJpcCBibGQvbGludXgvZWxmdG9zYgorCitGaW5hbGx5LCBpbnN0YWxsIHRoZSAiZWxmdG9zYiIgYmluYXJ5LiBUaGUgImluc3RhbGwiIHRhcmdldCBpcyBtaXNzaW5nLCBzbyBqdXN0Citjb3B5IHRoZSBiaW5hcnkgYnkgaGFuZDoKKworCSQgc3VkbyBjcCBibGQvbGludXgvZWxmdG9zYiAvdXNyL2xvY2FsL2Jpbi8KKworTWFrZSBzdXJlIHRoZSAiZWxmdG9zYiIgYmluYXJ5IGNhbiBiZSBmb3VuZCBpbiB5b3VyICRQQVRILCBpbiB0aGlzIGNhc2UgdGhpcworbWVhbnMgIi91c3IvbG9jYWwvYmluLyIgaGFzIHRvIGJlIGluIHlvdXIgJFBBVEguCisKKzIpIENvbXBpbGluZyBVLUJvb3QgZm9yIE0yOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbXBpbGluZyB0aGUgVS1Cb290IGZvciBNMjggaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBkb25lIGFzIGNvbXBpbGluZyBVLUJvb3QKK2ZvciBhbnkgb3RoZXIgQVJNIGRldmljZS4gRm9yIGNyb3NzLWNvbXBpbGVyIHNldHVwLCBwbGVhc2UgcmVmZXIgdG8gRUxESzUuMAorZG9jdW1lbnRhdGlvbi4gRmlyc3QsIGNsZWFuIHVwIHRoZSBzb3VyY2UgY29kZToKKworCSQgbWFrZSBtcnByb3BlcgorCitOZXh0LCBjb25maWd1cmUgVS1Cb290IGZvciBNMjhFVks6CisKKwkkIG1ha2UgbTI4ZXZrX2NvbmZpZworCitMYXN0bHksIGNvbXBpbGUgVS1Cb290IGFuZCBwcmVwYXJlIGEgIkJvb3RTdHJlYW0iLiBUaGUgIkJvb3RTdHJlYW0iIGlzIGEgc3BlY2lhbAordHlwZSBvZiBmaWxlLCB3aGljaCB0aGUgaS5NWDI4IENQVSBjYW4gYm9vdC4gVGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQ6CisKKwkkIG1ha2UgdS1ib290LnNiCisKK0hJTlQ6IFRvIHNwZWVkLXVwIHRoZSBidWlsZCBwcm9jZXNzLCB5b3UgY2FuIGFkZCAtajxOPiwgd2hlcmUgTiBpcyBudW1iZXIgb2YKKyAgICAgIGNvbXBpbGVyIGluc3RhbmNlcyB0aGF0J2xsIHJ1biBpbiBwYXJhbGxlbC4KKworVGhlIGNvZGUgcHJvZHVjZXMgInUtYm9vdC5zYiIgZmlsZS4gVGhpcyBmaWxlIG5lZWRzIHRvIGJlIGF1Z21lbnRlZCB3aXRoIGEKK3Byb3BlciBoZWFkZXIgdG8gYWxsb3cgc3VjY2Vzc2Z1bCBib290IGZyb20gU0Qgb3IgTkFORC4gQWRkaW5nIHRoZSBoZWFkZXIgaXMKK2Rpc2N1c3NlZCBpbiB0aGUgZm9sbG93aW5nIGNoYXB0ZXJzLgorCiszKSBJbnN0YWxsYXRpb24gb2YgVS1Cb290IGZvciBNMjhFVksgdG8gU0QgY2FyZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gYm9vdCBhbiBNMjggZnJvbSBTRCwgc2V0IHRoZSBib290IG1vZGUgRElQIHN3aXRjaGVzIGFjY29yZGluZyB0byBpLk1YMjgKK21hbnVhbCBjaGFwdGVyIDEyLjIuMSAoVGFibGUgMTItMiksIFBPUlQ9U1NQMCwgU0QvTU1DIG1hc3RlciBvbiBTU1AwLCAzLjNWLgorCitBbiBTRCBjYXJkIHRoZSBpLk1YMjggQ1BVIGNhbiB1c2UgdG8gYm9vdCBVLUJvb3QgbXVzdCBjb250YWluIGEgRE9TIHBhcnRpdGlvbgordGFibGUsIHdoaWNoIGluIHR1cm4gY2FycmllcyBhIHBhcnRpdGlvbiBvZiBzcGVjaWFsIHR5cGUgYW5kIHdoaWNoIGNvbnRhaW5zIGEKK3NwZWNpYWwgaGVhZGVyLiBUaGUgcmVzdCBvZiBwYXJ0aXRpb25zIGluIHRoZSBET1MgcGFydGl0aW9uIHRhYmxlIGNhbiBiZSB1c2VkCitieSB0aGUgdXNlci4KKworVG8gcHJlcGFyZSBzdWNoIHBhcnRpdGlvbiwgdXNlIHlvdXIgZmF2b3VyaXRlIHBhcnRpdGlvbmluZyB0b29sLiBUaGUgcGFydGl0aW9uCittdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCisJKiBTdGFydCBzZWN0b3IgLi4uLi4uLi4uLiBzZWN0b3IgMjA0OAorCSogUGFydGl0aW9uIHNpemUgLi4uLi4uLi4gYXQgbGVhc3QgMTAyNCBrYgorCSogUGFydGl0aW9uIHR5cGUgLi4uLi4uLi4gMHg1MyAoc29tZXRpbWVzICJPblRyYWNrIERNNiBBdXgzIikKKworRm9yIGV4YW1wbGUgaW4gTGludXggZmRpc2ssIHRoZSBzZXF1ZW5jZSBmb3IgYSBjbGVhciBjYXJkIGlzIHRoZSBmb2xsb3dpbmc6CisKKwkqIG8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIGNyZWF0ZSBhIGNsZWFyIHBhcnRpdGlvbiB0YWJsZQorCSogbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gY3JlYXRlIG5ldyBwYXJ0aXRpb24KKwkJKiBwIC4uLi4uLi4uLi4uLi4gcHJpbWFyeSBwYXJ0aXRpb24KKwkJKiAxIC4uLi4uLi4uLi4uLi4gZmlyc3QgcGFydGl0aW9uCisJCSogMjA0OCAuLi4uLi4uLi4uIGZpcnN0IHNlY3RvciBpcyAyMDQ4CisJCSogKzFNIC4uLi4uLi4uLi4uIG1ha2UgdGhlIHBhcnRpdGlvbiAxTWIgYmlnCisJKiB0IDEgLi4uLi4uLi4uLi4uLi4uLi4uLiBjaGFuZ2UgZmlyc3QgcGFydGl0aW9uIElECisJCSogNTMgLi4uLi4uLi4uLi4uIGNoYW5nZSB0aGUgSUQgdG8gMHg1MyAoT25UcmFjayBETTYgQXV4MykKKwkqIDxjcmVhdGUgb3RoZXIgcGFydGl0aW9ucz4KKwkqIHcgLi4uLi4uLi4uLi4uLi4uLi4uLi4uIHdyaXRlIHBhcnRpdGlvbiB0YWJsZSB0byBkaXNrCisKK1RoZSBwYXJ0aXRpb24gbGF5b3V0IGlzIHJlYWR5LCBuZXh0IHRoZSBzcGVjaWFsIHBhcnRpdGlvbiBtdXN0IGJlIGZpbGxlZCB3aXRoCitwcm9wZXIgY29udGVudHMuIFRoZSBjb250ZW50cyBpcyBnZW5lcmF0ZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgKHNlZQorY2hhcHRlciAyKSk6CisKKwkkIC4vdG9vbHMvbXhzYm9vdCBzZCB1LWJvb3Quc2IgdS1ib290LnNkCisKK1RoZSByZXN1bHRpbmcgZmlsZSwgInUtYm9vdC5zZCIsIHNoYWxsIHRoZW4gYmUgd3JpdHRlbiB0byB0aGUgcGFydGl0aW9uLiBJbiB0aGlzCitjYXNlLCB3ZSBhc3N1bWUgdGhlIGZpcnN0IHBhcnRpdGlvbiBvZiB0aGUgU0QgY2FyZCBpcyAvZGV2L21tY2JsazBwMToKKworCSQgZGQgaWY9dS1ib290LnNkIG9mPS9kZXYvbW1jYmxrMHAxCisKK0xhc3Qgc3RlcCBpcyB0byBpbnNlcnQgdGhlIGNhcmQgaW50byBNMjhFVksgYW5kIGJvb3QuCisKK05PVEU6IElmIHRoZSB1c2VyIG5lZWRzIHRvIGFkanVzdCB0aGUgc3RhcnQgc2VjdG9yLCB0aGUgIm14c2Jvb3QiIHRvb2wgY29udGFpbnMKKyAgICAgIGEgIi1wIiBzd2l0Y2ggZm9yIHRoYXQgcHVycG9zZS4gVGhlICItcCIgc3dpdGNoIHRha2VzIHRoZSBzZWN0b3IgbnVtYmVyIGFzCisgICAgICBhbiBhcmd1bWVudC4KKworNCkgSW5zdGFsbGF0aW9uIG9mIFUtQm9vdCBmb3IgTTI4IHRvIE5BTkQgZmxhc2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGJvb3QgYW4gTTI4IGZyb20gTkFORCwgc2V0IHRoZSBib290IG1vZGUgRElQIHN3aXRjaGVzIGFjY29yZGluZyB0byBpLk1YMjgKK21hbnVhbCBjaGFwdGVyIDEyLjIuMSAoVGFibGUgMTItMiksIFBPUlQ9R1BNSSwgTkFORCAxLjggVi4KKworVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzIHdoZW4gcHJlcGFyaW5nIGFuIGltYWdlIHdyaXRhYmxlIHRvIE5BTkQgZmxhc2guCisKKwlJKSBUaGUgTkFORCB3YXNuJ3Qgd3JpdHRlbiBhdCBhbGwgeWV0IG9yIHRoZSBCQ0IgaXMgYnJva2VuCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgIEluIHRoaXMgY2FzZSwgYm90aCBCQ0IgKEZDQiBhbmQgREJCVCkgYW5kIGZpcm13YXJlIG5lZWRzIHRvIGJlCisJICAgd3JpdHRlbiB0byBOQU5ELiBUbyBnZW5lcmF0ZSBOQU5EIGltYWdlIGNvbnRhaW5pbmcgYWxsIHRoZXNlLAorCSAgIHRoZXJlIGlzIGEgdG9vbCBjYWxsZWQgIm14c2Jvb3QiIGluIHRoZSAidG9vbHMvIiBkaXJlY3RvcnkuIFRoZSB0b29sCisJICAgaXMgaW52b2tlZCBvbiAidS1ib290LnNiIiBmaWxlIGZyb20gY2hhcHRlciAyKToKKworCQkgJCAuL3Rvb2xzL214c2Jvb3QgbmFuZCB1LWJvb3Quc2IgdS1ib290Lm5hbmQKKworCSAgIE5PVEU6IFRoZSBhYm92ZSBpbnZva2F0aW9uIHdvcmtzIGZvciBOQU5EIGZsYXNoIHdpdGggZ2VvbWV0cnkgb2YKKwkJIDIwNDhiIHBlciBwYWdlLCA2NGIgT09CIGRhdGEsIDEyOGtiIGVyYXNlIHNpemUuIElmIHlvdXIgY2hpcAorCQkgaGFzIGEgZGlmZmVyZW50IGdlb21ldHJ5LCBwbGVhc2UgdXNlOgorCisJCSAtdyA8c2l6ZT4JY2hhbmdlIHBhZ2Ugc2l6ZSAoZGVmYXVsdCAyMDQ4IGIpCisJCSAtbyA8c2l6ZT4JY2hhbmdlIG9vYiBzaXplIChkZWZhdWx0IDY0IGIpCisJCSAtZSA8c2l6ZT4JY2hhbmdlIGVyYXNlIHNpemUgKGRlZmF1bHQgMTMxMDcyIGIpCisKKwkJIFRoZSBnZW9tZXRyeSBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSBydW5uaW5nIFUtQm9vdAorCQkgb24gTTI4IGJ5IGlzc3VpbmcgdGhlICJuYW5kIGluZm8iIGNvbW1hbmQuCisKKwkgICBUaGUgcmVzdWx0aW5nIGZpbGUsICJ1LWJvb3QubmFuZCIgY2FuIGJlIHdyaXR0ZW4gZGlyZWN0bHkgdG8gTkFORAorCSAgIGZyb20gdGhlIFUtQm9vdCBwcm9tcHQuIFRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzLCB0aGUgVS1Cb290IGRlZmF1bHQKKwkgICBlbnZpcm9ubWVudCBjb250YWlucyBzY3JpcHQgInVwZGF0ZV9uYW5kX2Z1bGwiIHRvIHVwZGF0ZSB0aGUgc3lzdGVtLgorCisJICAgVGhpcyBzY3JpcHQgZXhwZWN0cyBhIHdvcmtpbmcgVEZUUCBzZXJ2ZXIgY29udGFpbmluZyB0aGUgZmlsZQorCSAgICJ1LWJvb3QubmFuZCIgaW4gaXQncyByb290IGRpcmVjdG9yeS4gVGhpcyBjYW4gYmUgY2hhbmdlZCBieQorCSAgIGFkanVzdGluZyB0aGUgInVwZGF0ZV9uYW5kX2Z1bGxfZmlsZW5hbWUiIHZhcmlibGUuCisKKwkgICBUbyB1cGRhdGUgdGhlIHN5c3RlbSwgcnVuIHRoZSBmb2xsb3dpbmcgaW4gVS1Cb290IHByb21wdDoKKworCQkgPT4gcnVuIHVwZGF0ZV9uYW5kX2Z1bGwKKworCSAgIEluIGNhc2UgeW91IHdvdWxkIG9ubHkgbmVlZCB0byB1cGRhdGUgdGhlIGJvb3Rsb2FkZXIgaW4gZnV0dXJlLAorCSAgIHNlZSBJSSkgYmVsb3cuCisKKwlJSSkgVGhlIE5BTkQgd2FzIGFscmVhZHkgd3JpdHRlbiB3aXRoIGEgZ29vZCBCQ0IKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICBUaGlzIHBhcnQgYXBwbGllcyBhZnRlciB0aGUgcGFydCBJKSBhYm92ZSB3YXMgZG9uZSBhdCBsZWFzdCBvbmNlLgorCisJICAgSWYgcGFydCBJKSBhYm92ZSB3YXMgZG9uZSBjb3JyZWN0bHkgYWxyZWFkeSwgdGhlcmUgaXMgbm8gbmVlZCB0bworCSAgIHdyaXRlIHRoZSBGQ0IgYW5kIERCQlQgcGFydHMgb2YgTkFORCBhZ2Fpbi4gSXQncyBwb3NzaWJsZSB0byB1cGdyYWRlCisJICAgb25seSB0aGUgYm9vdGxvYWRlciBpbWFnZS4KKworCSAgIFRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGZpcm13YXJlIHVwZGF0ZSwgdGhlIFUtQm9vdCBkZWZhdWx0CisJICAgZW52aXJvbm1lbnQgY29udGFpbnMgc2NyaXB0ICJ1cGRhdGVfbmFuZF9maXJtd2FyZSIgdG8gdXBkYXRlIG9ubHkKKwkgICB0aGUgZmlybXdhcmUsIHdpdGhvdXQgcmV3cml0aW5nIEZDQiBhbmQgREJCVC4KKworCSAgIFRoaXMgc2NyaXB0IGV4cGVjdHMgYSB3b3JraW5nIFRGVFAgc2VydmVyIGNvbnRhaW5pbmcgdGhlIGZpbGUKKwkgICAidS1ib290LnNiIiBpbiBpdCdzIHJvb3QgZGlyZWN0b3J5LiBUaGlzIGNhbiBiZSBjaGFuZ2VkIGJ5CisJICAgYWRqdXN0aW5nIHRoZSAidXBkYXRlX25hbmRfZmlybXdhcmVfZmlsZW5hbWUiIHZhcmlibGUuCisKKwkgICBUbyB1cGRhdGUgdGhlIHN5c3RlbSwgcnVuIHRoZSBmb2xsb3dpbmcgaW4gVS1Cb290IHByb21wdDoKKworCQkgPT4gcnVuIHVwZGF0ZV9uYW5kX2Zpcm13YXJlCisKKwlJSUkpIFNwZWNpYWwgc2V0dGluZ3MgZm9yIHRoZSB1cGRhdGUgc2NyaXB0cworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgVGhlcmUgaXMgYSBzbGlnaHQgcG9zc2liaWxpdHkgb2YgdGhlIHVzZXIgd2FudGluZyB0byBhZGp1c3QgdGhlCisJICAgU1RSSURFIGFuZCBDT1VOVCBvcHRpb25zIG9mIHRoZSBOQU5EIGJvb3QuIEZvciBkZXNjcmlwdGlvbiBvZiB0aGVzZSwKKwkgICBzZWUgaS5NWDI4IG1hbnVhbCBzZWN0aW9uIDEyLjEyLjEuMiBhbmQgMTIuMTIuMS4zLgorCisJICAgVGhlIHVwZGF0ZSBzY3JpcHRzIHRha2UgdGhpcyBwb3NzaWJpbGl0eSBpbnRvIGFjY291bnQuIEluIGNhc2UgdGhlCisJICAgdXNlciBjaGFuZ2VzIFNUUklERSBieSBibG93aW5nIGZ1c2VzLCB0aGUgdXNlciBhbHNvIGhhcyB0byBjaGFuZ2UKKwkgICAidXBkYXRlX25hbmRfc3RyaWRlIiB2YXJpYWJsZS4gSW4gY2FzZSB0aGUgdXNlciBjaGFuZ2VzIENPVU5UIGJ5CisJICAgYmxvd2luZyBmdXNlcywgdGhlIHVzZXIgYWxzbyBoYXMgdG8gY2hhbmdlICJ1cGRhdGVfbmFuZF9jb3VudCIKKwkgICB2YXJpYWJsZSBmb3IgdGhlIHVwZGF0ZSBzY3JpcHRzIHRvIHdvcmsgY29ycmVjdGx5LgorCisJICAgSW4gY2FzZSB0aGUgdXNlciBuZWVkcyB0byBib290IGEgZmlybXdhcmUgaW1hZ2UgYmlnZ2VyIHRoYW4gMU1iLCB0aGUKKwkgICB1c2VyIGhhcyB0byBhZGp1c3QgdGhlICJ1cGRhdGVfbmFuZF9maXJtd2FyZV9tYXhzeiIgdmFyaWFibGUgZm9yIHRoZQorCSAgIHVwZGF0ZSBzY3JpcHRzIHRvIHdvcmsgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jpb3NfZW11bGF0b3IveDg2ZW11L29wcy5jIGIvZHJpdmVycy9iaW9zX2VtdWxhdG9yL3g4NmVtdS9vcHMuYwppbmRleCBjODM2YTIwLi5mOGUwOTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jpb3NfZW11bGF0b3IveDg2ZW11L29wcy5jCisrKyBiL2RyaXZlcnMvYmlvc19lbXVsYXRvci94ODZlbXUvb3BzLmMKQEAgLTM1MTgsMTEgKzM1MTgsOSBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgeDg2ZW11T3BfaW50Myh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCiB7Ci0gICAgdTE2IHRtcDsKLQogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgREVDT0RFX1BSSU5URigiSU5UIDNcbiIpOwotICAgIHRtcCA9ICh1MTYpIG1lbV9hY2Nlc3Nfd29yZCgzICogNCArIDIpOworICAgICh2b2lkKW1lbV9hY2Nlc3Nfd29yZCgzICogNCArIDIpOwogICAgIC8qIGFjY2VzcyB0aGUgc2VnbWVudCByZWdpc3RlciAqLwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAJaWYgKF9YODZFTVVfaW50clRhYlszXSkgewpAQCAtMzU0NiwxNCArMzU0NCwxMyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgeDg2ZW11T3BfaW50X0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCiB7Ci0gICAgdTE2IHRtcDsKICAgICB1OCBpbnRudW07CiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIERFQ09ERV9QUklOVEYoIklOVFx0Iik7CiAgICAgaW50bnVtID0gZmV0Y2hfYnl0ZV9pbW0oKTsKICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGludG51bSk7Ci0gICAgdG1wID0gbWVtX2FjY2Vzc193b3JkKGludG51bSAqIDQgKyAyKTsKKyAgICAodm9pZCltZW1fYWNjZXNzX3dvcmQoaW50bnVtICogNCArIDIpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAJaWYgKF9YODZFTVVfaW50clRhYltpbnRudW1dKSB7CiAJCSgqX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pKGludG51bSk7CkBAIC0zNTc2LDEzICszNTczLDExIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCB4ODZlbXVPcF9pbnRvKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKIHsKLSAgICB1MTYgdG1wOwotCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBERUNPREVfUFJJTlRGKCJJTlRPXG4iKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkgewotCXRtcCA9IG1lbV9hY2Nlc3Nfd29yZCg0ICogNCArIDIpOworCSh2b2lkKW1lbV9hY2Nlc3Nfd29yZCg0ICogNCArIDIpOwogCQlpZiAoX1g4NkVNVV9pbnRyVGFiWzRdKSB7CiAJCQkoKl9YODZFTVVfaW50clRhYls0XSkoNCk7CiAJfSBlbHNlIHsKQEAgLTM5OTAsMTEgKzM5ODUsOSBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgeDg2ZW11T3BfYWFkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKIHsKLSAgICB1OCBhOwotCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBERUNPREVfUFJJTlRGKCJBQURcbiIpOwotICAgIGEgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICh2b2lkKWZldGNoX2J5dGVfaW1tKCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBNLng4Ni5SX0FYID0gYWFkX3dvcmQoTS54ODYuUl9BWCk7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9haGNpLmMgYi9kcml2ZXJzL2Jsb2NrL2FoY2kuYwppbmRleCAwMTViMzQxLi43YjJlYzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FoY2kuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FoY2kuYwpAQCAtNTYxLDEyICs1NjEsOSBAQAogICovCiBzdGF0aWMgaW50IGF0YV9zY3Npb3BfcmVhZDEwKGNjYiAqIHBjY2IpCiB7Ci0JdTY0IGxiYSA9IDA7CiAJdTMyIGxlbiA9IDA7CiAJdTggZmlzWzIwXTsKIAotCWxiYSA9ICgoKHU2NCkgcGNjYi0+Y21kWzJdKSA8PCAyNCkgfCAoKCh1NjQpIHBjY2ItPmNtZFszXSkgPDwgMTYpCi0JICAgIHwgKCgodTY0KSBwY2NiLT5jbWRbNF0pIDw8IDgpIHwgKCh1NjQpIHBjY2ItPmNtZFs1XSk7CiAJbGVuID0gKCgodTMyKSBwY2NiLT5jbWRbN10pIDw8IDgpIHwgKCh1MzIpIHBjY2ItPmNtZFs4XSk7CiAKIAkvKiBGb3IgMTAtYnl0ZSBhbmQgMTYtYnl0ZSBTQ1NJIFIvVyBjb21tYW5kcywgdHJhbnNmZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZnRpZGUwMjAuYyBiL2RyaXZlcnMvYmxvY2svZnRpZGUwMjAuYwppbmRleCA0YTdhMDdmLi5hZDhmZGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Z0aWRlMDIwLmMKKysrIGIvZHJpdmVycy9ibG9jay9mdGlkZTAyMC5jCkBAIC0zMTYsMTAgKzMxNiw5IEBACiAKIAkvKiBhdXRvLWRldGVjdCBJREUgY29udHJvbGxlciAqLwogCWlmIChmdGlkZV9jb250cm9sbGVyX3Byb2JlKCkpIHsKLQkJcHJpbnRmKCJGYXJhZGF5ICVzIGRyaXZlciB2ZXJzaW9uICVzXG4iLCBGVElERV9JUF9OQU1FLAotCQlGVElERV9EUklWRVJfVkVSU0lPTik7CisJCXByaW50ZigiRlRJREUwMjBfU1xuIik7CiAJfSBlbHNlIHsKLQkJcHJpbnRmKCJGYXJhZGF5IEFUQSBjb250cm9sbGVyIG5vdCBmb3VuZC5cbiIpOworCQlwcmludGYoIkZUSURFMDIwX1MgQVRBIGNvbnRyb2xsZXIgbm90IGZvdW5kLlxuIik7CiAJCXJldHVybiBBUElfRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zYXRhX2R3Yy5jIGIvZHJpdmVycy9ibG9jay9zYXRhX2R3Yy5jCmluZGV4IGIyYjM4MDQuLjY5ZWM1ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc2F0YV9kd2MuYworKysgYi9kcml2ZXJzL2Jsb2NrL3NhdGFfZHdjLmMKQEAgLTQ0MCwxMSArNDQwLDkgQEAKIHsKIAl1OCBuc2VjdCxsYmFsID0gMDsKIAl1OCB0bXAgPSAwOwotCXUzMiBzZXJyb3IgPSAwOwotCXU4IHN0YXR1cyA9IDA7CiAJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKIAotCXNlcnJvciA9IGluX2xlMzIoKHZvaWQgKilhcC0+aW9hZGRyLnNjcl9hZGRyICsgKFNDUl9FUlJPUiAqIDQpKTsKKwlpbl9sZTMyKCh2b2lkICopYXAtPmlvYWRkci5zY3JfYWRkciArIChTQ1JfRVJST1IgKiA0KSk7CiAKIAl3cml0ZWIoMHg1NSwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKIAl3cml0ZWIoMHhhYSwgaW9hZGRyLT5sYmFsX2FkZHIpOwpAQCAtNDc2LDcgKzQ3NCw3IEBACiAJd3JpdGViKGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOwogCiAJbXNsZWVwKDE1MCk7Ci0Jc3RhdHVzID0gYXRhX2NoZWNrX3N0YXR1cyhhcCk7CisJYXRhX2NoZWNrX3N0YXR1cyhhcCk7CiAKIAltc2xlZXAoNTApOwogCWF0YV9jaGVja19zdGF0dXMoYXApOwpAQCAtNTM1LDcgKzUzMyw2IEBACiAJY29uc3QgdTE2ICppZDsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqYXRhX2RldiA9ICZhdGFfZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgcGlvX21hc2ssIG13ZG1hX21hc2ssIHVkbWFfbWFzazsKLQl1bnNpZ25lZCBsb25nIHhmZXJfbWFzazsKIAljaGFyIHJldmJ1Zls3XTsKIAl1MTYgaW9idWZbQVRBX1NFQ1RPUl9XT1JEU107CiAKQEAgLTYyOSwxMCArNjI2LDYgQEAKIAlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmICgxIDw8IDIpKQogCQl1ZG1hX21hc2sgPSBpZFtBVEFfSURfVURNQV9NT0RFU10gJiAweGZmOwogCi0JeGZlcl9tYXNrID0gKChwaW9fbWFzayA8PCBBVEFfU0hJRlRfUElPKSAmIEFUQV9NQVNLX1BJTykgfAotCQkoKG13ZG1hX21hc2sgPDwgQVRBX1NISUZUX01XRE1BKSAmIEFUQV9NQVNLX01XRE1BKSB8Ci0JCSgodWRtYV9tYXNrIDw8IEFUQV9TSElGVF9VRE1BKSAmIEFUQV9NQVNLX1VETUEpOwotCiAJaWYgKGF0YV9kZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBKSB7CiAJCWlmIChhdGFfaWRfaXNfY2ZhKGlkKSkgewogCQkJaWYgKGlkWzE2Ml0gJiAxKQpAQCAtNjUxLDE0ICs2NDQsMTEgQEAKIAkJCWF0YV9kZXYtPm11bHRpX2NvdW50ID0gYXRhX2Rldi0+aWRbNTldICYgMHhmZjsKIAogCQlpZiAoYXRhX2lkX2hhc19sYmEoaWQpKSB7Ci0JCQljb25zdCBjaGFyICpsYmFfZGVzYzsKIAkJCWNoYXIgbmNxX2Rlc2NbMjBdOwogCi0JCQlsYmFfZGVzYyA9ICJMQkEiOwogCQkJYXRhX2Rldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX0xCQTsKIAkJCWlmIChhdGFfaWRfaGFzX2xiYTQ4KGlkKSkgewogCQkJCWF0YV9kZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19MQkE0ODsKLQkJCQlsYmFfZGVzYyA9ICJMQkE0OCI7CiAKIAkJCQlpZiAoYXRhX2Rldi0+bl9zZWN0b3JzID49ICgxVUwgPDwgMjgpICYmCiAJCQkJCWF0YV9pZF9oYXNfZmx1c2hfZXh0KGlkKSkKQEAgLTg5MCw2ICs4ODAsNyBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0OgorCXByaW50ZigiZmFpbGVkIHRvIFJFQUQgSUQgKCVzLCBlcnJfbWFzaz0weCV4KVxuIiwgcmVhc29uLCBlcnJfbWFzayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xODA3LDcgKzE3OTgsNiBAQAogCXVuc2lnbmVkIGludCBlcnJfbWFzayA9IDA7CiAJY29uc3QgY2hhciAqcmVhc29uOwogCWludCBtYXlfZmFsbGJhY2sgPSAxOwotCWludCByYzsKIAogCWlmIChkZXZfc3RhdGUgPT0gU0FUQV9FUlJPUikKIAkJcmV0dXJuIEZBTFNFOwpAQCAtMTkwNCwxOSArMTg5NCwxMCBAQAogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAotCQlyYyA9IC1FSU87CiAJCXJlYXNvbiA9ICJJL08gZXJyb3IiOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JLyogRmFsbGluZyBiYWNrIGRvZXNuJ3QgbWFrZSBzZW5zZSBpZiBJRCBkYXRhIHdhcyByZWFkCi0JICogc3VjY2Vzc2Z1bGx5IGF0IGxlYXN0IG9uY2UuCi0JICovCi0JbWF5X2ZhbGxiYWNrID0gMDsKLQotCXJjID0gLUVJTlZBTDsKLQlyZWFzb24gPSAiZGV2aWNlIHJlcG9ydHMgaW52YWxpZCB0eXBlIjsKLQogCXJldHVybiBUUlVFOwogCiBlcnJfb3V0OgpAQCAtMTk5MSw3ICsxOTcyLDYgQEAKIAl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSAwOwogCWNvbnN0IGNoYXIgKnJlYXNvbjsKIAlpbnQgbWF5X2ZhbGxiYWNrID0gMTsKLQlpbnQgcmM7CiAKIAlpZiAoZGV2X3N0YXRlID09IFNBVEFfRVJST1IpCiAJCXJldHVybiBGQUxTRTsKQEAgLTIwODksMTkgKzIwNjksMTAgQEAKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAKLQkJcmMgPSAtRUlPOwogCQlyZWFzb24gPSAiSS9PIGVycm9yIjsKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCS8qIEZhbGxpbmcgYmFjayBkb2Vzbid0IG1ha2Ugc2Vuc2UgaWYgSUQgZGF0YSB3YXMgcmVhZAotCSAqIHN1Y2Nlc3NmdWxseSBhdCBsZWFzdCBvbmNlLgotCSAqLwotCW1heV9mYWxsYmFjayA9IDA7Ci0KLQlyYyA9IC1FSU5WQUw7Ci0JcmVhc29uID0gImRldmljZSByZXBvcnRzIGludmFsaWQgdHlwZSI7Ci0KIAlyZXR1cm4gVFJVRTsKIAogZXJyX291dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc2F0YV9zaWwzMTE0LmMgYi9kcml2ZXJzL2Jsb2NrL3NhdGFfc2lsMzExNC5jCmluZGV4IDFlNjA2MzYuLjM0ZmUwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc2F0YV9zaWwzMTE0LmMKKysrIGIvZHJpdmVycy9ibG9jay9zYXRhX3NpbDMxMTQuYwpAQCAtNzgyLDYgKzc4Miw3IEBACiAJCSAgICAoaW9iYXNlWzVdICsgVk5EX1RGMl9DSDApIHwgQVRBX1BDSV9DVExfT0ZTOwogCQlwb3J0WzBdLmlvYWRkci5ibWRtYV9hZGRyID0gaW9iYXNlWzVdICsgVk5EX0JNRE1BX0NIMDsKIAkJYnJlYWs7CisjaWYgKENPTkZJR19TWVNfU0FUQV9NQVhfREVWSUNFID49IDEpCiAJY2FzZSAxOgogCQlwb3J0WzFdLnBvcnRfbm8gPSAwOwogCQlwb3J0WzFdLmlvYWRkci5jbWRfYWRkciA9IGlvYmFzZVs1XSArIFZORF9URjBfQ0gxOwpAQCAtNzg5LDYgKzc5MCw3IEBACiAJCSAgICAoaW9iYXNlWzVdICsgVk5EX1RGMl9DSDEpIHwgQVRBX1BDSV9DVExfT0ZTOwogCQlwb3J0WzFdLmlvYWRkci5ibWRtYV9hZGRyID0gaW9iYXNlWzVdICsgVk5EX0JNRE1BX0NIMTsKIAkJYnJlYWs7CisjZWxpZiAoQ09ORklHX1NZU19TQVRBX01BWF9ERVZJQ0UgPj0gMikKIAljYXNlIDI6CiAJCXBvcnRbMl0ucG9ydF9ubyA9IDA7CiAJCXBvcnRbMl0uaW9hZGRyLmNtZF9hZGRyID0gaW9iYXNlWzVdICsgVk5EX1RGMF9DSDI7CkBAIC03OTYsNiArNzk4LDcgQEAKIAkJICAgIChpb2Jhc2VbNV0gKyBWTkRfVEYyX0NIMikgfCBBVEFfUENJX0NUTF9PRlM7CiAJCXBvcnRbMl0uaW9hZGRyLmJtZG1hX2FkZHIgPSBpb2Jhc2VbNV0gKyBWTkRfQk1ETUFfQ0gyOwogCQlicmVhazsKKyNlbGlmIChDT05GSUdfU1lTX1NBVEFfTUFYX0RFVklDRSA+PSAzKQogCWNhc2UgMzoKIAkJcG9ydFszXS5wb3J0X25vID0gMDsKIAkJcG9ydFszXS5pb2FkZHIuY21kX2FkZHIgPSBpb2Jhc2VbNV0gKyBWTkRfVEYwX0NIMzsKQEAgLTgwMyw2ICs4MDYsNyBAQAogCQkgICAgKGlvYmFzZVs1XSArIFZORF9URjJfQ0gzKSB8IEFUQV9QQ0lfQ1RMX09GUzsKIAkJcG9ydFszXS5pb2FkZHIuYm1kbWFfYWRkciA9IGlvYmFzZVs1XSArIFZORF9CTURNQV9DSDM7CiAJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJcHJpbnRmICgiVHJpZWQgdG8gc2NhbiB1bmtub3duIHBvcnQ6IGF0YSVkXG4iLCBkZXYpOwogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3ltNTNjOHh4LmMgYi9kcml2ZXJzL2Jsb2NrL3N5bTUzYzh4eC5jCmluZGV4IDgwOTRiNDEuLjU2NGFhOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3ltNTNjOHh4LmMKKysrIGIvZHJpdmVycy9ibG9jay9zeW01M2M4eHguYwpAQCAtNDUzLDExICs0NTMsOSBAQAogCiB2b2lkIHNjc2lfd3JpdGVfZHNwKHVuc2lnbmVkIGxvbmcgc3RhcnQpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWw7CiAjaWZkZWYgU0NTSV9TSU5HTEVfU1RFUAogCXVuc2lnbmVkIGNoYXIgdDsKICNlbmRpZgotCXZhbCA9IHN0YXJ0OwogCW91dDMycihzY3NpX21lbV9hZGRyICsgRFNQLHN0YXJ0KTsKICNpZmRlZiBTQ1NJX1NJTkdMRV9TVEVQCiAJdD1zY3NpX3JlYWRfYnl0ZShEQ05UTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IDNkOWM5ZjEuLjVkODY0YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCkBAIC0yNiw2ICsyNiw3IEBACiBMSUIJOj0gJChvYmopbGliZG1hLm8KIAogQ09CSlMtJChDT05GSUdfRlNMRE1BRkVDKSArPSBNQ0RfdGFza3NJbml0Lm8gTUNEX2RtYUFwaS5vIE1DRF90YXNrcy5vCitDT0JKUy0kKENPTkZJR19BUEJIX0RNQSkgKz0gYXBiaF9kbWEubwogQ09CSlMtJChDT05GSUdfRlNMX0RNQSkgKz0gZnNsX2RtYS5vCiBDT0JKUy0kKENPTkZJR19PTUFQM19ETUEpICs9IG9tYXAzX2RtYS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2FwYmhfZG1hLmMgYi9kcml2ZXJzL2RtYS9hcGJoX2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTEwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9hcGJoX2RtYS5jCkBAIC0wLDAgKzEsNjkxIEBACisvKgorICogRnJlZXNjYWxlIGkuTVgyOCBBUEJIIERNQSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW14LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKworc3RhdGljIHN0cnVjdCBteHNfZG1hX2NoYW4gbXhzX2RtYV9jaGFubmVsc1tNWFNfTUFYX0RNQV9DSEFOTkVMU107CisKKy8qCisgKiBUZXN0IGlzIHRoZSBETUEgY2hhbm5lbCBpcyB2YWxpZCBjaGFubmVsCisgKi8KK2ludCBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oaW50IGNoYW5uZWwpCit7CisJc3RydWN0IG14c19kbWFfY2hhbiAqcGNoYW47CisKKwlpZiAoKGNoYW5uZWwgPCAwKSB8fCAoY2hhbm5lbCA+PSBNWFNfTUFYX0RNQV9DSEFOTkVMUykpCisJCXJldHVybiAtRUlOVkFMOworCisJcGNoYW4gPSBteHNfZG1hX2NoYW5uZWxzICsgY2hhbm5lbDsKKwlpZiAoIShwY2hhbi0+ZmxhZ3MgJiBNWFNfRE1BX0ZMQUdTX0FMTE9DQVRFRCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFbmFibGUgYSBETUEgY2hhbm5lbC4KKyAqCisgKiBJZiB0aGUgZ2l2ZW4gY2hhbm5lbCBoYXMgYW55IERNQSBkZXNjcmlwdG9ycyBvbiBpdHMgYWN0aXZlIGxpc3QsIHRoaXMKKyAqIGZ1bmN0aW9uIGNhdXNlcyB0aGUgRE1BIGhhcmR3YXJlIHRvIGJlZ2luIHByb2Nlc3NpbmcgdGhlbS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1hcmtzIHRoZSBETUEgY2hhbm5lbCBhcyAiYnVzeSwiIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkKKyAqIGRlc2NyaXB0b3JzIHRvIHByb2Nlc3MuCisgKi8KK2ludCBteHNfZG1hX2VuYWJsZShpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKmFwYmhfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKilNWFNfQVBCSF9CQVNFOworCXVuc2lnbmVkIGludCBzZW07CisJc3RydWN0IG14c19kbWFfY2hhbiAqcGNoYW47CisJc3RydWN0IG14c19kbWFfZGVzYyAqcGRlc2M7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGNoYW4gPSBteHNfZG1hX2NoYW5uZWxzICsgY2hhbm5lbDsKKworCWlmIChwY2hhbi0+cGVuZGluZ19udW0gPT0gMCkgeworCQlwY2hhbi0+ZmxhZ3MgfD0gTVhTX0RNQV9GTEFHU19CVVNZOworCQlyZXR1cm4gMDsKKwl9CisKKwlwZGVzYyA9IGxpc3RfZmlyc3RfZW50cnkoJnBjaGFuLT5hY3RpdmUsIHN0cnVjdCBteHNfZG1hX2Rlc2MsIG5vZGUpOworCWlmIChwZGVzYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChwY2hhbi0+ZmxhZ3MgJiBNWFNfRE1BX0ZMQUdTX0JVU1kpIHsKKwkJaWYgKCEocGRlc2MtPmNtZC5kYXRhICYgTVhTX0RNQV9ERVNDX0NIQUlOKSkKKwkJCXJldHVybiAwOworCisJCXNlbSA9IG14c19kbWFfcmVhZF9zZW1hcGhvcmUoY2hhbm5lbCk7CisJCWlmIChzZW0gPT0gMCkKKwkJCXJldHVybiAwOworCisJCWlmIChzZW0gPT0gMSkgeworCQkJcGRlc2MgPSBsaXN0X2VudHJ5KHBkZXNjLT5ub2RlLm5leHQsCisJCQkJCSAgIHN0cnVjdCBteHNfZG1hX2Rlc2MsIG5vZGUpOworCQkJd3JpdGVsKG14c19kbWFfY21kX2FkZHJlc3MocGRlc2MpLAorCQkJCSZhcGJoX3JlZ3MtPmNoW2NoYW5uZWxdLmh3X2FwYmhfY2hfbnh0Y21kYXIpOworCQl9CisJCXdyaXRlbChwY2hhbi0+cGVuZGluZ19udW0sCisJCQkmYXBiaF9yZWdzLT5jaFtjaGFubmVsXS5od19hcGJoX2NoX3NlbWEpOworCQlwY2hhbi0+YWN0aXZlX251bSArPSBwY2hhbi0+cGVuZGluZ19udW07CisJCXBjaGFuLT5wZW5kaW5nX251bSA9IDA7CisJfSBlbHNlIHsKKwkJcGNoYW4tPmFjdGl2ZV9udW0gKz0gcGNoYW4tPnBlbmRpbmdfbnVtOworCQlwY2hhbi0+cGVuZGluZ19udW0gPSAwOworCQl3cml0ZWwobXhzX2RtYV9jbWRfYWRkcmVzcyhwZGVzYyksCisJCQkmYXBiaF9yZWdzLT5jaFtjaGFubmVsXS5od19hcGJoX2NoX254dGNtZGFyKTsKKwkJd3JpdGVsKHBjaGFuLT5hY3RpdmVfbnVtLAorCQkJJmFwYmhfcmVncy0+Y2hbY2hhbm5lbF0uaHdfYXBiaF9jaF9zZW1hKTsKKwkJd3JpdGVsKDEgPDwgKGNoYW5uZWwgKyBBUEJIX0NUUkwwX0NMS0dBVEVfQ0hBTk5FTF9PRkZTRVQpLAorCQkJJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMF9jbHIpOworCX0KKworCXBjaGFuLT5mbGFncyB8PSBNWFNfRE1BX0ZMQUdTX0JVU1k7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEaXNhYmxlIGEgRE1BIGNoYW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaHV0cyBkb3duIGEgRE1BIGNoYW5uZWwgYW5kIG1hcmtzIGl0IGFzICJub3QgYnVzeS4iIEFueQorICogZGVzY3JpcHRvcnMgb24gdGhlIGFjdGl2ZSBsaXN0IGFyZSBpbW1lZGlhdGVseSBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUKKyAqICJkb25lIiBsaXN0LCB3aGV0aGVyIG9yIG5vdCB0aGV5IGhhdmUgYWN0dWFsbHkgYmVlbiBwcm9jZXNzZWQgYnkgdGhlCisgKiBoYXJkd2FyZS4gVGhlICJyZWFkeSIgZmxhZ3Mgb2YgdGhlc2UgZGVzY3JpcHRvcnMgYXJlIE5PVCBjbGVhcmVkLCBzbyB0aGV5CisgKiBzdGlsbCBhcHBlYXIgdG8gYmUgYWN0aXZlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgc2h1dHMgZG93biBhIERNQSBjaGFubmVsJ3MgaGFyZHdhcmUsIGFib3J0aW5nIGFueQorICogSS9PIHRoYXQgbWF5IGJlIGluIHByb2dyZXNzLCBwb3RlbnRpYWxseSBsZWF2aW5nIEkvTyBoYXJkd2FyZSBpbiBhbiB1bmRlZmluZWQKKyAqIHN0YXRlLiBJdCBpcyB1bndpc2UgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHRoZXJlIGlzIEFOWSBjaGFuY2UgdGhlIGhhcmR3YXJlCisgKiBpcyBzdGlsbCBwcm9jZXNzaW5nIGEgY29tbWFuZC4KKyAqLworaW50IG14c19kbWFfZGlzYWJsZShpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpwY2hhbjsKKwlzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKmFwYmhfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKilNWFNfQVBCSF9CQVNFOworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBjaGFuID0gbXhzX2RtYV9jaGFubmVscyArIGNoYW5uZWw7CisKKwlpZiAoIShwY2hhbi0+ZmxhZ3MgJiBNWFNfRE1BX0ZMQUdTX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdyaXRlbCgxIDw8IChjaGFubmVsICsgQVBCSF9DVFJMMF9DTEtHQVRFX0NIQU5ORUxfT0ZGU0VUKSwKKwkJJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMF9zZXQpOworCisJcGNoYW4tPmZsYWdzICY9IH5NWFNfRE1BX0ZMQUdTX0JVU1k7CisJcGNoYW4tPmFjdGl2ZV9udW0gPSAwOworCXBjaGFuLT5wZW5kaW5nX251bSA9IDA7CisJbGlzdF9zcGxpY2VfaW5pdCgmcGNoYW4tPmFjdGl2ZSwgJnBjaGFuLT5kb25lKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVzZXRzIHRoZSBETUEgY2hhbm5lbCBoYXJkd2FyZS4KKyAqLworaW50IG14c19kbWFfcmVzZXQoaW50IGNoYW5uZWwpCit7CisJc3RydWN0IG14MjhfYXBiaF9yZWdzICphcGJoX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfYXBiaF9yZWdzICopTVhTX0FQQkhfQkFTRTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXhzX2RtYV92YWxpZGF0ZV9jaGFuKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl3cml0ZWwoMSA8PCAoY2hhbm5lbCArIEFQQkhfQ0hBTk5FTF9DVFJMX1JFU0VUX0NIQU5ORUxfT0ZGU0VUKSwKKwkJJmFwYmhfcmVncy0+aHdfYXBiaF9jaGFubmVsX2N0cmxfc2V0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogRnJlZXplIGEgRE1BIGNoYW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYXVzZXMgdGhlIGNoYW5uZWwgdG8gY29udGludW91c2x5IGZhaWwgYXJiaXRyYXRpb24gZm9yIGJ1cworICogYWNjZXNzLCB3aGljaCBoYWx0cyBhbGwgZm9yd2FyZCBwcm9ncmVzcyB3aXRob3V0IGxvc2luZyBhbnkgc3RhdGUuIEEgY2FsbCB0bworICogbXhzX2RtYV91bmZyZWV6ZSgpIHdpbGwgY2F1c2UgdGhlIGNoYW5uZWwgdG8gY29udGludWUgaXRzIGN1cnJlbnQgb3BlcmF0aW9uCisgKiB3aXRoIG5vIGlsbCBlZmZlY3QuCisgKi8KK2ludCBteHNfZG1hX2ZyZWV6ZShpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKmFwYmhfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKilNWFNfQVBCSF9CQVNFOworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXdyaXRlbCgxIDw8IChjaGFubmVsICsgQVBCSF9DSEFOTkVMX0NUUkxfRlJFRVpFX0NIQU5ORUxfT0ZGU0VUKSwKKwkJJmFwYmhfcmVncy0+aHdfYXBiaF9jaGFubmVsX2N0cmxfc2V0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVW5mcmVlemUgYSBETUEgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgbXhzX2RtYV9mcmVlemUoKSwgZW5hYmxpbmcgdGhlIERNQQorICogY2hhbm5lbCB0byBjb250aW51ZSBmcm9tIHdoZXJlIGl0IHdhcyBmcm96ZW4uCisgKi8KK2ludCBteHNfZG1hX3VuZnJlZXplKGludCBjaGFubmVsKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJd3JpdGVsKDEgPDwgKGNoYW5uZWwgKyBBUEJIX0NIQU5ORUxfQ1RSTF9GUkVFWkVfQ0hBTk5FTF9PRkZTRVQpLAorCQkmYXBiaF9yZWdzLT5od19hcGJoX2NoYW5uZWxfY3RybF9jbHIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIGEgRE1BIGNoYW5uZWwncyBoYXJkd2FyZSBzZW1hcGhvcmUuCisgKgorICogQXMgdXNlZCBieSB0aGUgTVhTIHBsYXRmb3JtJ3MgRE1BIHNvZnR3YXJlLCB0aGUgRE1BIGNoYW5uZWwncyBoYXJkd2FyZQorICogc2VtYXBob3JlIHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgRE1BIGNvbW1hbmRzIHRoZSBoYXJkd2FyZSB3aWxsIHByb2Nlc3MsIGJ1dAorICogaGFzIG5vdCB5ZXQgZmluaXNoZWQuIFRoaXMgaXMgYSB2b2xhdGlsZSB2YWx1ZSByZWFkIGRpcmVjdGx5IGZyb20gaGFyZHdhcmUsCisgKiBzbyBpdCBtdXN0IGJlIGJlIHZpZXdlZCBhcyBpbW1lZGlhdGVseSBzdGFsZS4KKyAqCisgKiBJZiB0aGUgY2hhbm5lbCBpcyBub3QgbWFya2VkIGJ1c3ksIG9yIGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGFsbCBpdHMKKyAqIGNvbW1hbmRzLCB0aGlzIHZhbHVlIHNob3VsZCBiZSB6ZXJvLgorICoKKyAqIFNlZSBteHNfZG1hX2FwcGVuZCgpIGZvciBkZXRhaWxzIG9uIGhvdyBETUEgY29tbWFuZCBibG9ja3MgbXVzdCBiZSBjb25maWd1cmVkCisgKiB0byBtYWludGFpbiB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgdGhlIHNlbWFwaG9yZSdzIHZhbHVlLgorICovCitpbnQgbXhzX2RtYV9yZWFkX3NlbWFwaG9yZShpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKmFwYmhfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKilNWFNfQVBCSF9CQVNFOworCXVpbnQzMl90IHRtcDsKKwlpbnQgcmV0OworCisJcmV0ID0gbXhzX2RtYV92YWxpZGF0ZV9jaGFuKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0bXAgPSByZWFkbCgmYXBiaF9yZWdzLT5jaFtjaGFubmVsXS5od19hcGJoX2NoX3NlbWEpOworCisJdG1wICY9IEFQQkhfQ0huX1NFTUFfUEhPUkVfTUFTSzsKKwl0bXAgPj49IEFQQkhfQ0huX1NFTUFfUEhPUkVfT0ZGU0VUOworCisJcmV0dXJuIHRtcDsKK30KKworLyoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIERNQSBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBnaXZlbiBETUEgY2hhbm5lbCB0byBpbnRlcnJ1cHQgdGhlIENQVS4KKyAqLworaW50IG14c19kbWFfZW5hYmxlX2lycShpbnQgY2hhbm5lbCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKmFwYmhfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKilNWFNfQVBCSF9CQVNFOworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChlbmFibGUpCisJCXdyaXRlbCgxIDw8IChjaGFubmVsICsgQVBCSF9DVFJMMV9DSF9DTURDTVBMVF9JUlFfRU5fT0ZGU0VUKSwKKwkJCSZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDFfc2V0KTsKKwllbHNlCisJCXdyaXRlbCgxIDw8IChjaGFubmVsICsgQVBCSF9DVFJMMV9DSF9DTURDTVBMVF9JUlFfRU5fT0ZGU0VUKSwKKwkJCSZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDFfY2xyKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgaWYgYSBETUEgaW50ZXJydXB0IGlzIHBlbmRpbmcuCisgKi8KK2ludCBteHNfZG1hX2lycV9pc19wZW5kaW5nKGludCBjaGFubmVsKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJdWludDMyX3QgdG1wOworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRtcCA9IHJlYWRsKCZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDEpOworCXRtcCB8PSByZWFkbCgmYXBiaF9yZWdzLT5od19hcGJoX2N0cmwyKTsKKworCXJldHVybiAodG1wID4+IGNoYW5uZWwpICYgMTsKK30KKworLyoKKyAqIENsZWFyIERNQSBpbnRlcnJ1cHQuCisgKgorICogVGhlIHNvZnR3YXJlIHRoYXQgaXMgdXNpbmcgdGhlIERNQSBjaGFubmVsIG11c3QgcmVnaXN0ZXIgdG8gcmVjZWl2ZSBpdHMKKyAqIGludGVycnVwdHMgYW5kLCB3aGVuIHRoZXkgYXJyaXZlLCBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiB0byBjbGVhciB0aGVtLgorICovCitpbnQgbXhzX2RtYV9hY2tfaXJxKGludCBjaGFubmVsKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJd3JpdGVsKDEgPDwgY2hhbm5lbCwgJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMV9jbHIpOworCXdyaXRlbCgxIDw8IGNoYW5uZWwsICZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDJfY2xyKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVxdWVzdCB0byByZXNlcnZlIGEgRE1BIGNoYW5uZWwKKyAqLworaW50IG14c19kbWFfcmVxdWVzdChpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpwY2hhbjsKKworCWlmICgoY2hhbm5lbCA8IDApIHx8IChjaGFubmVsID49IE1YU19NQVhfRE1BX0NIQU5ORUxTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwY2hhbiA9IG14c19kbWFfY2hhbm5lbHMgKyBjaGFubmVsOworCWlmICgocGNoYW4tPmZsYWdzICYgTVhTX0RNQV9GTEFHU19WQUxJRCkgIT0gTVhTX0RNQV9GTEFHU19WQUxJRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocGNoYW4tPmZsYWdzICYgTVhTX0RNQV9GTEFHU19BTExPQ0FURUQpCisJCXJldHVybiAtRUJVU1k7CisKKwlwY2hhbi0+ZmxhZ3MgfD0gTVhTX0RNQV9GTEFHU19BTExPQ0FURUQ7CisJcGNoYW4tPmFjdGl2ZV9udW0gPSAwOworCXBjaGFuLT5wZW5kaW5nX251bSA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmcGNoYW4tPmFjdGl2ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnBjaGFuLT5kb25lKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVsZWFzZSBhIERNQSBjaGFubmVsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYSBETUEgY2hhbm5lbCBmcm9tIGl0cyBjdXJyZW50IG93bmVyLgorICoKKyAqIFRoZSBjaGFubmVsIHdpbGwgTk9UIGJlIHJlbGVhc2VkIGlmIGl0J3MgbWFya2VkICJidXN5IiAoc2VlCisgKiBteHNfZG1hX2VuYWJsZSgpKS4KKyAqLworaW50IG14c19kbWFfcmVsZWFzZShpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpwY2hhbjsKKwlpbnQgcmV0OworCisJcmV0ID0gbXhzX2RtYV92YWxpZGF0ZV9jaGFuKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwY2hhbiA9IG14c19kbWFfY2hhbm5lbHMgKyBjaGFubmVsOworCisJaWYgKHBjaGFuLT5mbGFncyAmIE1YU19ETUFfRkxBR1NfQlVTWSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXBjaGFuLT5kZXYgPSAwOworCXBjaGFuLT5hY3RpdmVfbnVtID0gMDsKKwlwY2hhbi0+cGVuZGluZ19udW0gPSAwOworCXBjaGFuLT5mbGFncyAmPSB+TVhTX0RNQV9GTEFHU19BTExPQ0FURUQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFsbG9jYXRlIERNQSBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBteHNfZG1hX2Rlc2MgKm14c19kbWFfZGVzY19hbGxvYyh2b2lkKQoreworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKnBkZXNjOworCisJcGRlc2MgPSBtZW1hbGlnbihNWFNfRE1BX0FMSUdOTUVOVCwgc2l6ZW9mKHN0cnVjdCBteHNfZG1hX2Rlc2MpKTsKKworCWlmIChwZGVzYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChwZGVzYywgMCwgc2l6ZW9mKCpwZGVzYykpOworCXBkZXNjLT5hZGRyZXNzID0gKGRtYV9hZGRyX3QpcGRlc2M7CisKKwlyZXR1cm4gcGRlc2M7Cit9OworCisvKgorICogRnJlZSBETUEgZGVzY3JpcHRvcgorICovCit2b2lkIG14c19kbWFfZGVzY19mcmVlKHN0cnVjdCBteHNfZG1hX2Rlc2MgKnBkZXNjKQoreworCWlmIChwZGVzYyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmcmVlKHBkZXNjKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgY29tbWFuZCB3aXRoaW4gYSBkZXNjcmlwdG9yLgorICovCit1bnNpZ25lZCBpbnQgbXhzX2RtYV9jbWRfYWRkcmVzcyhzdHJ1Y3QgbXhzX2RtYV9kZXNjICpkZXNjKQoreworCXJldHVybiBkZXNjLT5hZGRyZXNzICsgb2Zmc2V0b2Yoc3RydWN0IG14c19kbWFfZGVzYywgY21kKTsKK30KKworLyoKKyAqIENoZWNrIGlmIGRlc2NyaXB0b3IgaXMgb24gYSBjaGFubmVsJ3MgYWN0aXZlIGxpc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGF0ZSBvZiBhIGRlc2NyaXB0b3IncyAicmVhZHkiIGZsYWcuIFRoaXMgZmxhZyBpcworICogdXN1YWxseSBzZXQgb25seSBpZiB0aGUgZGVzY3JpcHRvciBhcHBlYXJzIG9uIGEgY2hhbm5lbCdzIGFjdGl2ZSBsaXN0LiBUaGUKKyAqIGRlc2NyaXB0b3IgbWF5IG9yIG1heSBub3QgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBoYXJkd2FyZS4KKyAqCisgKiBUaGUgInJlYWR5IiBmbGFnIGlzIHNldCB3aGVuIHRoZSBkZXNjcmlwdG9yIGlzIHN1Ym1pdHRlZCB0byBhIGNoYW5uZWwgYnkgYQorICogY2FsbCB0byBteHNfZG1hX2FwcGVuZCgpIG9yIG14c19kbWFfYXBwZW5kX2xpc3QoKS4gVGhlICJyZWFkeSIgZmxhZyBpcworICogY2xlYXJlZCB3aGVuIGEgcHJvY2Vzc2VkIGRlc2NyaXB0b3IgaXMgbW92ZWQgb2ZmIHRoZSBhY3RpdmUgbGlzdCBieSBhIGNhbGwKKyAqIHRvIG14c19kbWFfZmluaXNoKCkuIFRoZSAicmVhZHkiIGZsYWcgaXMgTk9UIGNsZWFyZWQgaWYgdGhlIGRlc2NyaXB0b3IgaXMKKyAqIGFib3J0ZWQgYnkgYSBjYWxsIHRvIG14c19kbWFfZGlzYWJsZSgpLgorICovCitpbnQgbXhzX2RtYV9kZXNjX3BlbmRpbmcoc3RydWN0IG14c19kbWFfZGVzYyAqcGRlc2MpCit7CisJcmV0dXJuIHBkZXNjLT5mbGFncyAmIE1YU19ETUFfREVTQ19SRUFEWTsKK30KKworLyoKKyAqIEFkZCBhIERNQSBkZXNjcmlwdG9yIHRvIGEgY2hhbm5lbC4KKyAqCisgKiBJZiB0aGUgZGVzY3JpcHRvciBsaXN0IGZvciB0aGlzIGNoYW5uZWwgaXMgbm90IGVtcHR5LCB0aGlzIGZ1bmN0aW9uIHNldHMgdGhlCisgKiBDSEFJTiBiaXQgYW5kIHRoZSBORVhUQ01EX0FERFIgZmllbGRzIGluIHRoZSBsYXN0IGRlc2NyaXB0b3IncyBETUEgY29tbWFuZCBzbworICogaXQgd2lsbCBjaGFpbiB0byB0aGUgbmV3IGRlc2NyaXB0b3IncyBjb21tYW5kLgorICoKKyAqIFRoZW4sIHRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIG5ldyBkZXNjcmlwdG9yIGFzICJyZWFkeSwiIGFkZHMgaXQgdG8gdGhlIGVuZAorICogb2YgdGhlIGFjdGl2ZSBkZXNjcmlwdG9yIGxpc3QsIGFuZCBpbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBwZW5kaW5nCisgKiBkZXNjcmlwdG9ycy4KKyAqCisgKiBUaGUgTVhTIHBsYXRmb3JtIERNQSBzb2Z0d2FyZSBpbXBvc2VzIHNvbWUgcnVsZXMgb24gRE1BIGNvbW1hbmRzIHRvIG1haW50YWluCisgKiBpbXBvcnRhbnQgaW52YXJpYW50cy4gVGhlc2UgcnVsZXMgYXJlIE5PVCBjaGVja2VkLCBidXQgdGhleSBtdXN0IGJlIGNhcmVmdWxseQorICogYXBwbGllZCBieSBzb2Z0d2FyZSB0aGF0IHVzZXMgTVhTIERNQSBjaGFubmVscy4KKyAqCisgKiBJbnZhcmlhbnQ6CisgKiAgICAgVGhlIERNQSBjaGFubmVsJ3MgaGFyZHdhcmUgc2VtYXBob3JlIG11c3QgcmVmbGVjdCB0aGUgbnVtYmVyIG9mIERNQQorICogICAgIGNvbW1hbmRzIHRoZSBoYXJkd2FyZSB3aWxsIHByb2Nlc3MsIGJ1dCBoYXMgbm90IHlldCBmaW5pc2hlZC4KKyAqCisgKiBFeHBsYW5hdGlvbjoKKyAqICAgICBBIERNQSBjaGFubmVsIGJlZ2lucyBwcm9jZXNzaW5nIGNvbW1hbmRzIHdoZW4gaXRzIGhhcmR3YXJlIHNlbWFwaG9yZSBpcworICogICAgIHdyaXR0ZW4gd2l0aCBhIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgaXQgc3RvcHMgcHJvY2Vzc2luZyBjb21tYW5kcworICogICAgIHdoZW4gdGhlIHNlbWFwaG9yZSByZXR1cm5zIHRvIHplcm8uCisgKgorICogICAgIFdoZW4gYSBjaGFubmVsIGZpbmlzaGVzIGEgRE1BIGNvbW1hbmQsIGl0IHdpbGwgZGVjcmVtZW50IGl0cyBzZW1hcGhvcmUgaWYKKyAqICAgICB0aGUgREVDUkVNRU5UX1NFTUFQSE9SRSBiaXQgaXMgc2V0IGluIHRoYXQgY29tbWFuZCdzIGZsYWdzIGJpdHMuCisgKgorICogICAgIEluIHByaW5jaXBsZSwgaXQncyBub3QgbmVjZXNzYXJ5IGZvciB0aGUgREVDUkVNRU5UX1NFTUFQSE9SRSB0byBiZSBzZXQsCisgKiAgICAgdW5sZXNzIGl0IHN1aXRzIHRoZSBwdXJwb3NlcyBvZiB0aGUgc29mdHdhcmUuIEZvciBleGFtcGxlLCBvbmUgY291bGQKKyAqICAgICBjb25zdHJ1Y3QgYSBzZXJpZXMgb2YgZml2ZSBETUEgY29tbWFuZHMsIHdpdGggdGhlIERFQ1JFTUVOVF9TRU1BUEhPUkUKKyAqICAgICBiaXQgc2V0IG9ubHkgaW4gdGhlIGxhc3Qgb25lLiBUaGVuLCBzZXR0aW5nIHRoZSBETUEgY2hhbm5lbCdzIGhhcmR3YXJlCisgKiAgICAgc2VtYXBob3JlIHRvIG9uZSB3b3VsZCBjYXVzZSB0aGUgZW50aXJlIHNlcmllcyBvZiBmaXZlIGNvbW1hbmRzIHRvIGJlCisgKiAgICAgcHJvY2Vzc2VkLiBIb3dldmVyLCB0aGlzIGV4YW1wbGUgd291bGQgdmlvbGF0ZSB0aGUgaW52YXJpYW50IGdpdmVuIGFib3ZlLgorICoKKyAqIFJ1bGU6CisgKiAgICBBTEwgRE1BIGNvbW1hbmRzIE1VU1QgaGF2ZSB0aGUgREVDUkVNRU5UX1NFTUFQSE9SRSBiaXQgc2V0IHNvIHRoYXQgdGhlIERNQQorICogICAgY2hhbm5lbCdzIGhhcmR3YXJlIHNlbWFwaG9yZSB3aWxsIGJlIGRlY3JlbWVudGVkIEVWRVJZIHRpbWUgYSBjb21tYW5kIGlzCisgKiAgICBwcm9jZXNzZWQuCisgKi8KK2ludCBteHNfZG1hX2Rlc2NfYXBwZW5kKGludCBjaGFubmVsLCBzdHJ1Y3QgbXhzX2RtYV9kZXNjICpwZGVzYykKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9jaGFuICpwY2hhbjsKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpsYXN0OworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBjaGFuID0gbXhzX2RtYV9jaGFubmVscyArIGNoYW5uZWw7CisKKwlwZGVzYy0+Y21kLm5leHQgPSBteHNfZG1hX2NtZF9hZGRyZXNzKHBkZXNjKTsKKwlwZGVzYy0+ZmxhZ3MgfD0gTVhTX0RNQV9ERVNDX0ZJUlNUIHwgTVhTX0RNQV9ERVNDX0xBU1Q7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnBjaGFuLT5hY3RpdmUpKSB7CisJCWxhc3QgPSBsaXN0X2VudHJ5KHBjaGFuLT5hY3RpdmUucHJldiwgc3RydWN0IG14c19kbWFfZGVzYywKKwkJCQkJbm9kZSk7CisKKwkJcGRlc2MtPmZsYWdzICY9IH5NWFNfRE1BX0RFU0NfRklSU1Q7CisJCWxhc3QtPmZsYWdzICY9IH5NWFNfRE1BX0RFU0NfTEFTVDsKKworCQlsYXN0LT5jbWQubmV4dCA9IG14c19kbWFfY21kX2FkZHJlc3MocGRlc2MpOworCQlsYXN0LT5jbWQuZGF0YSB8PSBNWFNfRE1BX0RFU0NfQ0hBSU47CisJfQorCXBkZXNjLT5mbGFncyB8PSBNWFNfRE1BX0RFU0NfUkVBRFk7CisJaWYgKHBkZXNjLT5mbGFncyAmIE1YU19ETUFfREVTQ19GSVJTVCkKKwkJcGNoYW4tPnBlbmRpbmdfbnVtKys7CisJbGlzdF9hZGRfdGFpbCgmcGRlc2MtPm5vZGUsICZwY2hhbi0+YWN0aXZlKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBwcm9jZXNzZWQgRE1BIGRlc2NyaXB0b3JzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbW92ZXMgYWxsIHRoZSBkZXNjcmlwdG9ycyBmcm9tIHRoZSBETUEgY2hhbm5lbCdzICJkb25lIiBsaXN0IHRvCisgKiB0aGUgaGVhZCBvZiB0aGUgZ2l2ZW4gbGlzdC4KKyAqLworaW50IG14c19kbWFfZ2V0X2ZpbmlzaGVkKGludCBjaGFubmVsLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBteHNfZG1hX2NoYW4gKnBjaGFuOworCWludCByZXQ7CisKKwlyZXQgPSBteHNfZG1hX3ZhbGlkYXRlX2NoYW4oY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChoZWFkID09IE5VTEwpCisJCXJldHVybiAwOworCisJcGNoYW4gPSBteHNfZG1hX2NoYW5uZWxzICsgY2hhbm5lbDsKKworCWxpc3Rfc3BsaWNlKCZwY2hhbi0+ZG9uZSwgaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsZWFuIHVwIHByb2Nlc3NlZCBETUEgZGVzY3JpcHRvcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHByb2Nlc3NlZCBETUEgZGVzY3JpcHRvcnMgZnJvbSB0aGUgImFjdGl2ZSIgbGlzdC4gUGFzcworICogaW4gYSBub24tTlVMTCBsaXN0IGhlYWQgdG8gZ2V0IHRoZSBkZXNjcmlwdG9ycyBtb3ZlZCB0byB5b3VyIGxpc3QuIFBhc3MgTlVMTAorICogdG8gZ2V0IHRoZSBkZXNjcmlwdG9ycyBtb3ZlZCB0byB0aGUgY2hhbm5lbCdzICJkb25lIiBsaXN0LiBEZXNjcmlwdG9ycyBvbgorICogdGhlICJkb25lIiBsaXN0IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBteHNfZG1hX2dldF9maW5pc2hlZCgpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIERNQSBjaGFubmVsIGFzICJub3QgYnVzeSIgaWYgbm8gdW5wcm9jZXNzZWQKKyAqIGRlc2NyaXB0b3JzIHJlbWFpbiBvbiB0aGUgImFjdGl2ZSIgbGlzdC4KKyAqLworaW50IG14c19kbWFfZmluaXNoKGludCBjaGFubmVsLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWludCBzZW07CisJc3RydWN0IG14c19kbWFfY2hhbiAqcGNoYW47CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnE7CisJc3RydWN0IG14c19kbWFfZGVzYyAqcGRlc2M7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFubmVsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGNoYW4gPSBteHNfZG1hX2NoYW5uZWxzICsgY2hhbm5lbDsKKworCXNlbSA9IG14c19kbWFfcmVhZF9zZW1hcGhvcmUoY2hhbm5lbCk7CisJaWYgKHNlbSA8IDApCisJCXJldHVybiBzZW07CisKKwlpZiAoc2VtID09IHBjaGFuLT5hY3RpdmVfbnVtKQorCQlyZXR1cm4gMDsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmcGNoYW4tPmFjdGl2ZSkgeworCQlpZiAoKHBjaGFuLT5hY3RpdmVfbnVtKSA8PSBzZW0pCisJCQlicmVhazsKKworCQlwZGVzYyA9IGxpc3RfZW50cnkocCwgc3RydWN0IG14c19kbWFfZGVzYywgbm9kZSk7CisJCXBkZXNjLT5mbGFncyAmPSB+TVhTX0RNQV9ERVNDX1JFQURZOworCisJCWlmIChoZWFkKQorCQkJbGlzdF9tb3ZlX3RhaWwocCwgaGVhZCk7CisJCWVsc2UKKwkJCWxpc3RfbW92ZV90YWlsKHAsICZwY2hhbi0+ZG9uZSk7CisKKwkJaWYgKHBkZXNjLT5mbGFncyAmIE1YU19ETUFfREVTQ19MQVNUKQorCQkJcGNoYW4tPmFjdGl2ZV9udW0tLTsKKwl9CisKKwlpZiAoc2VtID09IDApCisJCXBjaGFuLT5mbGFncyAmPSB+TVhTX0RNQV9GTEFHU19CVVNZOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXYWl0IGZvciBETUEgY2hhbm5lbCB0byBjb21wbGV0ZQorICovCitpbnQgbXhzX2RtYV93YWl0X2NvbXBsZXRlKHVpbnQzMl90IHRpbWVvdXQsIHVuc2lnbmVkIGludCBjaGFuKQoreworCXN0cnVjdCBteDI4X2FwYmhfcmVncyAqYXBiaF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2FwYmhfcmVncyAqKU1YU19BUEJIX0JBU0U7CisJaW50IHJldDsKKworCXJldCA9IG14c19kbWFfdmFsaWRhdGVfY2hhbihjaGFuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG14Mjhfd2FpdF9tYXNrX3NldCgmYXBiaF9yZWdzLT5od19hcGJoX2N0cmwxX3JlZywKKwkJCQkxIDw8IGNoYW4sIHRpbWVvdXQpKSB7CisJCXJldCA9IC1FVElNRURPVVQ7CisJCW14c19kbWFfcmVzZXQoY2hhbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFeGVjdXRlIHRoZSBETUEgY2hhbm5lbAorICovCitpbnQgbXhzX2RtYV9nbyhpbnQgY2hhbikKK3sKKwl1aW50MzJfdCB0aW1lb3V0ID0gMTAwMDA7CisJaW50IHJldDsKKworCUxJU1RfSEVBRCh0bXBfZGVzY19saXN0KTsKKworCW14c19kbWFfZW5hYmxlX2lycShjaGFuLCAxKTsKKwlteHNfZG1hX2VuYWJsZShjaGFuKTsKKworCS8qIFdhaXQgZm9yIERNQSB0byBmaW5pc2guICovCisJcmV0ID0gbXhzX2RtYV93YWl0X2NvbXBsZXRlKHRpbWVvdXQsIGNoYW4pOworCisJLyogQ2xlYXIgb3V0IHRoZSBkZXNjcmlwdG9ycyB3ZSBqdXN0IHJhbi4gKi8KKwlteHNfZG1hX2ZpbmlzaChjaGFuLCAmdG1wX2Rlc2NfbGlzdCk7CisKKwkvKiBTaHV0IHRoZSBETUEgY2hhbm5lbCBkb3duLiAqLworCW14c19kbWFfYWNrX2lycShjaGFuKTsKKwlteHNfZG1hX3Jlc2V0KGNoYW4pOworCW14c19kbWFfZW5hYmxlX2lycShjaGFuLCAwKTsKKwlteHNfZG1hX2Rpc2FibGUoY2hhbik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgRE1BIGhhcmR3YXJlCisgKi8KK2ludCBteHNfZG1hX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKmFwYmhfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9hcGJoX3JlZ3MgKilNWFNfQVBCSF9CQVNFOworCXN0cnVjdCBteHNfZG1hX2NoYW4gKnBjaGFuOworCWludCByZXQsIGNoYW5uZWw7CisKKwlteDI4X3Jlc2V0X2Jsb2NrKCZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDBfcmVnKTsKKworI2lmZGVmIENPTkZJR19BUEJIX0RNQV9CVVJTVDgKKwl3cml0ZWwoQVBCSF9DVFJMMF9BSEJfQlVSU1Q4X0VOLAorCQkmYXBiaF9yZWdzLT5od19hcGJoX2N0cmwwX3NldCk7CisjZWxzZQorCXdyaXRlbChBUEJIX0NUUkwwX0FIQl9CVVJTVDhfRU4sCisJCSZhcGJoX3JlZ3MtPmh3X2FwYmhfY3RybDBfY2xyKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FQQkhfRE1BX0JVUlNUCisJd3JpdGVsKEFQQkhfQ1RSTDBfQVBCX0JVUlNUX0VOLAorCQkmYXBiaF9yZWdzLT5od19hcGJoX2N0cmwwX3NldCk7CisjZWxzZQorCXdyaXRlbChBUEJIX0NUUkwwX0FQQl9CVVJTVF9FTiwKKwkJJmFwYmhfcmVncy0+aHdfYXBiaF9jdHJsMF9jbHIpOworI2VuZGlmCisKKwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgTVhTX01BWF9ETUFfQ0hBTk5FTFM7IGNoYW5uZWwrKykgeworCQlwY2hhbiA9IG14c19kbWFfY2hhbm5lbHMgKyBjaGFubmVsOworCQlwY2hhbi0+ZmxhZ3MgPSBNWFNfRE1BX0ZMQUdTX1ZBTElEOworCisJCXJldCA9IG14c19kbWFfcmVxdWVzdChjaGFubmVsKTsKKworCQlpZiAocmV0KSB7CisJCQlwcmludGYoIk1YUyBETUE6IENhbid0IGFjcXVpcmUgRE1BIGNoYW5uZWwgJWlcbiIsCisJCQkJY2hhbm5lbCk7CisKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJbXhzX2RtYV9yZXNldChjaGFubmVsKTsKKwkJbXhzX2RtYV9hY2tfaXJxKGNoYW5uZWwpOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0tY2hhbm5lbCA+PSAwKQorCQlteHNfZG1hX3JlbGVhc2UoY2hhbm5lbCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZnBnYS9pdm1fY29yZS5jIGIvZHJpdmVycy9mcGdhL2l2bV9jb3JlLmMKaW5kZXggMmI1YTQ4NS4uYjVhNDdkMSAxMDA3NTUKLS0tIGEvZHJpdmVycy9mcGdhL2l2bV9jb3JlLmMKKysrIGIvZHJpdmVycy9mcGdhL2l2bV9jb3JlLmMKQEAgLTIxMDIsNyArMjEwMiw2IEBACiAJdW5zaWduZWQgY2hhciB1Y1N0YXRlICAgICAgICAgICAgID0gMDsKIAl1bnNpZ25lZCBzaG9ydCB1c0RlbGF5ICAgICAgICAgICAgPSAwOwogCXVuc2lnbmVkIHNob3J0IHVzVG9nZ2xlICAgICAgICAgICA9IDA7Ci0JdW5zaWduZWQgY2hhciB1c0J5dGUgICAgICAgICAgICAgID0gMDsKIAogCWdfdXNJbnRlbEJ1ZmZlclNpemUgPSAodW5zaWduZWQgc2hvcnQpaXNwVk1EYXRhU2l6ZSgpOwogCkBAIC0yMTcxLDcgKzIxNzAsNiBAQAogCQl1Y1N0YXRlICAgICAgICAgICAgPSAwOwogCQl1c0RlbGF5ICAgICAgICAgICAgPSAwOwogCQl1c1RvZ2dsZSAgICAgICAgICAgPSAwOwotCQl1c0J5dGUgICAgICAgICAgICAgPSAwOwogCQl1c0NvbnRpbnVlCQkgICA9IDE7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZSBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQppbmRleCBmNTA1ODEzLi5lMjJjMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCkBAIC0zMCwxMSArMzAsMTMgQEAKIENPQkpTLSQoQ09ORklHX01BUlZFTExfR1BJTykJKz0gbXZncGlvLm8KIENPQkpTLSQoQ09ORklHX01BUlZFTExfTUZQKQkrPSBtdm1mcC5vCiBDT0JKUy0kKENPTkZJR19NWENfR1BJTykJKz0gbXhjX2dwaW8ubworQ09CSlMtJChDT05GSUdfTVhTX0dQSU8pCSs9IG14c19ncGlvLm8KIENPQkpTLSQoQ09ORklHX1BDQTk1M1gpCQkrPSBwY2E5NTN4Lm8KIENPQkpTLSQoQ09ORklHX1BDQTk2OTgpCQkrPSBwY2E5Njk4Lm8KIENPQkpTLSQoQ09ORklHX1M1UCkJCSs9IHM1cF9ncGlvLm8KIENPQkpTLSQoQ09ORklHX1RFR1JBMl9HUElPKQkrPSB0ZWdyYTJfZ3Bpby5vCiBDT0JKUy0kKENPTkZJR19EQThYWF9HUElPKQkrPSBkYTh4eF9ncGlvLm8KK0NPQkpTLSQoQ09ORklHX0FMVEVSQV9QSU8pCSs9IGFsdGVyYV9waW8ubwogCiBDT0JKUwk6PSAkKENPQkpTLXkpCiBTUkNTIAk6PSAkKENPQkpTOi5vPS5jKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2FsdGVyYV9waW8uYyBiL2RyaXZlcnMvZ3Bpby9hbHRlcmFfcGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMzc2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9hbHRlcmFfcGlvLmMKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKiBEcml2ZXIgZm9yIEFsdGVyYSdzIFBJTyBpcCBjb3JlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExICBNaXNzaW5nIExpbmsgRWxlY3Ryb25pY3MKKyAqICAgICAgICAgICAgICAgICAgICAgSm9hY2hpbSBGb2Vyc3RlciA8am9hY2hpbUBtaXNzaW5nbGlua2VsZWN0cm9uaWNzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBUbyB1c2UgdGhpcyBkcml2ZXIsIGluIHlvdXIgYm9hcmQncyBjb25maWcuIGhlYWRlcjoKKyAqICNkZWZpbmUgQ09ORklHX0FMVEVSQV9QSU8KKyAqICNkZWZpbmUgQ09ORklHX1NZU19BTFRFUkFfUElPX05VTSA8bnVtYmVyLW9mLXBpby1jb3Jlcz4KKyAqICNkZWZpbmUgQ09ORklHX1NZU19BTFRFUkFfUElPX0dQSU9fTlVNIDx0b3RhbC1udW1iZXItb2YtZ3Bpb3M+CisgKiBBbmQgaW4geW91ciBib2FyZCdzIGVhcmx5IHNldHVwIHJvdXRpbmU6CisgKiBhbHRlcmFfcGlvX2luaXQoPGJhc2VhZGRyPiwgPHdpZHRoPiwgJ2knfCdvJ3wndCcsCisgKiAgICAgICAgICAgICAgICAgPHJlc2V0LXZhbHVlPiwgPG5lZy1tYXNrPiwgImxhYmVsIik7CisgKiAgLSAnaSd8J28nfCd0JzogUElPIGlzIGlucHV0LW9ubHkvb3V0cHV0LW9ubHkvdHJpLXN0YXRlCisgKiAgLSA8cmVzZXQtdmFsdWU+OiBmb3IgY29ycmVjdCBpbml0aWFsIHN0YXR1cyBkaXNwbGF5LCBvdXRwdXQtb25seQorICogIC0gPG5lZy1tYXNrPiBpcyBtZWFudCB0byBiZSB1c2VkIHRvIGluIGNhc2VzIG9mIGFjdGl2ZS1sb3cKKyAqICAgIEdQSU9zLCBzdWNoIGFzIExFRHMgYW5kIGJ1dHRvbnMgKG9uL3ByZXNzZWQgPT0gMCkuIEVhY2ggYml0CisgKiAgICB3aGljaCBpcyAxIGluIDxuZWctbWFzaz4gaW52ZXJ0cyB0aGUgY29ycmVzcG9uZGluZyBHUElPJ3MgdmFsdWUKKyAqICAgIGJlZm9yZSBzZXQvYWZ0ZXIgZ2V0LiBTbzogZ3Bpb19zZXRfdmFsdWUoZ3BpbywgMSkgPT4gTEVEIG9uIC4KKyAqCisgKiBEbyBOT1QgZGVmaW5lIENPTkZJR19TWVNfR1BJT19CQVNFICEKKyAqCisgKiBPcHRpb25hbGx5LCBpbiB5b3VyIGJvYXJkJ3MgY29uZmlnLiBoZWFkZXI6CisgKiAtIFRvIGZvcmNlIGEgR1BJTyBudW1iZXJpbmcgc2NoZW1lIGxpa2UgaW4gTGludXggLi4uCisgKiAjZGVmaW5lIENPTkZJR19HUElPX0RPV05UT19OVU1CRVJJTkcKKyAqIC4uLiBzdGFydGluZyB3aXRoIDI1NSAoZGVmYXVsdCkKKyAqICNkZWZpbmUgQ09ORklHX0dQSU9fRE9XTlRPX01BWCAyNTUKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisKKyNpZmRlZiBDT05GSUdfR1BJT19ET1dOVE9fTlVNQkVSSU5HCisjaWZuZGVmIENPTkZJR19HUElPX0RPV05UT19NQVgKKyNkZWZpbmUgQ09ORklHX0dQSU9fRE9XTlRPX01BWCAyNTUKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgQUxURVJBX1BJT19EQVRBCQkweDAKKyNkZWZpbmUgQUxURVJBX1BJT19ESVIJCTB4NAorCisjZGVmaW5lIEdQSU9fTEFCRUxfU0laRQkJOQorCisKK3N0YXRpYyBzdHJ1Y3QgYWx0ZXJhX3BpbyB7CisJdTMyIGJhc2U7CisJdTggd2lkdGg7CisJY2hhciBpb3Q7CisJdTMyIG5lZ21hc2s7CisJdTMyIHNoX2RhdGE7CisJdTMyIHNoX2RpcjsKKwlpbnQgZ2lkeDsKKwljaGFyIGxhYmVsW0dQSU9fTEFCRUxfU0laRV07Cit9IHBpb3NbQ09ORklHX1NZU19BTFRFUkFfUElPX05VTV07CisKK3N0YXRpYyBpbnQgcGlvX251bTsKKworc3RhdGljIHN0cnVjdCBhbHRlcmFfcGlvX2dwaW8geworCXVuc2lnbmVkIG51bTsKKwlzdHJ1Y3QgYWx0ZXJhX3BpbyAqcGlvOworCWNoYXIgcmVxbGFiZWxbR1BJT19MQUJFTF9TSVpFXTsKK30gZ3Bpb3NbQ09ORklHX1NZU19BTFRFUkFfUElPX0dQSU9fTlVNXTsKKworc3RhdGljIGludCBwaW9fZ3Bpb19udW07CisKKworc3RhdGljIGludCBhbHRlcmFfcGlvX2dpZHgodW5zaWduZWQgZ3BpbykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwaW9fZ3Bpb19udW07ICsraSkgeworCQlpZiAoZ3BpbyA9PSBncGlvc1tpXS5udW0pCisJCQlicmVhazsKKwl9CisJaWYgKGkgPj0gcGlvX2dwaW9fbnVtKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWx0ZXJhX3BpbyAqYWx0ZXJhX3Bpb19nZXRfYW5kX21hc2sodW5zaWduZWQgZ3BpbywgdTMyICptYXNrKQoreworCWludCBnaWR4ID0gYWx0ZXJhX3Bpb19naWR4KGdwaW8pOworCWlmIChnaWR4IDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKG1hc2spCisJCSptYXNrID0gMSA8PCAoZ2lkeCAtIGdwaW9zW2dpZHhdLnBpby0+Z2lkeCk7CisJcmV0dXJuIGdwaW9zW2dpZHhdLnBpbzsKK30KKworI2RlZmluZSBhbHRlcmFfcGlvX3VzZV9naWR4KF9naWR4LCBfcmVxbGFiZWwpIFwKKwl7IHN0cm5jcHkoZ3Bpb3NbX2dpZHhdLnJlcWxhYmVsLCBfcmVxbGFiZWwsIEdQSU9fTEFCRUxfU0laRSk7IH0KKyNkZWZpbmUgYWx0ZXJhX3Bpb191bnVzZV9naWR4KF9naWR4KSB7IGdwaW9zW19naWR4XS5yZXFsYWJlbFswXSA9ICdcMCc7IH0KKyNkZWZpbmUgYWx0ZXJhX3Bpb19pc19naWR4X3VzZWQoX2dpZHgpIChncGlvc1tfZ2lkeF0ucmVxbGFiZWxbMF0gIT0gJ1wwJykKKworc3RhdGljIGludCBhbHRlcmFfcGlvX2dwaW9faW5pdChzdHJ1Y3QgYWx0ZXJhX3BpbyAqcGlvLCB1OCB3aWR0aCkKK3sKKwl1OCBnaWR4ID0gcGlvX2dwaW9fbnVtOworCWludCBpOworCisJaWYgKCF3aWR0aCkKKwkJcmV0dXJuIC0xOworCWlmICgocGlvX2dwaW9fbnVtICsgd2lkdGgpID4gQ09ORklHX1NZU19BTFRFUkFfUElPX0dQSU9fTlVNKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGg7ICsraSkgeworI2lmZGVmIENPTkZJR19HUElPX0RPV05UT19OVU1CRVJJTkcKKwkJZ3Bpb3NbcGlvX2dwaW9fbnVtICsgaV0ubnVtID0gXAorCQkJQ09ORklHX0dQSU9fRE9XTlRPX01BWCArIDEgLSBnaWR4IC0gd2lkdGggKyBpOworI2Vsc2UKKwkJZ3Bpb3NbcGlvX2dwaW9fbnVtICsgaV0ubnVtID0gcGlvX2dwaW9fbnVtICsgaTsKKyNlbmRpZgorCQlncGlvc1twaW9fZ3Bpb19udW0gKyBpXS5waW8gPSBwaW87CisJCWFsdGVyYV9waW9fdW51c2VfZ2lkeChwaW9fZ3Bpb19udW0gKyBpKTsKKwl9CisJcGlvX2dwaW9fbnVtICs9IHdpZHRoOworCXJldHVybiBnaWR4OworfQorCitpbnQgYWx0ZXJhX3Bpb19pbml0KHUzMiBiYXNlLCB1OCB3aWR0aCwgY2hhciBpb3QsIHUzMiByc3R2YWwsIHUzMiBuZWdtYXNrLAorCQkgY29uc3QgY2hhciAqbGFiZWwpCit7CisJaWYgKHBpb19udW0gPj0gQ09ORklHX1NZU19BTFRFUkFfUElPX05VTSkKKwkJcmV0dXJuIC0xOworCisJcGlvc1twaW9fbnVtXS5iYXNlID0gYmFzZTsKKwlwaW9zW3Bpb19udW1dLndpZHRoID0gd2lkdGg7CisJcGlvc1twaW9fbnVtXS5pb3QgPSBpb3Q7CisJc3dpdGNoIChpb3QpIHsKKwljYXNlICdpJzoKKwkJLyogaW5wdXQgb25seSAqLworCQlwaW9zW3Bpb19udW1dLnNoX2RpciA9IDA7CisJCXBpb3NbcGlvX251bV0uc2hfZGF0YSA9IHJlYWRsKGJhc2UgKyBBTFRFUkFfUElPX0RBVEEpOworCQlicmVhazsKKwljYXNlICdvJzoKKwkJLyogb3V0cHV0IG9ubHkgKi8KKwkJcGlvc1twaW9fbnVtXS5zaF9kaXIgPSAweGZmZmZmZmZmICYgKCgxIDw8IHdpZHRoKSAtIDEpOworCQlwaW9zW3Bpb19udW1dLnNoX2RhdGEgPSByc3R2YWw7CisJCWJyZWFrOworCWNhc2UgJ3QnOgorCQkvKiBiaWRpciwgdHJpLXN0YXRlICovCisJCXBpb3NbcGlvX251bV0uc2hfZGlyID0gcmVhZGwoYmFzZSArIEFMVEVSQV9QSU9fRElSKTsKKwkJcGlvc1twaW9fbnVtXS5zaF9kYXRhID0gcmVhZGwoYmFzZSArIEFMVEVSQV9QSU9fREFUQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJcGlvc1twaW9fbnVtXS5uZWdtYXNrID0gbmVnbWFzayAmICgoMSA8PCB3aWR0aCkgLSAxKTsKKwlwaW9zW3Bpb19udW1dLmdpZHggPSBhbHRlcmFfcGlvX2dwaW9faW5pdCgmcGlvc1twaW9fbnVtXSwgd2lkdGgpOworCWlmIChwaW9zW3Bpb19udW1dLmdpZHggPCAwKQorCQlyZXR1cm4gLTE7CisJc3RybmNweShwaW9zW3Bpb19udW1dLmxhYmVsLCBsYWJlbCwgR1BJT19MQUJFTF9TSVpFKTsKKwlyZXR1cm4gcGlvX251bSsrOworfQorCit2b2lkIGFsdGVyYV9waW9faW5mbyh2b2lkKQoreworCWludCBpOworCWludCBqOworCWludCBnaWR4OworCXUzMiBtYXNrOworCisJZm9yIChpID0gMDsgaSA8IHBpb19udW07ICsraSkgeworCQlwcmludGYoIkFsdGVyYSBQSU8gJSAyZCwgQDB4JTA4eCwgIgorCQkJIndpZHRoOiAldSwgbGFiZWw6ICVzXG4iLAorCQkgICAgICAgaSwgcGlvc1tpXS5iYXNlLCBwaW9zW2ldLndpZHRoLCBwaW9zW2ldLmxhYmVsKTsKKwkJZ2lkeCA9IHBpb3NbaV0uZ2lkeDsKKwkJZm9yIChqID0gZ2lkeDsgaiA8IChnaWR4ICsgcGlvc1tpXS53aWR0aCk7ICsraikgeworCQkJbWFzayA9IDEgPDwgKGogLSBnaWR4KTsKKwkJCXByaW50ZigiXHRHUElPICUgNGQ6ICVzICVzIFslY10gJXNcbiIsCisJCQkJZ3Bpb3Nbal0ubnVtLAorCQkJCWdwaW9zW2pdLnBpby0+c2hfZGlyICYgbWFzayA/ICJvdXQiIDogIiBpbiIsCisJCQkJZ3Bpb19nZXRfdmFsdWUoZ3Bpb3Nbal0ubnVtKSA/ICJzZXQiIDogImNsciIsCisJCQkJYWx0ZXJhX3Bpb19pc19naWR4X3VzZWQoaikgPyAneCcgOiAnICcsCisJCQkJZ3Bpb3Nbal0ucmVxbGFiZWwpOworCQl9CisJfQorfQorCisKK2ludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCit7CisJaW50IGdpZHggPSBhbHRlcmFfcGlvX2dpZHgoZ3Bpbyk7CisJaWYgKGdpZHggPCAwKQorCQlyZXR1cm4gZ2lkeDsKKwlpZiAoYWx0ZXJhX3Bpb19pc19naWR4X3VzZWQoZ2lkeCkpCisJCXJldHVybiAtMTsKKworCWFsdGVyYV9waW9fdXNlX2dpZHgoZ2lkeCwgbGFiZWwpOworCXJldHVybiAwOworfQorCitpbnQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCit7CisJaW50IGdpZHggPSBhbHRlcmFfcGlvX2dpZHgoZ3Bpbyk7CisJaWYgKGdpZHggPCAwKQorCQlyZXR1cm4gZ2lkeDsKKwlpZiAoIWFsdGVyYV9waW9faXNfZ2lkeF91c2VkKGdpZHgpKQorCQlyZXR1cm4gLTE7CisKKwlhbHRlcmFfcGlvX3VudXNlX2dpZHgoZ2lkeCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQoreworCXUzMiBtYXNrOworCXN0cnVjdCBhbHRlcmFfcGlvICpwaW87CisKKwlwaW8gPSBhbHRlcmFfcGlvX2dldF9hbmRfbWFzayhncGlvLCAmbWFzayk7CisJaWYgKCFwaW8pCisJCXJldHVybiAtMTsKKwlpZiAocGlvLT5pb3QgPT0gJ28nKQorCQlyZXR1cm4gLTE7CisKKwl3cml0ZWwocGlvLT5zaF9kaXIgJj0gfm1hc2ssIHBpby0+YmFzZSArIEFMVEVSQV9QSU9fRElSKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJdTMyIG1hc2s7CisJc3RydWN0IGFsdGVyYV9waW8gKnBpbzsKKworCXBpbyA9IGFsdGVyYV9waW9fZ2V0X2FuZF9tYXNrKGdwaW8sICZtYXNrKTsKKwlpZiAoIXBpbykKKwkJcmV0dXJuIC0xOworCWlmIChwaW8tPmlvdCA9PSAnaScpCisJCXJldHVybiAtMTsKKworCXZhbHVlID0gKHBpby0+bmVnbWFzayAmIG1hc2spID8gIXZhbHVlIDogdmFsdWU7CisJaWYgKHZhbHVlKQorCQlwaW8tPnNoX2RhdGEgfD0gbWFzazsKKwllbHNlCisJCXBpby0+c2hfZGF0YSAmPSB+bWFzazsKKwl3cml0ZWwocGlvLT5zaF9kYXRhLCBwaW8tPmJhc2UgKyBBTFRFUkFfUElPX0RBVEEpOworCXdyaXRlbChwaW8tPnNoX2RpciB8PSBtYXNrLCBwaW8tPmJhc2UgKyBBTFRFUkFfUElPX0RJUik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQoreworCXUzMiBtYXNrOworCXN0cnVjdCBhbHRlcmFfcGlvICpwaW87CisJdTMyIHZhbDsKKworCXBpbyA9IGFsdGVyYV9waW9fZ2V0X2FuZF9tYXNrKGdwaW8sICZtYXNrKTsKKwlpZiAoIXBpbykKKwkJcmV0dXJuIC0xOworCisJaWYgKChwaW8tPnNoX2RpciAmIG1hc2spIHx8IChwaW8tPmlvdCA9PSAnbycpKQorCQl2YWwgPSBwaW8tPnNoX2RhdGEgJiBtYXNrOworCWVsc2UKKwkJdmFsID0gcmVhZGwocGlvLT5iYXNlICsgQUxURVJBX1BJT19EQVRBKSAmIG1hc2s7CisJcmV0dXJuIChwaW8tPm5lZ21hc2sgJiBtYXNrKSA/ICF2YWwgOiB2YWw7Cit9CisKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXUzMiBtYXNrOworCXN0cnVjdCBhbHRlcmFfcGlvICpwaW87CisKKwlwaW8gPSBhbHRlcmFfcGlvX2dldF9hbmRfbWFzayhncGlvLCAmbWFzayk7CisJaWYgKCFwaW8pCisJCXJldHVybjsKKwlpZiAocGlvLT5pb3QgPT0gJ2knKQorCQlyZXR1cm47CisKKwl2YWx1ZSA9IChwaW8tPm5lZ21hc2sgJiBtYXNrKSA/ICF2YWx1ZSA6IHZhbHVlOworCWlmICh2YWx1ZSkKKwkJcGlvLT5zaF9kYXRhIHw9IG1hc2s7CisJZWxzZQorCQlwaW8tPnNoX2RhdGEgJj0gfm1hc2s7CisJd3JpdGVsKHBpby0+c2hfZGF0YSwgcGlvLT5iYXNlICsgQUxURVJBX1BJT19EQVRBKTsKKwlyZXR1cm47Cit9CisKK2ludCBncGlvX2lzX3ZhbGlkKGludCBudW1iZXIpCit7CisJaW50IGdpZHggPSBhbHRlcmFfcGlvX2dpZHgobnVtYmVyKTsKKworCWlmIChnaWR4IDwgMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbXhzX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9teHNfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTk1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vbXhzX2dwaW8uYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggR1BJTyBjb250cm9sIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bmV0ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorCisjaWYJZGVmaW5lZChDT05GSUdfTVgyMykKKyNkZWZpbmUJUElOQ1RSTF9CQU5LUwkJMworI2RlZmluZQlQSU5DVFJMX0RPVVQobikJCSgweDA1MDAgKyAoKG4pICogMHgxMCkpCisjZGVmaW5lCVBJTkNUUkxfRElOKG4pCQkoMHgwNjAwICsgKChuKSAqIDB4MTApKQorI2RlZmluZQlQSU5DVFJMX0RPRShuKQkJKDB4MDcwMCArICgobikgKiAweDEwKSkKKyNkZWZpbmUJUElOQ1RSTF9QSU4ySVJRKG4pCSgweDA4MDAgKyAoKG4pICogMHgxMCkpCisjZGVmaW5lCVBJTkNUUkxfSVJRRU4obikJKDB4MDkwMCArICgobikgKiAweDEwKSkKKyNkZWZpbmUJUElOQ1RSTF9JUlFTVEFUKG4pCSgweDBjMDAgKyAoKG4pICogMHgxMCkpCisjZWxpZglkZWZpbmVkKENPTkZJR19NWDI4KQorI2RlZmluZQlQSU5DVFJMX0JBTktTCQk1CisjZGVmaW5lCVBJTkNUUkxfRE9VVChuKQkJKDB4MDcwMCArICgobikgKiAweDEwKSkKKyNkZWZpbmUJUElOQ1RSTF9ESU4obikJCSgweDA5MDAgKyAoKG4pICogMHgxMCkpCisjZGVmaW5lCVBJTkNUUkxfRE9FKG4pCQkoMHgwYjAwICsgKChuKSAqIDB4MTApKQorI2RlZmluZQlQSU5DVFJMX1BJTjJJUlEobikJKDB4MTAwMCArICgobikgKiAweDEwKSkKKyNkZWZpbmUJUElOQ1RSTF9JUlFFTihuKQkoMHgxMTAwICsgKChuKSAqIDB4MTApKQorI2RlZmluZQlQSU5DVFJMX0lSUVNUQVQobikJKDB4MTQwMCArICgobikgKiAweDEwKSkKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBzZWxlY3QgQ09ORklHX01YMjMgb3IgQ09ORklHX01YMjgiCisjZW5kaWYKKworI2RlZmluZSBHUElPX0lOVF9GQUxMX0VER0UJMHgwCisjZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgxCisjZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRQkweDIKKyNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJMHgzCisjZGVmaW5lIEdQSU9fSU5UX0xFVl9NQVNLCSgxIDw8IDApCisjZGVmaW5lIEdQSU9fSU5UX1BPTF9NQVNLCSgxIDw8IDEpCisKK3ZvaWQgbXhzX2dwaW9faW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBJTkNUUkxfQkFOS1M7IGkrKykgeworCQl3cml0ZWwoMCwgTVhTX1BJTkNUUkxfQkFTRSArIFBJTkNUUkxfUElOMklSUShpKSk7CisJCXdyaXRlbCgwLCBNWFNfUElOQ1RSTF9CQVNFICsgUElOQ1RSTF9JUlFFTihpKSk7CisJCS8qIFVzZSBTQ1QgYWRkcmVzcyBoZXJlIHRvIGNsZWFyIHRoZSBJUlFTVEFUIGJpdHMgKi8KKwkJd3JpdGVsKDB4ZmZmZmZmZmYsIE1YU19QSU5DVFJMX0JBU0UgKyBQSU5DVFJMX0lSUVNUQVQoaSkgKyA4KTsKKwl9Cit9CisKK2ludCBncGlvX2dldF92YWx1ZShpbnQgZ3ApCit7CisJdWludDMyX3QgYmFuayA9IFBBRF9CQU5LKGdwKTsKKwl1aW50MzJfdCBvZmZzZXQgPSBQSU5DVFJMX0RJTihiYW5rKTsKKwlzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqcmVnID0KKwkJKHN0cnVjdCBteDI4X3JlZ2lzdGVyICopKE1YU19QSU5DVFJMX0JBU0UgKyBvZmZzZXQpOworCisJcmV0dXJuIChyZWFkbCgmcmVnLT5yZWcpID4+IFBBRF9QSU4oZ3ApKSAmIDE7Cit9CisKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUoaW50IGdwLCBpbnQgdmFsdWUpCit7CisJdWludDMyX3QgYmFuayA9IFBBRF9CQU5LKGdwKTsKKwl1aW50MzJfdCBvZmZzZXQgPSBQSU5DVFJMX0RPVVQoYmFuayk7CisJc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZyA9CisJCShzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqKShNWFNfUElOQ1RSTF9CQVNFICsgb2Zmc2V0KTsKKworCWlmICh2YWx1ZSkKKwkJd3JpdGVsKDEgPDwgUEFEX1BJTihncCksICZyZWctPnJlZ19zZXQpOworCWVsc2UKKwkJd3JpdGVsKDEgPDwgUEFEX1BJTihncCksICZyZWctPnJlZ19jbHIpOworfQorCitpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQoaW50IGdwKQoreworCXVpbnQzMl90IGJhbmsgPSBQQURfQkFOSyhncCk7CisJdWludDMyX3Qgb2Zmc2V0ID0gUElOQ1RSTF9ET0UoYmFuayk7CisJc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZyA9CisJCShzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqKShNWFNfUElOQ1RSTF9CQVNFICsgb2Zmc2V0KTsKKworCXdyaXRlbCgxIDw8IFBBRF9QSU4oZ3ApLCAmcmVnLT5yZWdfY2xyKTsKKworCXJldHVybiAwOworfQorCitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGludCBncCwgaW50IHZhbHVlKQoreworCXVpbnQzMl90IGJhbmsgPSBQQURfQkFOSyhncCk7CisJdWludDMyX3Qgb2Zmc2V0ID0gUElOQ1RSTF9ET0UoYmFuayk7CisJc3RydWN0IG14MjhfcmVnaXN0ZXIgKnJlZyA9CisJCShzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqKShNWFNfUElOQ1RSTF9CQVNFICsgb2Zmc2V0KTsKKworCXdyaXRlbCgxIDw8IFBBRF9QSU4oZ3ApLCAmcmVnLT5yZWdfc2V0KTsKKworCWdwaW9fc2V0X3ZhbHVlKGdwLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdwaW9fcmVxdWVzdChpbnQgZ3AsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCWlmIChQQURfQkFOSyhncCkgPiBQSU5DVFJMX0JBTktTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCit2b2lkIGdwaW9fZnJlZShpbnQgZ3ApCit7Cit9CisKK3ZvaWQgZ3Bpb190b2dnbGVfdmFsdWUoaW50IGdwKQoreworCWdwaW9fc2V0X3ZhbHVlKGdwLCAhZ3Bpb19nZXRfdmFsdWUoZ3ApKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvTWFrZWZpbGUKaW5kZXggYTQ4MDQ3YS4uMmZiNTIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDcgQEAKIENPQkpTLSQoQ09ORklHX0kyQ19NVlRXU0kpICs9IG12dHdzaS5vCiBDT0JKUy0kKENPTkZJR19JMkNfTVYpICs9IG12X2kyYy5vCiBDT0JKUy0kKENPTkZJR19JMkNfTVhDKSArPSBteGNfaTJjLm8KK0NPQkpTLSQoQ09ORklHX0kyQ19NWFMpICs9IG14c19pMmMubwogQ09CSlMtJChDT05GSUdfRFJJVkVSX09NQVAxNTEwX0kyQykgKz0gb21hcDE1MTBfaTJjLm8KIENPQkpTLSQoQ09ORklHX0RSSVZFUl9PTUFQMjRYWF9JMkMpICs9IG9tYXAyNHh4X2kyYy5vCiBDT0JKUy0kKENPTkZJR19EUklWRVJfT01BUDM0WFhfSTJDKSArPSBvbWFwMjR4eF9pMmMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvZnNsX2kyYy5jIGIvZHJpdmVycy9pMmMvZnNsX2kyYy5jCmluZGV4IDI1OGJlMGEuLjViMDE3YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2ZzbF9pMmMuYworKysgYi9kcml2ZXJzL2kyYy9mc2xfaTJjLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogdm9pZAogaTJjX2luaXQoaW50IHNwZWVkLCBpbnQgc2xhdmVhZGQpCiB7Ci0Jc3RydWN0IGZzbF9pMmMgKmRldjsKKwljb25zdCBzdHJ1Y3QgZnNsX2kyYyAqZGV2OwogCXVuc2lnbmVkIGludCB0ZW1wOwogCWludCBidXNfbnVtLCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9teHNfaTJjLmMgYi9kcml2ZXJzL2kyYy9teHNfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmZWEzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTJjL214c19pMmMuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggSTJDIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFBhcnRseSBiYXNlZCBvbiBMaW51eCBrZXJuZWwgaTJjLW14cy5jIGRyaXZlcjoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBXb2xmcmFtIFNhbmcsIFBlbmd1dHJvbml4IGUuSy4KKyAqCisgKiBXaGljaCB3YXMgYmFzZWQgb24gYSAobm9uLXdvcmtpbmcpIGRyaXZlciB3aGljaCB3YXM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorCisjZGVmaW5lCU1YU19JMkNfTUFYX1RJTUVPVVQJMTAwMDAwMAorCit2b2lkIG14c19pMmNfcmVzZXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqaTJjX3JlZ3MgPSAoc3RydWN0IG14MjhfaTJjX3JlZ3MgKilNWFNfSTJDMF9CQVNFOworCWludCByZXQ7CisKKwlyZXQgPSBteDI4X3Jlc2V0X2Jsb2NrKCZpMmNfcmVncy0+aHdfaTJjX2N0cmwwX3JlZyk7CisJaWYgKHJldCkgeworCQlkZWJ1ZygiTVhTIEkyQzogQmxvY2sgcmVzZXQgdGltZW91dFxuIik7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZWwoSTJDX0NUUkwxX0RBVEFfRU5HSU5FX0NNUExUX0lSUSB8IEkyQ19DVFJMMV9OT19TTEFWRV9BQ0tfSVJRIHwKKwkJSTJDX0NUUkwxX0VBUkxZX1RFUk1fSVJRIHwgSTJDX0NUUkwxX01BU1RFUl9MT1NTX0lSUSB8CisJCUkyQ19DVFJMMV9TTEFWRV9TVE9QX0lSUSB8IEkyQ19DVFJMMV9TTEFWRV9JUlEsCisJCSZpMmNfcmVncy0+aHdfaTJjX2N0cmwxX2Nscik7CisKKwl3cml0ZWwoSTJDX1FVRVVFQ1RSTF9QSU9fUVVFVUVfTU9ERSwgJmkyY19yZWdzLT5od19pMmNfcXVldWVjdHJsX3NldCk7Cit9CisKK3ZvaWQgbXhzX2kyY19zZXR1cF9yZWFkKHVpbnQ4X3QgY2hpcCwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqaTJjX3JlZ3MgPSAoc3RydWN0IG14MjhfaTJjX3JlZ3MgKilNWFNfSTJDMF9CQVNFOworCisJd3JpdGVsKEkyQ19RVUVVRUNNRF9SRVRBSU5fQ0xPQ0sgfCBJMkNfUVVFVUVDTURfUFJFX1NFTkRfU1RBUlQgfAorCQlJMkNfUVVFVUVDTURfTUFTVEVSX01PREUgfCBJMkNfUVVFVUVDTURfRElSRUNUSU9OIHwKKwkJKDEgPDwgSTJDX1FVRVVFQ01EX1hGRVJfQ09VTlRfT0ZGU0VUKSwKKwkJJmkyY19yZWdzLT5od19pMmNfcXVldWVjbWQpOworCisJd3JpdGVsKChjaGlwIDw8IDEpIHwgMSwgJmkyY19yZWdzLT5od19pMmNfZGF0YSk7CisKKwl3cml0ZWwoSTJDX1FVRVVFQ01EX1NFTkRfTkFLX09OX0xBU1QgfCBJMkNfUVVFVUVDTURfTUFTVEVSX01PREUgfAorCQkobGVuIDw8IEkyQ19RVUVVRUNNRF9YRkVSX0NPVU5UX09GRlNFVCkgfAorCQlJMkNfUVVFVUVDTURfUE9TVF9TRU5EX1NUT1AsICZpMmNfcmVncy0+aHdfaTJjX3F1ZXVlY21kKTsKKworCXdyaXRlbChJMkNfUVVFVUVDVFJMX1FVRVVFX1JVTiwgJmkyY19yZWdzLT5od19pMmNfcXVldWVjdHJsX3NldCk7Cit9CisKK3ZvaWQgbXhzX2kyY193cml0ZSh1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLAorCQkJdWNoYXIgKmJ1ZiwgaW50IGJsZW4sIGludCBzdG9wKQoreworCXN0cnVjdCBteDI4X2kyY19yZWdzICppMmNfcmVncyA9IChzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqKU1YU19JMkMwX0JBU0U7CisJdWludDMyX3QgZGF0YTsKKwlpbnQgaSwgcmVtYWluLCBvZmY7CisKKwlpZiAoKGFsZW4gPiA0KSB8fCAoYWxlbiA9PSAwKSkgeworCQlkZWJ1ZygiTVhTIEkyQzogSW52YWxpZCBhZGRyZXNzIGxlbmd0aFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3RvcCkKKwkJc3RvcCA9IEkyQ19RVUVVRUNNRF9QT1NUX1NFTkRfU1RPUDsKKworCXdyaXRlbChJMkNfUVVFVUVDTURfUFJFX1NFTkRfU1RBUlQgfAorCQlJMkNfUVVFVUVDTURfTUFTVEVSX01PREUgfCBJMkNfUVVFVUVDTURfRElSRUNUSU9OIHwKKwkJKChibGVuICsgYWxlbiArIDEpIDw8IEkyQ19RVUVVRUNNRF9YRkVSX0NPVU5UX09GRlNFVCkgfCBzdG9wLAorCQkmaTJjX3JlZ3MtPmh3X2kyY19xdWV1ZWNtZCk7CisKKwlkYXRhID0gKGNoaXAgPDwgMSkgPDwgMjQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWxlbjsgaSsrKSB7CisJCWRhdGEgPj49IDg7CisJCWRhdGEgfD0gKChjaGFyICopJmFkZHIpW2ldIDw8IDI0OworCQlpZiAoKGkgJiAzKSA9PSAyKQorCQkJd3JpdGVsKGRhdGEsICZpMmNfcmVncy0+aHdfaTJjX2RhdGEpOworCX0KKworCW9mZiA9IGk7CisJZm9yICg7IGkgPCBvZmYgKyBibGVuOyBpKyspIHsKKwkJZGF0YSA+Pj0gODsKKwkJZGF0YSB8PSBidWZbaSAtIG9mZl0gPDwgMjQ7CisJCWlmICgoaSAmIDMpID09IDIpCisJCQl3cml0ZWwoZGF0YSwgJmkyY19yZWdzLT5od19pMmNfZGF0YSk7CisJfQorCisJcmVtYWluID0gMjQgLSAoKGkgJiAzKSAqIDgpOworCWlmIChyZW1haW4pCisJCXdyaXRlbChkYXRhID4+IHJlbWFpbiwgJmkyY19yZWdzLT5od19pMmNfZGF0YSk7CisKKwl3cml0ZWwoSTJDX1FVRVVFQ1RSTF9RVUVVRV9SVU4sICZpMmNfcmVncy0+aHdfaTJjX3F1ZXVlY3RybF9zZXQpOworfQorCitpbnQgbXhzX2kyY193YWl0X2Zvcl9hY2sodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqaTJjX3JlZ3MgPSAoc3RydWN0IG14MjhfaTJjX3JlZ3MgKilNWFNfSTJDMF9CQVNFOworCXVpbnQzMl90IHRtcDsKKwlpbnQgdGltZW91dCA9IE1YU19JMkNfTUFYX1RJTUVPVVQ7CisKKwlmb3IgKDs7KSB7CisJCXRtcCA9IHJlYWRsKCZpMmNfcmVncy0+aHdfaTJjX2N0cmwxKTsKKwkJaWYgKHRtcCAmIEkyQ19DVFJMMV9OT19TTEFWRV9BQ0tfSVJRKSB7CisJCQlkZWJ1ZygiTVhTIEkyQzogTm8gc2xhdmUgQUNLXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKHRtcCAmICgKKwkJCUkyQ19DVFJMMV9FQVJMWV9URVJNX0lSUSB8IEkyQ19DVFJMMV9NQVNURVJfTE9TU19JUlEgfAorCQkJSTJDX0NUUkwxX1NMQVZFX1NUT1BfSVJRIHwgSTJDX0NUUkwxX1NMQVZFX0lSUSkpIHsKKwkJCWRlYnVnKCJNWFMgSTJDOiBFcnJvciAoQ1RSTDEgPSAlMDh4KVxuIiwgdG1wKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKHRtcCAmIEkyQ19DVFJMMV9EQVRBX0VOR0lORV9DTVBMVF9JUlEpCisJCQlicmVhazsKKworCQlpZiAoIXRpbWVvdXQtLSkgeworCQkJZGVidWcoIk1YUyBJMkM6IE9wZXJhdGlvbiB0aW1lZCBvdXRcbiIpOworCQkJZ290byBlcnI7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlteHNfaTJjX3Jlc2V0KCk7CisJcmV0dXJuIDE7Cit9CisKK2ludCBpMmNfcmVhZCh1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQoreworCXN0cnVjdCBteDI4X2kyY19yZWdzICppMmNfcmVncyA9IChzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqKU1YU19JMkMwX0JBU0U7CisJdWludDMyX3QgdG1wID0gMDsKKwlpbnQgcmV0OworCWludCBpOworCisJbXhzX2kyY193cml0ZShjaGlwLCBhZGRyLCBhbGVuLCBOVUxMLCAwLCAwKTsKKwlyZXQgPSBteHNfaTJjX3dhaXRfZm9yX2FjaygpOworCWlmIChyZXQpIHsKKwkJZGVidWcoIk1YUyBJMkM6IEZhaWxlZCB3cml0aW5nIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW14c19pMmNfc2V0dXBfcmVhZChjaGlwLCBsZW4pOworCXJldCA9IG14c19pMmNfd2FpdF9mb3JfYWNrKCk7CisJaWYgKHJldCkgeworCQlkZWJ1ZygiTVhTIEkyQzogRmFpbGVkIHJlYWRpbmcgYWRkcmVzc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICghKGkgJiAzKSkgeworCQkJd2hpbGUgKHJlYWRsKCZpMmNfcmVncy0+aHdfaTJjX3F1ZXVlc3RhdCkgJgorCQkJCUkyQ19RVUVVRVNUQVRfUkRfUVVFVUVfRU1QVFkpCisJCQkJOworCQkJdG1wID0gcmVhZGwoJmkyY19yZWdzLT5od19pMmNfcXVldWVkYXRhKTsKKwkJfQorCQlidWZmZXJbaV0gPSB0bXAgJiAweGZmOworCQl0bXAgPj49IDg7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBpMmNfd3JpdGUodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwgdWNoYXIgKmJ1ZmZlciwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCW14c19pMmNfd3JpdGUoY2hpcCwgYWRkciwgYWxlbiwgYnVmZmVyLCBsZW4sIDEpOworCXJldCA9IG14c19pMmNfd2FpdF9mb3JfYWNrKCk7CisJaWYgKHJldCkKKwkJZGVidWcoIk1YUyBJMkM6IEZhaWxlZCB3cml0aW5nIGFkZHJlc3NcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGkyY19wcm9iZSh1Y2hhciBjaGlwKQoreworCWludCByZXQ7CisJbXhzX2kyY193cml0ZShjaGlwLCAwLCAxLCBOVUxMLCAwLCAxKTsKKwlyZXQgPSBteHNfaTJjX3dhaXRfZm9yX2FjaygpOworCW14c19pMmNfcmVzZXQoKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkKQoreworCXN0cnVjdCBteDI4X2kyY19yZWdzICppMmNfcmVncyA9IChzdHJ1Y3QgbXgyOF9pMmNfcmVncyAqKU1YU19JMkMwX0JBU0U7CisKKwlteHNfaTJjX3Jlc2V0KCk7CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSAxMDAwMDA6CisJCXdyaXRlbCgoMHgwMDc4IDw8IEkyQ19USU1JTkcwX0hJR0hfQ09VTlRfT0ZGU0VUKSB8CisJCQkoMHgwMDMwIDw8IEkyQ19USU1JTkcwX1JDVl9DT1VOVF9PRkZTRVQpLAorCQkJJmkyY19yZWdzLT5od19pMmNfdGltaW5nMCk7CisJCXdyaXRlbCgoMHgwMDgwIDw8IEkyQ19USU1JTkcxX0xPV19DT1VOVF9PRkZTRVQpIHwKKwkJCSgweDAwMzAgPDwgSTJDX1RJTUlORzFfWE1JVF9DT1VOVF9PRkZTRVQpLAorCQkJJmkyY19yZWdzLT5od19pMmNfdGltaW5nMSk7CisJCWJyZWFrOworCWNhc2UgNDAwMDAwOgorCQl3cml0ZWwoKDB4MDAwZiA8PCBJMkNfVElNSU5HMF9ISUdIX0NPVU5UX09GRlNFVCkgfAorCQkJKDB4MDAwNyA8PCBJMkNfVElNSU5HMF9SQ1ZfQ09VTlRfT0ZGU0VUKSwKKwkJCSZpMmNfcmVncy0+aHdfaTJjX3RpbWluZzApOworCQl3cml0ZWwoKDB4MDAxZiA8PCBJMkNfVElNSU5HMV9MT1dfQ09VTlRfT0ZGU0VUKSB8CisJCQkoMHgwMDBmIDw8IEkyQ19USU1JTkcxX1hNSVRfQ09VTlRfT0ZGU0VUKSwKKwkJCSZpMmNfcmVncy0+aHdfaTJjX3RpbWluZzEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIk1YUyBJMkM6IEludmFsaWQgc3BlZWQgc2VsZWN0ZWQgKCVkIEh6KVxuIiwgc3BlZWQpOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsKCgweDAwMTUgPDwgSTJDX1RJTUlORzJfQlVTX0ZSRUVfT0ZGU0VUKSB8CisJCSgweDAwMGQgPDwgSTJDX1RJTUlORzJfTEVBRElOX0NPVU5UX09GRlNFVCksCisJCSZpMmNfcmVncy0+aHdfaTJjX3RpbWluZzIpOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9NYWtlZmlsZQppbmRleCA5ZjlkYjc1Li41MDZmMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9NYWtlZmlsZQpAQCAtMzYsNiArMzYsNyBAQAogQ09CSlMtJChDT05GSUdfQVJNX1BMMTgwX01NQ0kpICs9IGFybV9wbDE4MF9tbWNpLm8KIENPQkpTLSQoQ09ORklHX01WX1NESENJKSArPSBtdl9zZGhjaS5vCiBDT0JKUy0kKENPTkZJR19NWENfTU1DKSArPSBteGNtbWMubworQ09CSlMtJChDT05GSUdfTVhTX01NQykgKz0gbXhzbW1jLm8KIENPQkpTLSQoQ09ORklHX09NQVBfSFNNTUMpICs9IG9tYXBfaHNtbWMubwogQ09CSlMtJChDT05GSUdfUFhBX01NQykgKz0gcHhhX21tYy5vCiBDT0JKUy0kKENPTkZJR19QWEFfTU1DX0dFTkVSSUMpICs9IHB4YV9tbWNfZ2VuLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2FybV9wbDE4MF9tbWNpLmMgYi9kcml2ZXJzL21tYy9hcm1fcGwxODBfbW1jaS5jCmluZGV4IGVkMjk2ZWUuLmU2NDY3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2FybV9wbDE4MF9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvYXJtX3BsMTgwX21tY2kuYwpAQCAtMTExLDcgKzExMSw2IEBACiBzdGF0aWMgaW50IHJlYWRfYnl0ZXMoc3RydWN0IG1tYyAqZGV2LCB1MzIgKmRlc3QsIHUzMiBibGtjb3VudCwgdTMyIGJsa3NpemUpCiB7CiAJdTMyICp0ZW1wYnVmZiA9IGRlc3Q7Ci0JaW50IGk7CiAJdTY0IHhmZXJjb3VudCA9IGJsa2NvdW50ICogYmxrc2l6ZTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBkZXYtPnByaXY7CiAJdTMyIHN0YXR1cywgc3RhdHVzX2VycjsKQEAgLTEyMSwzMSArMTIwLDYgQEAKIAlzdGF0dXMgPSByZWFkbCgmaG9zdC0+YmFzZS0+c3RhdHVzKTsKIAlzdGF0dXNfZXJyID0gc3RhdHVzICYgKFNESV9TVEFfRENSQ0ZBSUwgfCBTRElfU1RBX0RUSU1FT1VUIHwKIAkJCSAgICAgICBTRElfU1RBX1JYT1ZFUlIpOwotCXdoaWxlICghc3RhdHVzX2VyciAmJgotCSAgICAgICAoeGZlcmNvdW50ID49IFNESV9GSUZPX0JVUlNUX1NJWkUgKiBzaXplb2YodTMyKSkpIHsKLQkJaWYgKHN0YXR1cyAmIFNESV9TVEFfUlhGSUZPQlIpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBTRElfRklGT19CVVJTVF9TSVpFOyBpKyspCi0JCQkJKih0ZW1wYnVmZiArIGkpID0gcmVhZGwoJmhvc3QtPmJhc2UtPmZpZm8pOwotCQkJdGVtcGJ1ZmYgKz0gU0RJX0ZJRk9fQlVSU1RfU0laRTsKLQkJCXhmZXJjb3VudCAtPSBTRElfRklGT19CVVJTVF9TSVpFICogc2l6ZW9mKHUzMik7Ci0JCX0KLQkJc3RhdHVzID0gcmVhZGwoJmhvc3QtPmJhc2UtPnN0YXR1cyk7Ci0JCXN0YXR1c19lcnIgPSBzdGF0dXMgJgotCQkJKFNESV9TVEFfRENSQ0ZBSUwgfCBTRElfU1RBX0RUSU1FT1VUIHwgU0RJX1NUQV9SWE9WRVJSKTsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgU0RJX1NUQV9EVElNRU9VVCkgewotCQlwcmludGYoIlJlYWQgZGF0YSB0aW1lZCBvdXQsIHhmZXJjb3VudDogJWxsdSwgc3RhdHVzOiAweCUwOFhcbiIsCi0JCQl4ZmVyY291bnQsIHN0YXR1cyk7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0gZWxzZSBpZiAoc3RhdHVzICYgU0RJX1NUQV9EQ1JDRkFJTCkgewotCQlwcmludGYoIlJlYWQgZGF0YSBibGsgQ1JDIGVycm9yOiAweCV4XG4iLCBzdGF0dXMpOwotCQlyZXR1cm4gLUVJTFNFUTsKLQl9IGVsc2UgaWYgKHN0YXR1cyAmIFNESV9TVEFfUlhPVkVSUikgewotCQlwcmludGYoIlJlYWQgZGF0YSBSWCBvdmVyZmxvdyBlcnJvclxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCXdoaWxlICgoIXN0YXR1c19lcnIpICYmICh4ZmVyY291bnQgPj0gc2l6ZW9mKHUzMikpKSB7CiAJCWlmIChzdGF0dXMgJiBTRElfU1RBX1JYREFWTCkgewogCQkJKih0ZW1wYnVmZikgPSByZWFkbCgmaG9zdC0+YmFzZS0+Zmlmbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9kYXZpbmNpX21tYy5jIGIvZHJpdmVycy9tbWMvZGF2aW5jaV9tbWMuYwppbmRleCA1ZDkxOGU2Li5jZTk2NzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9kYXZpbmNpX21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2RhdmluY2lfbW1jLmMKQEAgLTY5LDggKzY5LDggQEAKIHN0YXRpYyBpbnQKIGRtbWNfd2FpdF9maWZvX3N0YXR1cyh2b2xhdGlsZSBzdHJ1Y3QgZGF2aW5jaV9tbWNfcmVncyAqcmVncywgdWludCBzdGF0dXMpCiB7Ci0JdWludCBtbWNzdGF0dXMxLCB3ZG9nID0gV0FUQ0hET0dfQ09VTlQ7Ci0JbW1jc3RhdHVzMSA9IGdldF92YWwoJnJlZ3MtPm1tY3N0MSk7CisJdWludCB3ZG9nID0gV0FUQ0hET0dfQ09VTlQ7CisKIAl3aGlsZSAoLS13ZG9nICYmICgoZ2V0X3ZhbCgmcmVncy0+bW1jc3QxKSAmIHN0YXR1cykgIT0gc3RhdHVzKSkKIAkJdWRlbGF5KDEwKTsKIApAQCAtODYsOSArODYsOCBAQAogLyogQnVzeSBiaXQgd2FpdCBsb29wIGZvciBNTUNTVDEgKi8KIHN0YXRpYyBpbnQgZG1tY19idXN5X3dhaXQodm9sYXRpbGUgc3RydWN0IGRhdmluY2lfbW1jX3JlZ3MgKnJlZ3MpCiB7Ci0JdWludCBtbWNzdGF0dXMxLCB3ZG9nID0gV0FUQ0hET0dfQ09VTlQ7CisJdWludCB3ZG9nID0gV0FUQ0hET0dfQ09VTlQ7CiAKLQltbWNzdGF0dXMxID0gZ2V0X3ZhbCgmcmVncy0+bW1jc3QxKTsKIAl3aGlsZSAoLS13ZG9nICYmIChnZXRfdmFsKCZyZWdzLT5tbWNzdDEpICYgTU1DU1QxX0JVU1kpKQogCQl1ZGVsYXkoMTApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9teHNtbWMuYyBiL2RyaXZlcnMvbW1jL214c21tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOTk0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9teHNtbWMuYwpAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggU1NQIE1NQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBUZXJyeSBMdgorICoKKyAqIENvcHlyaWdodCAyMDA3LCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKiBBbmR5IEZsZW1pbmcKKyAqCisgKiBCYXNlZCB2YWd1ZWx5IG9uIHRoZSBweGEgbW1jIGNvZGU6CisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIEt5bGUgSGFycmlzLCBOZXh1cyBUZWNobm9sb2dpZXMsIEluYy4ga2hhcnJpc0BuZXh1cy10ZWNoLm5ldAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8bW1jLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorCitzdHJ1Y3QgbXhzbW1jX3ByaXYgeworCWludAkJCWlkOworCXN0cnVjdCBteDI4X3NzcF9yZWdzCSpyZWdzOworCXVpbnQzMl90CQljbGtzZXFfYnlwYXNzOworCXVpbnQzMl90CQkqY2xrY3RybF9zc3A7CisJdWludDMyX3QJCWJ1c3dpZHRoOworCWludAkJCSgqbW1jX2lzX3dwKShpbnQpOworfTsKKworI2RlZmluZQlNWFNNTUNfTUFYX1RJTUVPVVQJMTAwMDAKKworLyoKKyAqIFNlbmRzIGEgY29tbWFuZCBvdXQgb24gdGhlIGJ1cy4gIFRha2VzIHRoZSBtbWMgcG9pbnRlciwKKyAqIGEgY29tbWFuZCBwb2ludGVyLCBhbmQgYW4gb3B0aW9uYWwgZGF0YSBwb2ludGVyLgorICovCitzdGF0aWMgaW50CitteHNtbWNfc2VuZF9jbWQoc3RydWN0IG1tYyAqbW1jLCBzdHJ1Y3QgbW1jX2NtZCAqY21kLCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG14c21tY19wcml2ICpwcml2ID0gKHN0cnVjdCBteHNtbWNfcHJpdiAqKW1tYy0+cHJpdjsKKwlzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqc3NwX3JlZ3MgPSBwcml2LT5yZWdzOworCXVpbnQzMl90IHJlZzsKKwlpbnQgdGltZW91dDsKKwl1aW50MzJfdCBkYXRhX2NvdW50OworCXVpbnQzMl90ICpkYXRhX3B0cjsKKwl1aW50MzJfdCBjdHJsMDsKKworCWRlYnVnKCJNTUMlZDogQ01EJWRcbiIsIG1tYy0+YmxvY2tfZGV2LmRldiwgY21kLT5jbWRpZHgpOworCisJLyogQ2hlY2sgYnVzIGJ1c3kgKi8KKwl0aW1lb3V0ID0gTVhTTU1DX01BWF9USU1FT1VUOworCXdoaWxlICgtLXRpbWVvdXQpIHsKKwkJdWRlbGF5KDEwMDApOworCQlyZWcgPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zdGF0dXMpOworCQlpZiAoIShyZWcgJgorCQkJKFNTUF9TVEFUVVNfQlVTWSB8IFNTUF9TVEFUVVNfREFUQV9CVVNZIHwKKwkJCVNTUF9TVEFUVVNfQ01EX0JVU1kpKSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJcHJpbnRmKCJNTUMlZDogQnVzIGJ1c3kgdGltZW91dCFcbiIsIG1tYy0+YmxvY2tfZGV2LmRldik7CisJCXJldHVybiBUSU1FT1VUOworCX0KKworCS8qIFNlZSBpZiBjYXJkIGlzIHByZXNlbnQgKi8KKwlpZiAocmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc3RhdHVzKSAmIFNTUF9TVEFUVVNfQ0FSRF9ERVRFQ1QpIHsKKwkJcHJpbnRmKCJNTUMlZDogTm8gY2FyZCBkZXRlY3RlZCFcbiIsIG1tYy0+YmxvY2tfZGV2LmRldik7CisJCXJldHVybiBOT19DQVJEX0VSUjsKKwl9CisKKwkvKiBTdGFydCBidWlsZGluZyBDVFJMMCBjb250ZW50cyAqLworCWN0cmwwID0gcHJpdi0+YnVzd2lkdGg7CisKKwkvKiBTZXQgdXAgY29tbWFuZCAqLworCWlmICghKGNtZC0+cmVzcF90eXBlICYgTU1DX1JTUF9DUkMpKQorCQljdHJsMCB8PSBTU1BfQ1RSTDBfSUdOT1JFX0NSQzsKKwlpZiAoY21kLT5yZXNwX3R5cGUgJiBNTUNfUlNQX1BSRVNFTlQpCS8qIE5lZWQgdG8gZ2V0IHJlc3BvbnNlICovCisJCWN0cmwwIHw9IFNTUF9DVFJMMF9HRVRfUkVTUDsKKwlpZiAoY21kLT5yZXNwX3R5cGUgJiBNTUNfUlNQXzEzNikJLyogSXQncyBhIDEzNiBiaXRzIHJlc3BvbnNlICovCisJCWN0cmwwIHw9IFNTUF9DVFJMMF9MT05HX1JFU1A7CisKKwkvKiBDb21tYW5kIGluZGV4ICovCisJcmVnID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3BfY21kMCk7CisJcmVnICY9IH4oU1NQX0NNRDBfQ01EX01BU0sgfCBTU1BfQ01EMF9BUFBFTkRfOENZQyk7CisJcmVnIHw9IGNtZC0+Y21kaWR4IDw8IFNTUF9DTUQwX0NNRF9PRkZTRVQ7CisJaWYgKGNtZC0+Y21kaWR4ID09IE1NQ19DTURfU1RPUF9UUkFOU01JU1NJT04pCisJCXJlZyB8PSBTU1BfQ01EMF9BUFBFTkRfOENZQzsKKwl3cml0ZWwocmVnLCAmc3NwX3JlZ3MtPmh3X3NzcF9jbWQwKTsKKworCS8qIENvbW1hbmQgYXJndW1lbnQgKi8KKwl3cml0ZWwoY21kLT5jbWRhcmcsICZzc3BfcmVncy0+aHdfc3NwX2NtZDEpOworCisJLyogU2V0IHVwIGRhdGEgKi8KKwlpZiAoZGF0YSkgeworCQkvKiBSRUFEIG9yIFdSSVRFICovCisJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJCWN0cmwwIHw9IFNTUF9DVFJMMF9SRUFEOworCQl9IGVsc2UgaWYgKHByaXYtPm1tY19pc193cChtbWMtPmJsb2NrX2Rldi5kZXYpKSB7CisJCQlwcmludGYoIk1NQyVkOiBDYW4gbm90IHdyaXRlIGEgbG9ja2VkIGNhcmQhXG4iLAorCQkJCW1tYy0+YmxvY2tfZGV2LmRldik7CisJCQlyZXR1cm4gVU5VU0FCTEVfRVJSOworCQl9CisKKwkJY3RybDAgfD0gU1NQX0NUUkwwX0RBVEFfWEZFUjsKKwkJcmVnID0gKChkYXRhLT5ibG9ja3MgLSAxKSA8PAorCQkJU1NQX0JMT0NLX1NJWkVfQkxPQ0tfQ09VTlRfT0ZGU0VUKSB8CisJCQkoKGZmcyhkYXRhLT5ibG9ja3NpemUpIC0gMSkgPDwKKwkJCVNTUF9CTE9DS19TSVpFX0JMT0NLX1NJWkVfT0ZGU0VUKTsKKwkJd3JpdGVsKHJlZywgJnNzcF9yZWdzLT5od19zc3BfYmxvY2tfc2l6ZSk7CisKKwkJcmVnID0gZGF0YS0+YmxvY2tzaXplICogZGF0YS0+YmxvY2tzOworCQl3cml0ZWwocmVnLCAmc3NwX3JlZ3MtPmh3X3NzcF94ZmVyX3NpemUpOworCX0KKworCS8qIEtpY2sgb2ZmIHRoZSBjb21tYW5kICovCisJY3RybDAgfD0gU1NQX0NUUkwwX1dBSVRfRk9SX0lSUSB8IFNTUF9DVFJMMF9FTkFCTEUgfCBTU1BfQ1RSTDBfUlVOOworCXdyaXRlbChjdHJsMCwgJnNzcF9yZWdzLT5od19zc3BfY3RybDApOworCisJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KKwl0aW1lb3V0ID0gTVhTTU1DX01BWF9USU1FT1VUOworCXdoaWxlICgtLXRpbWVvdXQpIHsKKwkJdWRlbGF5KDEwMDApOworCQlyZWcgPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zdGF0dXMpOworCQlpZiAoIShyZWcgJiBTU1BfU1RBVFVTX0NNRF9CVVNZKSkKKwkJCWJyZWFrOworCX0KKworCWlmICghdGltZW91dCkgeworCQlwcmludGYoIk1NQyVkOiBDb21tYW5kICVkIGJ1c3lcbiIsCisJCQltbWMtPmJsb2NrX2Rldi5kZXYsIGNtZC0+Y21kaWR4KTsKKwkJcmV0dXJuIFRJTUVPVVQ7CisJfQorCisJLyogQ2hlY2sgY29tbWFuZCB0aW1lb3V0ICovCisJaWYgKHJlZyAmIFNTUF9TVEFUVVNfUkVTUF9USU1FT1VUKSB7CisJCXByaW50ZigiTU1DJWQ6IENvbW1hbmQgJWQgdGltZW91dCAoc3RhdHVzIDB4JTA4eClcbiIsCisJCQltbWMtPmJsb2NrX2Rldi5kZXYsIGNtZC0+Y21kaWR4LCByZWcpOworCQlyZXR1cm4gVElNRU9VVDsKKwl9CisKKwkvKiBDaGVjayBjb21tYW5kIGVycm9ycyAqLworCWlmIChyZWcgJiAoU1NQX1NUQVRVU19SRVNQX0NSQ19FUlIgfCBTU1BfU1RBVFVTX1JFU1BfRVJSKSkgeworCQlwcmludGYoIk1NQyVkOiBDb21tYW5kICVkIGVycm9yIChzdGF0dXMgMHglMDh4KSFcbiIsCisJCQltbWMtPmJsb2NrX2Rldi5kZXYsIGNtZC0+Y21kaWR4LCByZWcpOworCQlyZXR1cm4gQ09NTV9FUlI7CisJfQorCisJLyogQ29weSByZXNwb25zZSB0byByZXNwb25zZSBidWZmZXIgKi8KKwlpZiAoY21kLT5yZXNwX3R5cGUgJiBNTUNfUlNQXzEzNikgeworCQljbWQtPnJlc3BvbnNlWzNdID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc2RyZXNwMCk7CisJCWNtZC0+cmVzcG9uc2VbMl0gPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zZHJlc3AxKTsKKwkJY21kLT5yZXNwb25zZVsxXSA9IHJlYWRsKCZzc3BfcmVncy0+aHdfc3NwX3NkcmVzcDIpOworCQljbWQtPnJlc3BvbnNlWzBdID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc2RyZXNwMyk7CisJfSBlbHNlCisJCWNtZC0+cmVzcG9uc2VbMF0gPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zZHJlc3AwKTsKKworCS8qIFJldHVybiBpZiBubyBkYXRhIHRvIHByb2Nlc3MgKi8KKwlpZiAoIWRhdGEpCisJCXJldHVybiAwOworCisJLyogUHJvY2VzcyB0aGUgZGF0YSAqLworCWRhdGFfY291bnQgPSBkYXRhLT5ibG9ja3NpemUgKiBkYXRhLT5ibG9ja3M7CisJdGltZW91dCA9IE1YU01NQ19NQVhfVElNRU9VVDsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSB7CisJCWRhdGFfcHRyID0gKHVpbnQzMl90ICopZGF0YS0+ZGVzdDsKKwkJd2hpbGUgKGRhdGFfY291bnQgJiYgLS10aW1lb3V0KSB7CisJCQlyZWcgPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9zdGF0dXMpOworCQkJaWYgKCEocmVnICYgU1NQX1NUQVRVU19GSUZPX0VNUFRZKSkgeworCQkJCSpkYXRhX3B0cisrID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3BfZGF0YSk7CisJCQkJZGF0YV9jb3VudCAtPSA0OworCQkJCXRpbWVvdXQgPSBNWFNNTUNfTUFYX1RJTUVPVVQ7CisJCQl9IGVsc2UKKwkJCQl1ZGVsYXkoMTAwMCk7CisJCX0KKwl9IGVsc2UgeworCQlkYXRhX3B0ciA9ICh1aW50MzJfdCAqKWRhdGEtPnNyYzsKKwkJdGltZW91dCAqPSAxMDA7CisJCXdoaWxlIChkYXRhX2NvdW50ICYmIC0tdGltZW91dCkgeworCQkJcmVnID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc3RhdHVzKTsKKwkJCWlmICghKHJlZyAmIFNTUF9TVEFUVVNfRklGT19GVUxMKSkgeworCQkJCXdyaXRlbCgqZGF0YV9wdHIrKywgJnNzcF9yZWdzLT5od19zc3BfZGF0YSk7CisJCQkJZGF0YV9jb3VudCAtPSA0OworCQkJCXRpbWVvdXQgPSBNWFNNTUNfTUFYX1RJTUVPVVQ7CisJCQl9IGVsc2UKKwkJCQl1ZGVsYXkoMTAwMCk7CisJCX0KKwl9CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJcHJpbnRmKCJNTUMlZDogRGF0YSB0aW1lb3V0IHdpdGggY29tbWFuZCAlZCAoc3RhdHVzIDB4JTA4eCkhXG4iLAorCQkJbW1jLT5ibG9ja19kZXYuZGV2LCBjbWQtPmNtZGlkeCwgcmVnKTsKKwkJcmV0dXJuIENPTU1fRVJSOworCX0KKworCS8qIENoZWNrIGRhdGEgZXJyb3JzICovCisJcmVnID0gcmVhZGwoJnNzcF9yZWdzLT5od19zc3Bfc3RhdHVzKTsKKwlpZiAocmVnICYKKwkJKFNTUF9TVEFUVVNfVElNRU9VVCB8IFNTUF9TVEFUVVNfREFUQV9DUkNfRVJSIHwKKwkJU1NQX1NUQVRVU19GSUZPX09WUkZMVyB8IFNTUF9TVEFUVVNfRklGT19VTkRSRkxXKSkgeworCQlwcmludGYoIk1NQyVkOiBEYXRhIGVycm9yIHdpdGggY29tbWFuZCAlZCAoc3RhdHVzIDB4JTA4eCkhXG4iLAorCQkJbW1jLT5ibG9ja19kZXYuZGV2LCBjbWQtPmNtZGlkeCwgcmVnKTsKKwkJcmV0dXJuIENPTU1fRVJSOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBteHNtbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jICptbWMpCit7CisJc3RydWN0IG14c21tY19wcml2ICpwcml2ID0gKHN0cnVjdCBteHNtbWNfcHJpdiAqKW1tYy0+cHJpdjsKKwlzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqc3NwX3JlZ3MgPSBwcml2LT5yZWdzOworCisJLyogU2V0IHRoZSBjbG9jayBzcGVlZCAqLworCWlmIChtbWMtPmNsb2NrKQorCQlteDI4X3NldF9zc3BfYnVzY2xvY2socHJpdi0+aWQsIG1tYy0+Y2xvY2sgLyAxMDAwKTsKKworCXN3aXRjaCAobW1jLT5idXNfd2lkdGgpIHsKKwljYXNlIDE6CisJCXByaXYtPmJ1c3dpZHRoID0gU1NQX0NUUkwwX0JVU19XSURUSF9PTkVfQklUOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByaXYtPmJ1c3dpZHRoID0gU1NQX0NUUkwwX0JVU19XSURUSF9GT1VSX0JJVDsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlwcml2LT5idXN3aWR0aCA9IFNTUF9DVFJMMF9CVVNfV0lEVEhfRUlHSFRfQklUOworCQlicmVhazsKKwl9CisKKwkvKiBTZXQgdGhlIGJ1cyB3aWR0aCAqLworCWNscnNldGJpdHNfbGUzMigmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMCwKKwkJCVNTUF9DVFJMMF9CVVNfV0lEVEhfTUFTSywgcHJpdi0+YnVzd2lkdGgpOworCisJZGVidWcoIk1NQyVkOiBTZXQgJWQgYml0cyBidXMgd2lkdGhcbiIsCisJCW1tYy0+YmxvY2tfZGV2LmRldiwgbW1jLT5idXNfd2lkdGgpOworfQorCitzdGF0aWMgaW50IG14c21tY19pbml0KHN0cnVjdCBtbWMgKm1tYykKK3sKKwlzdHJ1Y3QgbXhzbW1jX3ByaXYgKnByaXYgPSAoc3RydWN0IG14c21tY19wcml2ICopbW1jLT5wcml2OworCXN0cnVjdCBteDI4X3NzcF9yZWdzICpzc3BfcmVncyA9IHByaXYtPnJlZ3M7CisKKwkvKiBSZXNldCBTU1AgKi8KKwlteDI4X3Jlc2V0X2Jsb2NrKCZzc3BfcmVncy0+aHdfc3NwX2N0cmwwX3JlZyk7CisKKwkvKiA4IGJpdHMgd29yZCBsZW5ndGggaW4gTU1DIG1vZGUgKi8KKwljbHJzZXRiaXRzX2xlMzIoJnNzcF9yZWdzLT5od19zc3BfY3RybDEsCisJCVNTUF9DVFJMMV9TU1BfTU9ERV9NQVNLIHwgU1NQX0NUUkwxX1dPUkRfTEVOR1RIX01BU0ssCisJCVNTUF9DVFJMMV9TU1BfTU9ERV9TRF9NTUMgfCBTU1BfQ1RSTDFfV09SRF9MRU5HVEhfRUlHSFRfQklUUyk7CisKKwkvKiBTZXQgaW5pdGlhbCBiaXQgY2xvY2sgNDAwIEtIeiAqLworCW14Mjhfc2V0X3NzcF9idXNjbG9jayhwcml2LT5pZCwgNDAwKTsKKworCS8qIFNlbmQgaW5pdGlhbCA3NCBjbG9jayBjeWNsZXMgKDE4NSB1cyBAIDQwMCBLSHopKi8KKwl3cml0ZWwoU1NQX0NNRDBfQ09OVF9DTEtJTkdfRU4sICZzc3BfcmVncy0+aHdfc3NwX2NtZDBfc2V0KTsKKwl1ZGVsYXkoMjAwKTsKKwl3cml0ZWwoU1NQX0NNRDBfQ09OVF9DTEtJTkdfRU4sICZzc3BfcmVncy0+aHdfc3NwX2NtZDBfY2xyKTsKKworCXJldHVybiAwOworfQorCitpbnQgbXhzbW1jX2luaXRpYWxpemUoYmRfdCAqYmlzLCBpbnQgaWQsIGludCAoKndwKShpbnQpKQoreworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisJc3RydWN0IG1tYyAqbW1jID0gTlVMTDsKKwlzdHJ1Y3QgbXhzbW1jX3ByaXYgKnByaXYgPSBOVUxMOworCisJbW1jID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW1jKSk7CisJaWYgKCFtbWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG14c21tY19wcml2KSk7CisJaWYgKCFwcml2KSB7CisJCWZyZWUobW1jKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpdi0+bW1jX2lzX3dwID0gd3A7CisJcHJpdi0+aWQgPSBpZDsKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSAwOgorCQlwcml2LT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopTVhTX1NTUDBfQkFTRTsKKwkJcHJpdi0+Y2xrc2VxX2J5cGFzcyA9IENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AwOworCQlwcml2LT5jbGtjdHJsX3NzcCA9ICZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcml2LT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopTVhTX1NTUDFfQkFTRTsKKwkJcHJpdi0+Y2xrc2VxX2J5cGFzcyA9IENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AxOworCQlwcml2LT5jbGtjdHJsX3NzcCA9ICZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcml2LT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopTVhTX1NTUDJfQkFTRTsKKwkJcHJpdi0+Y2xrc2VxX2J5cGFzcyA9IENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AyOworCQlwcml2LT5jbGtjdHJsX3NzcCA9ICZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwcml2LT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopTVhTX1NTUDNfQkFTRTsKKwkJcHJpdi0+Y2xrc2VxX2J5cGFzcyA9IENMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AzOworCQlwcml2LT5jbGtjdHJsX3NzcCA9ICZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfc3NwMzsKKwkJYnJlYWs7CisJfQorCisJc3ByaW50ZihtbWMtPm5hbWUsICJNWFMgTU1DIik7CisJbW1jLT5zZW5kX2NtZCA9IG14c21tY19zZW5kX2NtZDsKKwltbWMtPnNldF9pb3MgPSBteHNtbWNfc2V0X2lvczsKKwltbWMtPmluaXQgPSBteHNtbWNfaW5pdDsKKwltbWMtPnByaXYgPSBwcml2OworCisJbW1jLT52b2x0YWdlcyA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCisJbW1jLT5ob3N0X2NhcHMgPSBNTUNfTU9ERV80QklUIHwgTU1DX01PREVfOEJJVCB8CisJCQkgTU1DX01PREVfSFNfNTJNSHogfCBNTUNfTU9ERV9IUzsKKworCS8qCisJICogU1NQQ0xLID0gNDgwICogMTggLyAyOSAvIDEgPSAyOTcuNzMxIE1IegorCSAqIFNTUCBiaXQgcmF0ZSA9IFNTUENMSyAvIChDTE9DS19ESVZJREUgKiAoMSArIENMT0NLX1JBVEUpKSwKKwkgKiBDTE9DS19ESVZJREUgaGFzIHRvIGJlIGFuIGV2ZW4gdmFsdWUgZnJvbSAyIHRvIDI1NCwgYW5kCisJICogQ0xPQ0tfUkFURSBjb3VsZCBiZSBhbnkgaW50ZWdlciBmcm9tIDAgdG8gMjU1LgorCSAqLworCW1tYy0+Zl9taW4gPSA0MDAwMDA7CisJbW1jLT5mX21heCA9IG14Y19nZXRfY2xvY2soTVhDX1NTUDBfQ0xLICsgaWQpICogMTAwMCAvIDI7CisJbW1jLT5iX21heCA9IDA7CisKKwltbWNfcmVnaXN0ZXIobW1jKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL29tYXBfaHNtbWMuYwppbmRleCBlYmRhOTgwLi5jMzhiOWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvb21hcF9oc21tYy5jCkBAIC0zNiw4ICszNiw5IEBACiAvKiBJZiB3ZSBmYWlsIGFmdGVyIDEgc2Vjb25kIHdhaXQsIHNvbWV0aGluZyBpcyByZWFsbHkgYmFkICovCiAjZGVmaW5lIE1BWF9SRVRSWV9NUwkxMDAwCiAKLXN0YXRpYyBpbnQgbW1jX3JlYWRfZGF0YShoc21tY190ICptbWNfYmFzZSwgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci1zdGF0aWMgaW50IG1tY193cml0ZV9kYXRhKGhzbW1jX3QgKm1tY19iYXNlLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBzaXopOworc3RhdGljIGludCBtbWNfcmVhZF9kYXRhKHN0cnVjdCBoc21tYyAqbW1jX2Jhc2UsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIGludCBtbWNfd3JpdGVfZGF0YShzdHJ1Y3QgaHNtbWMgKm1tY19iYXNlLCBjb25zdCBjaGFyICpidWYsCisJCQl1bnNpZ25lZCBpbnQgc2l6KTsKIHN0YXRpYyBzdHJ1Y3QgbW1jIGhzbW1jX2RldlsyXTsKIAogI2lmIGRlZmluZWQoQ09ORklHX09NQVA0NFhYKSAmJiBkZWZpbmVkKENPTkZJR19UV0w2MDMwX1BPV0VSKQpAQCAtOTcsNyArOTgsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG1tY19pbml0X3N0cmVhbShoc21tY190ICptbWNfYmFzZSkKK3ZvaWQgbW1jX2luaXRfc3RyZWFtKHN0cnVjdCBoc21tYyAqbW1jX2Jhc2UpCiB7CiAJdWxvbmcgc3RhcnQ7CiAKQEAgLTEyOCw3ICsxMjksNyBAQAogCiBzdGF0aWMgaW50IG1tY19pbml0X3NldHVwKHN0cnVjdCBtbWMgKm1tYykKIHsKLQloc21tY190ICptbWNfYmFzZSA9IChoc21tY190ICopbW1jLT5wcml2OworCXN0cnVjdCBoc21tYyAqbW1jX2Jhc2UgPSAoc3RydWN0IGhzbW1jICopbW1jLT5wcml2OwogCXVuc2lnbmVkIGludCByZWdfdmFsOwogCXVuc2lnbmVkIGludCBkc29yOwogCXVsb25nIHN0YXJ0OwpAQCAtMTkyLDcgKzE5Myw3IEBACiBzdGF0aWMgaW50IG1tY19zZW5kX2NtZChzdHJ1Y3QgbW1jICptbWMsIHN0cnVjdCBtbWNfY21kICpjbWQsCiAJCQlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7Ci0JaHNtbWNfdCAqbW1jX2Jhc2UgPSAoaHNtbWNfdCAqKW1tYy0+cHJpdjsKKwlzdHJ1Y3QgaHNtbWMgKm1tY19iYXNlID0gKHN0cnVjdCBoc21tYyAqKW1tYy0+cHJpdjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MsIG1tY19zdGF0OwogCXVsb25nIHN0YXJ0OwogCkBAIC0zMDUsNyArMzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtbWNfcmVhZF9kYXRhKGhzbW1jX3QgKm1tY19iYXNlLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGludCBtbWNfcmVhZF9kYXRhKHN0cnVjdCBoc21tYyAqbW1jX2Jhc2UsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgaW50ICpvdXRwdXRfYnVmID0gKHVuc2lnbmVkIGludCAqKWJ1ZjsKIAl1bnNpZ25lZCBpbnQgbW1jX3N0YXQ7CkBAIC0zNTYsNyArMzU3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtbWNfd3JpdGVfZGF0YShoc21tY190ICptbWNfYmFzZSwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3N0YXRpYyBpbnQgbW1jX3dyaXRlX2RhdGEoc3RydWN0IGhzbW1jICptbWNfYmFzZSwgY29uc3QgY2hhciAqYnVmLAorCQkJCXVuc2lnbmVkIGludCBzaXplKQogewogCXVuc2lnbmVkIGludCAqaW5wdXRfYnVmID0gKHVuc2lnbmVkIGludCAqKWJ1ZjsKIAl1bnNpZ25lZCBpbnQgbW1jX3N0YXQ7CkBAIC00MDksNyArNDExLDcgQEAKIAogc3RhdGljIHZvaWQgbW1jX3NldF9pb3Moc3RydWN0IG1tYyAqbW1jKQogewotCWhzbW1jX3QgKm1tY19iYXNlID0gKGhzbW1jX3QgKiltbWMtPnByaXY7CisJc3RydWN0IGhzbW1jICptbWNfYmFzZSA9IChzdHJ1Y3QgaHNtbWMgKiltbWMtPnByaXY7CiAJdW5zaWduZWQgaW50IGRzb3IgPSAwOwogCXVsb25nIHN0YXJ0OwogCkBAIC00NzMsMjAgKzQ3NSwyMCBAQAogCiAJc3dpdGNoIChkZXZfaW5kZXgpIHsKIAljYXNlIDA6Ci0JCW1tYy0+cHJpdiA9IChoc21tY190ICopT01BUF9IU01NQzFfQkFTRTsKKwkJbW1jLT5wcml2ID0gKHN0cnVjdCBoc21tYyAqKU9NQVBfSFNNTUMxX0JBU0U7CiAJCWJyZWFrOwogI2lmZGVmIE9NQVBfSFNNTUMyX0JBU0UKIAljYXNlIDE6Ci0JCW1tYy0+cHJpdiA9IChoc21tY190ICopT01BUF9IU01NQzJfQkFTRTsKKwkJbW1jLT5wcml2ID0gKHN0cnVjdCBoc21tYyAqKU9NQVBfSFNNTUMyX0JBU0U7CiAJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgT01BUF9IU01NQzNfQkFTRQogCWNhc2UgMjoKLQkJbW1jLT5wcml2ID0gKGhzbW1jX3QgKilPTUFQX0hTTU1DM19CQVNFOworCQltbWMtPnByaXYgPSAoc3RydWN0IGhzbW1jICopT01BUF9IU01NQzNfQkFTRTsKIAkJYnJlYWs7CiAjZW5kaWYKIAlkZWZhdWx0OgotCQltbWMtPnByaXYgPSAoaHNtbWNfdCAqKU9NQVBfSFNNTUMxX0JBU0U7CisJCW1tYy0+cHJpdiA9IChzdHJ1Y3QgaHNtbWMgKilPTUFQX0hTTU1DMV9CQVNFOwogCQlyZXR1cm4gMTsKIAl9CiAJbW1jLT52b2x0YWdlcyA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0IHwgTU1DX1ZERF8xNjVfMTk1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvdGVncmEyX21tYy5jIGIvZHJpdmVycy9tbWMvdGVncmEyX21tYy5jCmluZGV4IDc4YjExOTAuLmNjZjQ4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3RlZ3JhMl9tbWMuYworKysgYi9kcml2ZXJzL21tYy90ZWdyYTJfbW1jLmMKQEAgLTgxLDcgKzgxLDggQEAKIAkgKiAxMSA9IFNlbGVjdHMgNjQtYml0IEFkZHJlc3MgQURNQTIKIAkgKi8KIAljdHJsID0gcmVhZGIoJmhvc3QtPnJlZy0+aG9zdGN0bCk7Ci0JY3RybCAmPSB+KDMgPDwgMyk7CQkJLyogU0RNQSAqLworCWN0cmwgJj0gflRFR1JBX01NQ19IT1NUQ1RMX0RNQVNFTF9NQVNLOworCWN0cmwgfD0gVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX1NETUE7CiAJd3JpdGViKGN0cmwsICZob3N0LT5yZWctPmhvc3RjdGwpOwogCiAJLyogV2UgZG8gbm90IGhhbmRsZSBETUEgYm91bmRhcmllcywgc28gc2V0IGl0IHRvIG1heCAoNTEyIEtpQikgKi8KQEAgLTEwMyw0MyArMTA0LDM2IEBACiAJICogRU5CTEtDTlRbMV0JOiBCbG9jayBDb3VudCBFbmFibGUKIAkgKiBFTkRNQVswXQk6IERNQSBFbmFibGUKIAkgKi8KLQltb2RlID0gKDEgPDwgMSkgfCAoMSA8PCAwKTsKKwltb2RlID0gKFRFR1JBX01NQ19UUk5NT0RfRE1BX0VOQUJMRSB8CisJCVRFR1JBX01NQ19UUk5NT0RfQkxPQ0tfQ09VTlRfRU5BQkxFKTsKKwogCWlmIChkYXRhLT5ibG9ja3MgPiAxKQotCQltb2RlIHw9ICgxIDw8IDUpOworCQltb2RlIHw9IFRFR1JBX01NQ19UUk5NT0RfTVVMVElfQkxPQ0tfU0VMRUNUOworCiAJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKLQkJbW9kZSB8PSAoMSA8PCA0KTsKKwkJbW9kZSB8PSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfWEZFUl9ESVJfU0VMX1JFQUQ7CiAKIAl3cml0ZXcobW9kZSwgJmhvc3QtPnJlZy0+dHJubW9kKTsKIH0KIAotc3RhdGljIGludCBtbWNfc2VuZF9jbWQoc3RydWN0IG1tYyAqbW1jLCBzdHJ1Y3QgbW1jX2NtZCAqY21kLAotCQkJc3RydWN0IG1tY19kYXRhICpkYXRhKQorc3RhdGljIGludCBtbWNfd2FpdF9pbmhpYml0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwKKwkJCSAgICBzdHJ1Y3QgbW1jX2NtZCAqY21kLAorCQkJICAgIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSAoc3RydWN0IG1tY19ob3N0ICopbW1jLT5wcml2OwotCWludCBmbGFncywgaTsKLQl1bnNpZ25lZCBpbnQgdGltZW91dDsKLQl1bnNpZ25lZCBpbnQgbWFzazsKLQl1bnNpZ25lZCBpbnQgcmV0cnkgPSAweDEwMDAwMDsKLQlkZWJ1ZygiIG1tY19zZW5kX2NtZCBjYWxsZWRcbiIpOwotCi0JLyogV2FpdCBtYXggMTAgbXMgKi8KLQl0aW1lb3V0ID0gMTA7Ci0KIAkvKgogCSAqIFBSTlNUUwotCSAqIENNRElOSERBVFsxXQk6IENvbW1hbmQgSW5oaWJpdCAoREFUKQotCSAqIENNRElOSENNRFswXQk6IENvbW1hbmQgSW5oaWJpdCAoQ01EKQorCSAqIENNRElOSERBVFsxXSA6IENvbW1hbmQgSW5oaWJpdCAoREFUKQorCSAqIENNRElOSENNRFswXSA6IENvbW1hbmQgSW5oaWJpdCAoQ01EKQogCSAqLwotCW1hc2sgPSAoMSA8PCAwKTsKLQlpZiAoKGRhdGEgIT0gTlVMTCkgfHwgKGNtZC0+cmVzcF90eXBlICYgTU1DX1JTUF9CVVNZKSkKLQkJbWFzayB8PSAoMSA8PCAxKTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IFRFR1JBX01NQ19QUk5TVFNfQ01EX0lOSElCSVRfQ01EOwogCiAJLyoKIAkgKiBXZSBzaG91bGRuJ3Qgd2FpdCBmb3IgZGF0YSBpbmhpYml0IGZvciBzdG9wIGNvbW1hbmRzLCBldmVuCiAJICogdGhvdWdoIHRoZXkgbWlnaHQgdXNlIGJ1c3kgc2lnbmFsaW5nCiAJICovCi0JaWYgKGRhdGEpCi0JCW1hc2sgJj0gfigxIDw8IDEpOworCWlmICgoZGF0YSA9PSBOVUxMKSAmJiAoY21kLT5yZXNwX3R5cGUgJiBNTUNfUlNQX0JVU1kpKQorCQltYXNrIHw9IFRFR1JBX01NQ19QUk5TVFNfQ01EX0lOSElCSVRfREFUOwogCiAJd2hpbGUgKHJlYWRsKCZob3N0LT5yZWctPnBybnN0cykgJiBtYXNrKSB7CiAJCWlmICh0aW1lb3V0ID09IDApIHsKQEAgLTE1MCw2ICsxNDQsMjQgQEAKIAkJdWRlbGF5KDEwMDApOwogCX0KIAorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tY19zZW5kX2NtZChzdHJ1Y3QgbW1jICptbWMsIHN0cnVjdCBtbWNfY21kICpjbWQsCisJCQlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gKHN0cnVjdCBtbWNfaG9zdCAqKW1tYy0+cHJpdjsKKwlpbnQgZmxhZ3MsIGk7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1bnNpZ25lZCBpbnQgcmV0cnkgPSAweDEwMDAwMDsKKwlkZWJ1ZygiIG1tY19zZW5kX2NtZCBjYWxsZWRcbiIpOworCisJcmVzdWx0ID0gbW1jX3dhaXRfaW5oaWJpdChob3N0LCBjbWQsIGRhdGEsIDEwIC8qIG1zICovKTsKKworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCiAJaWYgKGRhdGEpCiAJCW1tY19wcmVwYXJlX2RhdGEoaG9zdCwgZGF0YSk7CiAKQEAgLTE3NSwyMCArMTg3LDIwIEBACiAJICoJMTEgPSBMZW5ndGggNDggQ2hlY2sgYnVzeSBhZnRlciByZXNwb25zZQogCSAqLwogCWlmICghKGNtZC0+cmVzcF90eXBlICYgTU1DX1JTUF9QUkVTRU5UKSkKLQkJZmxhZ3MgPSAwOworCQlmbGFncyA9IFRFR1JBX01NQ19DTURSRUdfUkVTUF9UWVBFX1NFTEVDVF9OT19SRVNQT05TRTsKIAllbHNlIGlmIChjbWQtPnJlc3BfdHlwZSAmIE1NQ19SU1BfMTM2KQotCQlmbGFncyA9ICgxIDw8IDApOworCQlmbGFncyA9IFRFR1JBX01NQ19DTURSRUdfUkVTUF9UWVBFX1NFTEVDVF9MRU5HVEhfMTM2OwogCWVsc2UgaWYgKGNtZC0+cmVzcF90eXBlICYgTU1DX1JTUF9CVVNZKQotCQlmbGFncyA9ICgzIDw8IDApOworCQlmbGFncyA9IFRFR1JBX01NQ19DTURSRUdfUkVTUF9UWVBFX1NFTEVDVF9MRU5HVEhfNDhfQlVTWTsKIAllbHNlCi0JCWZsYWdzID0gKDIgPDwgMCk7CisJCWZsYWdzID0gVEVHUkFfTU1DX0NNRFJFR19SRVNQX1RZUEVfU0VMRUNUX0xFTkdUSF80ODsKIAogCWlmIChjbWQtPnJlc3BfdHlwZSAmIE1NQ19SU1BfQ1JDKQotCQlmbGFncyB8PSAoMSA8PCAzKTsKKwkJZmxhZ3MgfD0gVEVHUkFfTU1DX1RSTk1PRF9DTURfQ1JDX0NIRUNLOwogCWlmIChjbWQtPnJlc3BfdHlwZSAmIE1NQ19SU1BfT1BDT0RFKQotCQlmbGFncyB8PSAoMSA8PCA0KTsKKwkJZmxhZ3MgfD0gVEVHUkFfTU1DX1RSTk1PRF9DTURfSU5ERVhfQ0hFQ0s7CiAJaWYgKGRhdGEpCi0JCWZsYWdzIHw9ICgxIDw8IDUpOworCQlmbGFncyB8PSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfUFJFU0VOVF9TRUxFQ1RfREFUQV9UUkFOU0ZFUjsKIAogCWRlYnVnKCJjbWQ6ICVkXG4iLCBjbWQtPmNtZGlkeCk7CiAKQEAgLTE5Nyw3ICsyMDksNyBAQAogCWZvciAoaSA9IDA7IGkgPCByZXRyeTsgaSsrKSB7CiAJCW1hc2sgPSByZWFkbCgmaG9zdC0+cmVnLT5ub3JpbnRzdHMpOwogCQkvKiBDb21tYW5kIENvbXBsZXRlICovCi0JCWlmIChtYXNrICYgKDEgPDwgMCkpIHsKKwkJaWYgKG1hc2sgJiBURUdSQV9NTUNfTk9SSU5UU1RTX0NNRF9DT01QTEVURSkgewogCQkJaWYgKCFkYXRhKQogCQkJCXdyaXRlbChtYXNrLCAmaG9zdC0+cmVnLT5ub3JpbnRzdHMpOwogCQkJYnJlYWs7CkBAIC0yMDksMTEgKzIyMSwxMSBAQAogCQlyZXR1cm4gVElNRU9VVDsKIAl9CiAKLQlpZiAobWFzayAmICgxIDw8IDE2KSkgeworCWlmIChtYXNrICYgVEVHUkFfTU1DX05PUklOVFNUU19DTURfVElNRU9VVCkgewogCQkvKiBUaW1lb3V0IEVycm9yICovCiAJCWRlYnVnKCJ0aW1lb3V0OiAlMDh4IGNtZCAlZFxuIiwgbWFzaywgY21kLT5jbWRpZHgpOwogCQlyZXR1cm4gVElNRU9VVDsKLQl9IGVsc2UgaWYgKG1hc2sgJiAoMSA8PCAxNSkpIHsKKwl9IGVsc2UgaWYgKG1hc2sgJiBURUdSQV9NTUNfTk9SSU5UU1RTX0VSUl9JTlRFUlJVUFQpIHsKIAkJLyogRXJyb3IgSW50ZXJydXB0ICovCiAJCWRlYnVnKCJlcnJvcjogJTA4eCBjbWQgJWRcbiIsIG1hc2ssIGNtZC0+Y21kaWR4KTsKIAkJcmV0dXJuIC0xOwpAQCAtMjU2LDIzICsyNjgsNDQgQEAKIAl9CiAKIAlpZiAoZGF0YSkgeworCQl1bnNpZ25lZCBsb25nCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCiAJCXdoaWxlICgxKSB7CiAJCQltYXNrID0gcmVhZGwoJmhvc3QtPnJlZy0+bm9yaW50c3RzKTsKIAotCQkJaWYgKG1hc2sgJiAoMSA8PCAxNSkpIHsKKwkJCWlmIChtYXNrICYgVEVHUkFfTU1DX05PUklOVFNUU19FUlJfSU5URVJSVVBUKSB7CiAJCQkJLyogRXJyb3IgSW50ZXJydXB0ICovCiAJCQkJd3JpdGVsKG1hc2ssICZob3N0LT5yZWctPm5vcmludHN0cyk7CiAJCQkJcHJpbnRmKCIlczogZXJyb3IgZHVyaW5nIHRyYW5zZmVyOiAweCUwOHhcbiIsCiAJCQkJCQlfX2Z1bmNfXywgbWFzayk7CiAJCQkJcmV0dXJuIC0xOwotCQkJfSBlbHNlIGlmIChtYXNrICYgKDEgPDwgMykpIHsKLQkJCQkvKiBETUEgSW50ZXJydXB0ICovCisJCQl9IGVsc2UgaWYgKG1hc2sgJiBURUdSQV9NTUNfTk9SSU5UU1RTX0RNQV9JTlRFUlJVUFQpIHsKKwkJCQkvKgorCQkJCSAqIERNQSBJbnRlcnJ1cHQsIHJlc3RhcnQgdGhlIHRyYW5zZmVyIHdoZXJlCisJCQkJICogaXQgd2FzIGludGVycnVwdGVkLgorCQkJCSAqLworCQkJCXVuc2lnbmVkIGludCBhZGRyZXNzID0gcmVhZGwoJmhvc3QtPnJlZy0+c3lzYWQpOworCiAJCQkJZGVidWcoIkRNQSBlbmRcbiIpOwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIGlmIChtYXNrICYgKDEgPDwgMSkpIHsKKwkJCQl3cml0ZWwoVEVHUkFfTU1DX05PUklOVFNUU19ETUFfSU5URVJSVVBULAorCQkJCSAgICAgICAmaG9zdC0+cmVnLT5ub3JpbnRzdHMpOworCQkJCXdyaXRlbChhZGRyZXNzLCAmaG9zdC0+cmVnLT5zeXNhZCk7CisJCQl9IGVsc2UgaWYgKG1hc2sgJiBURUdSQV9NTUNfTk9SSU5UU1RTX1hGRVJfQ09NUExFVEUpIHsKIAkJCQkvKiBUcmFuc2ZlciBDb21wbGV0ZSAqLwogCQkJCWRlYnVnKCJyL3cgaXMgZG9uZVxuIik7CiAJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGdldF90aW1lcihzdGFydCkgPiAyMDAwVUwpIHsKKwkJCQl3cml0ZWwobWFzaywgJmhvc3QtPnJlZy0+bm9yaW50c3RzKTsKKwkJCQlwcmludGYoIiVzOiBNTUMgVGltZW91dFxuIgorCQkJCSAgICAgICAiICAgIEludGVycnVwdCBzdGF0dXMgICAgICAgIDB4JTA4eFxuIgorCQkJCSAgICAgICAiICAgIEludGVycnVwdCBzdGF0dXMgZW5hYmxlIDB4JTA4eFxuIgorCQkJCSAgICAgICAiICAgIEludGVycnVwdCBzaWduYWwgZW5hYmxlIDB4JTA4eFxuIgorCQkJCSAgICAgICAiICAgIFByZXNlbnQgc3RhdHVzICAgICAgICAgIDB4JTA4eFxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sIG1hc2ssCisJCQkJICAgICAgIHJlYWRsKCZob3N0LT5yZWctPm5vcmludHN0c2VuKSwKKwkJCQkgICAgICAgcmVhZGwoJmhvc3QtPnJlZy0+bm9yaW50c2lnZW4pLAorCQkJCSAgICAgICByZWFkbCgmaG9zdC0+cmVnLT5wcm5zdHMpKTsKKwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0KIAkJd3JpdGVsKG1hc2ssICZob3N0LT5yZWctPm5vcmludHN0cyk7CkBAIC0zMTAsMTIgKzM0MywxNCBAQAogCSAqIEVOSU5UQ0xLWzBdCQk6IEludGVybmFsIENsb2NrIEVuYWJsZQogCSAqLwogCWRpdiA+Pj0gMTsKLQljbGsgPSAoZGl2IDw8IDgpIHwgKDEgPDwgMCk7CisJY2xrID0gKChkaXYgPDwgVEVHUkFfTU1DX0NMS0NPTl9TRENMS19GUkVRX1NFTF9TSElGVCkgfAorCSAgICAgICBURUdSQV9NTUNfQ0xLQ09OX0lOVEVSTkFMX0NMT0NLX0VOQUJMRSk7CiAJd3JpdGV3KGNsaywgJmhvc3QtPnJlZy0+Y2xrY29uKTsKIAogCS8qIFdhaXQgbWF4IDEwIG1zICovCiAJdGltZW91dCA9IDEwOwotCXdoaWxlICghKHJlYWR3KCZob3N0LT5yZWctPmNsa2NvbikgJiAoMSA8PCAxKSkpIHsKKwl3aGlsZSAoIShyZWFkdygmaG9zdC0+cmVnLT5jbGtjb24pICYKKwkJIFRFR1JBX01NQ19DTEtDT05fSU5URVJOQUxfQ0xPQ0tfU1RBQkxFKSkgewogCQlpZiAodGltZW91dCA9PSAwKSB7CiAJCQlwcmludGYoIiVzOiB0aW1lb3V0IGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CkBAIC0zMjQsNyArMzU5LDcgQEAKIAkJdWRlbGF5KDEwMDApOwogCX0KIAotCWNsayB8PSAoMSA8PCAyKTsKKwljbGsgfD0gVEVHUkFfTU1DX0NMS0NPTl9TRF9DTE9DS19FTkFCTEU7CiAJd3JpdGV3KGNsaywgJmhvc3QtPnJlZy0+Y2xrY29uKTsKIAogCWRlYnVnKCJtbWNfY2hhbmdlX2Nsb2NrOiBjbGtjb24gPSAlMDhYXG4iLCBjbGspOwpAQCAtMzc1LDcgKzQxMCw3IEBACiAJICogMSA9IHJlc2V0CiAJICogMCA9IHdvcmsKIAkgKi8KLQl3cml0ZWIoKDEgPDwgMCksICZob3N0LT5yZWctPnN3cnN0KTsKKwl3cml0ZWIoVEVHUkFfTU1DX1NXUlNUX1NXX1JFU0VUX0ZPUl9BTEwsICZob3N0LT5yZWctPnN3cnN0KTsKIAogCWhvc3QtPmNsb2NrID0gMDsKIApAQCAtMzgzLDcgKzQxOCw3IEBACiAJdGltZW91dCA9IDEwMDsKIAogCS8qIGh3IGNsZWFycyB0aGUgYml0IHdoZW4gaXQncyBkb25lICovCi0Jd2hpbGUgKHJlYWRiKCZob3N0LT5yZWctPnN3cnN0KSAmICgxIDw8IDApKSB7CisJd2hpbGUgKHJlYWRiKCZob3N0LT5yZWctPnN3cnN0KSAmIFRFR1JBX01NQ19TV1JTVF9TV19SRVNFVF9GT1JfQUxMKSB7CiAJCWlmICh0aW1lb3V0ID09IDApIHsKIAkJCXByaW50ZigiJXM6IHRpbWVvdXQgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybjsKQEAgLTQxMywxMiArNDQ4LDE3IEBACiAJICogTk9STUFMIEludGVycnVwdCBTdGF0dXMgRW5hYmxlIFJlZ2lzdGVyIGluaXQKIAkgKiBbNV0gRU5TVEFCVUZSRFJEWSA6IEJ1ZmZlciBSZWFkIFJlYWR5IFN0YXR1cyBFbmFibGUKIAkgKiBbNF0gRU5TVEFCVUZXVFJEWSA6IEJ1ZmZlciB3cml0ZSBSZWFkeSBTdGF0dXMgRW5hYmxlCisJICogWzNdIEVOU1RBRE1BSU5UICAgOiBETUEgYm91bmRhcnkgaW50ZXJydXB0CiAJICogWzFdIEVOU1RBU1RBTlNDTVBMVCA6IFRyYW5zZnJlIENvbXBsZXRlIFN0YXR1cyBFbmFibGUKIAkgKiBbMF0gRU5TVEFDTURDTVBMVCA6IENvbW1hbmQgQ29tcGxldGUgU3RhdHVzIEVuYWJsZQogCSovCiAJbWFzayA9IHJlYWRsKCZob3N0LT5yZWctPm5vcmludHN0c2VuKTsKIAltYXNrICY9IH4oMHhmZmZmKTsKLQltYXNrIHw9ICgxIDw8IDUpIHwgKDEgPDwgNCkgfCAoMSA8PCAxKSB8ICgxIDw8IDApOworCW1hc2sgfD0gKFRFR1JBX01NQ19OT1JJTlRTVFNFTl9DTURfQ09NUExFVEUgfAorCQkgVEVHUkFfTU1DX05PUklOVFNUU0VOX1hGRVJfQ09NUExFVEUgfAorCQkgVEVHUkFfTU1DX05PUklOVFNUU0VOX0RNQV9JTlRFUlJVUFQgfAorCQkgVEVHUkFfTU1DX05PUklOVFNUU0VOX0JVRkZFUl9XUklURV9SRUFEWSB8CisJCSBURUdSQV9NTUNfTk9SSU5UU1RTRU5fQlVGRkVSX1JFQURfUkVBRFkpOwogCXdyaXRlbChtYXNrLCAmaG9zdC0+cmVnLT5ub3JpbnRzdHNlbik7CiAKIAkvKgpAQCAtNDI3LDcgKzQ2Nyw3IEBACiAJICovCiAJbWFzayA9IHJlYWRsKCZob3N0LT5yZWctPm5vcmludHNpZ2VuKTsKIAltYXNrICY9IH4oMHhmZmZmKTsKLQltYXNrIHw9ICgxIDw8IDEpOworCW1hc2sgfD0gVEVHUkFfTU1DX05PUklOVFNJR0VOX1hGRVJfQ09NUExFVEU7CiAJd3JpdGVsKG1hc2ssICZob3N0LT5yZWctPm5vcmludHNpZ2VuKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvdGVncmEyX21tYy5oIGIvZHJpdmVycy9tbWMvdGVncmEyX21tYy5oCmluZGV4IDI4Njk4ZTAuLjY3MTU4M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3RlZ3JhMl9tbWMuaAorKysgYi9kcml2ZXJzL21tYy90ZWdyYTJfbW1jLmgKQEAgLTY4LDYgKzY4LDU1IEBACiAJdW5zaWduZWQgY2hhcglyZXM2WzB4MTAwXTsJLyogUkVTRVJWRUQsIG9mZnNldCAxMDBoLTFGRmggKi8KIH07CiAKKyNkZWZpbmUgVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX01BU0sJCQkJKDMgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX1NETUEJCQkJKDAgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX0FETUEyXzMyQklUCQkJKDIgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX0hPU1RDVExfRE1BU0VMX0FETUEyXzY0QklUCQkJKDMgPDwgMykKKworI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0RNQV9FTkFCTEUJCQkJKDEgPDwgMCkKKyNkZWZpbmUgVEVHUkFfTU1DX1RSTk1PRF9CTE9DS19DT1VOVF9FTkFCTEUJCQkoMSA8PCAxKQorI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfWEZFUl9ESVJfU0VMX1dSSVRFCQkoMCA8PCA0KQorI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfWEZFUl9ESVJfU0VMX1JFQUQJCQkoMSA8PCA0KQorI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX01VTFRJX0JMT0NLX1NFTEVDVAkJCSgxIDw8IDUpCisKKyNkZWZpbmUgVEVHUkFfTU1DX0NNRFJFR19SRVNQX1RZUEVfU0VMRUNUX01BU0sJCQkoMyA8PCAwKQorI2RlZmluZSBURUdSQV9NTUNfQ01EUkVHX1JFU1BfVFlQRV9TRUxFQ1RfTk9fUkVTUE9OU0UJCSgwIDw8IDApCisjZGVmaW5lIFRFR1JBX01NQ19DTURSRUdfUkVTUF9UWVBFX1NFTEVDVF9MRU5HVEhfMTM2CQkoMSA8PCAwKQorI2RlZmluZSBURUdSQV9NTUNfQ01EUkVHX1JFU1BfVFlQRV9TRUxFQ1RfTEVOR1RIXzQ4CQkoMiA8PCAwKQorI2RlZmluZSBURUdSQV9NTUNfQ01EUkVHX1JFU1BfVFlQRV9TRUxFQ1RfTEVOR1RIXzQ4X0JVU1kJKDMgPDwgMCkKKworI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0NNRF9DUkNfQ0hFQ0sJCQkJKDEgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX1RSTk1PRF9DTURfSU5ERVhfQ0hFQ0sJCQkoMSA8PCA0KQorI2RlZmluZSBURUdSQV9NTUNfVFJOTU9EX0RBVEFfUFJFU0VOVF9TRUxFQ1RfREFUQV9UUkFOU0ZFUgkoMSA8PCA1KQorCisjZGVmaW5lIFRFR1JBX01NQ19QUk5TVFNfQ01EX0lOSElCSVRfQ01ECQkJKDEgPDwgMCkKKyNkZWZpbmUgVEVHUkFfTU1DX1BSTlNUU19DTURfSU5ISUJJVF9EQVQJCQkoMSA8PCAxKQorCisjZGVmaW5lIFRFR1JBX01NQ19DTEtDT05fSU5URVJOQUxfQ0xPQ0tfRU5BQkxFCQkJKDEgPDwgMCkKKyNkZWZpbmUgVEVHUkFfTU1DX0NMS0NPTl9JTlRFUk5BTF9DTE9DS19TVEFCTEUJCQkoMSA8PCAxKQorI2RlZmluZSBURUdSQV9NTUNfQ0xLQ09OX1NEX0NMT0NLX0VOQUJMRQkJCSgxIDw8IDIpCisKKyNkZWZpbmUgVEVHUkFfTU1DX0NMS0NPTl9TRENMS19GUkVRX1NFTF9TSElGVAkJCTgKKyNkZWZpbmUgVEVHUkFfTU1DX0NMS0NPTl9TRENMS19GUkVRX1NFTF9NQVNLCQkJKDB4ZmYgPDwgOCkKKworI2RlZmluZSBURUdSQV9NTUNfU1dSU1RfU1dfUkVTRVRfRk9SX0FMTAkJCSgxIDw8IDApCisjZGVmaW5lIFRFR1JBX01NQ19TV1JTVF9TV19SRVNFVF9GT1JfQ01EX0xJTkUJCQkoMSA8PCAxKQorI2RlZmluZSBURUdSQV9NTUNfU1dSU1RfU1dfUkVTRVRfRk9SX0RBVF9MSU5FCQkJKDEgPDwgMikKKworI2RlZmluZSBURUdSQV9NTUNfTk9SSU5UU1RTX0NNRF9DT01QTEVURQkJCSgxIDw8IDApCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNfWEZFUl9DT01QTEVURQkJCSgxIDw8IDEpCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNfRE1BX0lOVEVSUlVQVAkJCSgxIDw8IDMpCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNfRVJSX0lOVEVSUlVQVAkJCSgxIDw8IDE1KQorI2RlZmluZSBURUdSQV9NTUNfTk9SSU5UU1RTX0NNRF9USU1FT1VUCQkJCSgxIDw8IDE2KQorCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNFTl9DTURfQ09NUExFVEUJCQkoMSA8PCAwKQorI2RlZmluZSBURUdSQV9NTUNfTk9SSU5UU1RTRU5fWEZFUl9DT01QTEVURQkJCSgxIDw8IDEpCisjZGVmaW5lIFRFR1JBX01NQ19OT1JJTlRTVFNFTl9ETUFfSU5URVJSVVBUCQkJKDEgPDwgMykKKyNkZWZpbmUgVEVHUkFfTU1DX05PUklOVFNUU0VOX0JVRkZFUl9XUklURV9SRUFEWQkJKDEgPDwgNCkKKyNkZWZpbmUgVEVHUkFfTU1DX05PUklOVFNUU0VOX0JVRkZFUl9SRUFEX1JFQURZCQkJKDEgPDwgNSkKKworI2RlZmluZSBURUdSQV9NTUNfTk9SSU5UU0lHRU5fWEZFUl9DT01QTEVURQkJCSgxIDw8IDEpCisKIHN0cnVjdCBtbWNfaG9zdCB7CiAJc3RydWN0IHRlZ3JhMl9tbWMgKnJlZzsKIAl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJLyogU0RIQ0kgc3BlYy4gdmVyc2lvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGF0YWZsYXNoLmMgYi9kcml2ZXJzL210ZC9kYXRhZmxhc2guYwppbmRleCA5NmNkMzk1Li45ODFjY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kYXRhZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9kYXRhZmxhc2guYwpAQCAtMzksNyArMzksNiBAQAogCWludCBpLCBqOwogCWludCBkZmNvZGU7CiAJaW50IHBhcnQ7Ci0JaW50IGxhc3RfcGFydDsKIAlpbnQgZm91bmRbQ09ORklHX1NZU19NQVhfREFUQUZMQVNIX0JBTktTXTsKIAl1bnNpZ25lZCBjaGFyIHByb3RlY3RlZDsKIApAQCAtMTM2LDcgKzEzNSw2IEBACiAJCQkJZGF0YWZsYXNoX2luZm9baV0uRGV2aWNlLnBhZ2VzX3NpemUpIC0gMTsKIAogCQlwYXJ0ID0gMDsKLQkJbGFzdF9wYXJ0ID0gMDsKIAkJLyogc2V0IHRoZSBhcmVhIGFkZHJlc3NlcyAqLwogCQlmb3IoaiA9IDA7IGogPCBOQl9EQVRBRkxBU0hfQVJFQTsgaisrKSB7CiAJCQlpZihmb3VuZFtpXSE9MCkgewpAQCAtMTQ3LDcgKzE0NSw2IEBACiAJCQkJCWRhdGFmbGFzaF9pbmZvW2ldLkRldmljZS5hcmVhX2xpc3Rbal0uZW5kID0KIAkJCQkJCWRhdGFmbGFzaF9pbmZvW2ldLmVuZF9hZGRyZXNzICsKIAkJCQkJCWRhdGFmbGFzaF9pbmZvW2ldLmxvZ2ljYWxfYWRkcmVzczsKLQkJCQkJbGFzdF9wYXJ0ID0gMTsKIAkJCQl9IGVsc2UgewogCQkJCQlkYXRhZmxhc2hfaW5mb1tpXS5EZXZpY2UuYXJlYV9saXN0W2pdLmVuZCA9CiAJCQkJCQlhcmVhX2xpc3RbcGFydF0uZW5kICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCmluZGV4IDI4YmQzNTAuLjM2ZWU0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQpAQCAtNTQsNiArNTQsNyBAQAogQ09CSlMtJChDT05GSUdfTkFORF9LTUVURVIxKSArPSBrbWV0ZXIxX25hbmQubwogQ09CSlMtJChDT05GSUdfTkFORF9NUEM1MTIxX05GQykgKz0gbXBjNTEyMV9uZmMubwogQ09CSlMtJChDT05GSUdfTkFORF9NWEMpICs9IG14Y19uYW5kLm8KK0NPQkpTLSQoQ09ORklHX05BTkRfTVhTKSArPSBteHNfbmFuZC5vCiBDT0JKUy0kKENPTkZJR19OQU5EX05ERkMpICs9IG5kZmMubwogQ09CSlMtJChDT05GSUdfTkFORF9OT01BRElLKSArPSBub21hZGlrLm8KIENPQkpTLSQoQ09ORklHX05BTkRfUzNDMjQxMCkgKz0gczNjMjQxMF9uYW5kLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbXhzX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbXhzX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTJhMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9teHNfbmFuZC5jCkBAIC0wLDAgKzEsMTExOCBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggTkFORCBmbGFzaCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gTFRJQjoKKyAqIEZyZWVzY2FsZSBHUE1JIE5GQyBOQU5EIEZsYXNoIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pbXgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c19wcm90by5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorCisjZGVmaW5lCU1YU19OQU5EX0RNQV9ERVNDUklQVE9SX0NPVU5UCQk0CisKKyNkZWZpbmUJTVhTX05BTkRfQ0hVTktfREFUQV9DSFVOS19TSVpFCQk1MTIKKyNkZWZpbmUJTVhTX05BTkRfTUVUQURBVEFfU0laRQkJCTEwCisKKyNkZWZpbmUJTVhTX05BTkRfQ09NTUFORF9CVUZGRVJfU0laRQkJMzIKKworI2RlZmluZQlNWFNfTkFORF9CQ0hfVElNRU9VVAkJCTEwMDAwCisKK3N0cnVjdCBteHNfbmFuZF9pbmZvIHsKKwlpbnQJCWN1cl9jaGlwOworCisJdWludDMyX3QJY21kX3F1ZXVlX2xlbjsKKworCXVpbnQ4X3QJCSpjbWRfYnVmOworCXVpbnQ4X3QJCSpkYXRhX2J1ZjsKKwl1aW50OF90CQkqb29iX2J1ZjsKKworCXVpbnQ4X3QJCW1hcmtpbmdfYmxvY2tfYmFkOworCXVpbnQ4X3QJCXJhd19vb2JfbW9kZTsKKworCS8qIEZ1bmN0aW9ucyB3aXRoIGFsdGVyZWQgYmVoYXZpb3VyICovCisJaW50CQkoKmhvb2tlZF9yZWFkX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJbG9mZl90IGZyb20sIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKKwlpbnQJCSgqaG9va2VkX3dyaXRlX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJbG9mZl90IHRvLCBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CisJaW50CQkoKmhvb2tlZF9ibG9ja19tYXJrYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQlsb2ZmX3Qgb2ZzKTsKKworCS8qIERNQSBkZXNjcmlwdG9ycyAqLworCXN0cnVjdCBteHNfZG1hX2Rlc2MJKipkZXNjOworCXVpbnQzMl90CQlkZXNjX2luZGV4OworfTsKKworc3RydWN0IG5hbmRfZWNjbGF5b3V0IGZha2VfZWNjX2xheW91dDsKKworc3RhdGljIHN0cnVjdCBteHNfZG1hX2Rlc2MgKm14c19uYW5kX2dldF9kbWFfZGVzYyhzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpkZXNjOworCisJaWYgKGluZm8tPmRlc2NfaW5kZXggPj0gTVhTX05BTkRfRE1BX0RFU0NSSVBUT1JfQ09VTlQpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogVG9vIG1hbnkgRE1BIGRlc2NyaXB0b3JzIHJlcXVlc3RlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWRlc2MgPSBpbmZvLT5kZXNjW2luZm8tPmRlc2NfaW5kZXhdOworCWluZm8tPmRlc2NfaW5kZXgrKzsKKworCXJldHVybiBkZXNjOworfQorCitzdGF0aWMgdm9pZCBteHNfbmFuZF9yZXR1cm5fZG1hX2Rlc2NzKHN0cnVjdCBteHNfbmFuZF9pbmZvICppbmZvKQoreworCWludCBpOworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmRlc2M7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ZGVzY19pbmRleDsgaSsrKSB7CisJCWRlc2MgPSBpbmZvLT5kZXNjW2ldOworCQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBteHNfZG1hX2Rlc2MpKTsKKwkJZGVzYy0+YWRkcmVzcyA9IChkbWFfYWRkcl90KWRlc2M7CisJfQorCisJaW5mby0+ZGVzY19pbmRleCA9IDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBteHNfbmFuZF9lY2NfY2h1bmtfY250KHVpbnQzMl90IHBhZ2VfZGF0YV9zaXplKQoreworCXJldHVybiBwYWdlX2RhdGFfc2l6ZSAvIE1YU19OQU5EX0NIVU5LX0RBVEFfQ0hVTktfU0laRTsKK30KKworc3RhdGljIHVpbnQzMl90IG14c19uYW5kX2VjY19zaXplX2luX2JpdHModWludDMyX3QgZWNjX3N0cmVuZ3RoKQoreworCXJldHVybiBlY2Nfc3RyZW5ndGggKiAxMzsKK30KKworc3RhdGljIHVpbnQzMl90IG14c19uYW5kX2F1eF9zdGF0dXNfb2Zmc2V0KHZvaWQpCit7CisJcmV0dXJuIChNWFNfTkFORF9NRVRBREFUQV9TSVpFICsgMHgzKSAmIH4weDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbXhzX25hbmRfZ2V0X2VjY19zdHJlbmd0aCh1aW50MzJfdCBwYWdlX2RhdGFfc2l6ZSwKKwkJCQkJCXVpbnQzMl90IHBhZ2Vfb29iX3NpemUpCit7CisJaWYgKHBhZ2VfZGF0YV9zaXplID09IDIwNDgpCisJCXJldHVybiA4OworCisJaWYgKHBhZ2VfZGF0YV9zaXplID09IDQwOTYpIHsKKwkJaWYgKHBhZ2Vfb29iX3NpemUgPT0gMTI4KQorCQkJcmV0dXJuIDg7CisKKwkJaWYgKHBhZ2Vfb29iX3NpemUgPT0gMjE4KQorCQkJcmV0dXJuIDE2OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG14c19uYW5kX2dldF9tYXJrX29mZnNldCh1aW50MzJfdCBwYWdlX2RhdGFfc2l6ZSwKKwkJCQkJCXVpbnQzMl90IGVjY19zdHJlbmd0aCkKK3sKKwl1aW50MzJfdCBjaHVua19kYXRhX3NpemVfaW5fYml0czsKKwl1aW50MzJfdCBjaHVua19lY2Nfc2l6ZV9pbl9iaXRzOworCXVpbnQzMl90IGNodW5rX3RvdGFsX3NpemVfaW5fYml0czsKKwl1aW50MzJfdCBibG9ja19tYXJrX2NodW5rX251bWJlcjsKKwl1aW50MzJfdCBibG9ja19tYXJrX2NodW5rX2JpdF9vZmZzZXQ7CisJdWludDMyX3QgYmxvY2tfbWFya19iaXRfb2Zmc2V0OworCisJY2h1bmtfZGF0YV9zaXplX2luX2JpdHMgPSBNWFNfTkFORF9DSFVOS19EQVRBX0NIVU5LX1NJWkUgKiA4OworCWNodW5rX2VjY19zaXplX2luX2JpdHMgID0gbXhzX25hbmRfZWNjX3NpemVfaW5fYml0cyhlY2Nfc3RyZW5ndGgpOworCisJY2h1bmtfdG90YWxfc2l6ZV9pbl9iaXRzID0KKwkJCWNodW5rX2RhdGFfc2l6ZV9pbl9iaXRzICsgY2h1bmtfZWNjX3NpemVfaW5fYml0czsKKworCS8qIENvbXB1dGUgdGhlIGJpdCBvZmZzZXQgb2YgdGhlIGJsb2NrIG1hcmsgd2l0aGluIHRoZSBwaHlzaWNhbCBwYWdlLiAqLworCWJsb2NrX21hcmtfYml0X29mZnNldCA9IHBhZ2VfZGF0YV9zaXplICogODsKKworCS8qIFN1YnRyYWN0IHRoZSBtZXRhZGF0YSBiaXRzLiAqLworCWJsb2NrX21hcmtfYml0X29mZnNldCAtPSBNWFNfTkFORF9NRVRBREFUQV9TSVpFICogODsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgY2h1bmsgbnVtYmVyIChzdGFydGluZyBhdCB6ZXJvKSBpbiB3aGljaCB0aGUgYmxvY2sgbWFyaworCSAqIGFwcGVhcnMuCisJICovCisJYmxvY2tfbWFya19jaHVua19udW1iZXIgPQorCQkJYmxvY2tfbWFya19iaXRfb2Zmc2V0IC8gY2h1bmtfdG90YWxfc2l6ZV9pbl9iaXRzOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBiaXQgb2Zmc2V0IG9mIHRoZSBibG9jayBtYXJrIHdpdGhpbiBpdHMgY2h1bmssIGFuZAorCSAqIHZhbGlkYXRlIGl0LgorCSAqLworCWJsb2NrX21hcmtfY2h1bmtfYml0X29mZnNldCA9IGJsb2NrX21hcmtfYml0X29mZnNldCAtCisJCQkoYmxvY2tfbWFya19jaHVua19udW1iZXIgKiBjaHVua190b3RhbF9zaXplX2luX2JpdHMpOworCisJaWYgKGJsb2NrX21hcmtfY2h1bmtfYml0X29mZnNldCA+IGNodW5rX2RhdGFfc2l6ZV9pbl9iaXRzKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogTm93IHRoYXQgd2Uga25vdyB0aGUgY2h1bmsgbnVtYmVyIGluIHdoaWNoIHRoZSBibG9jayBtYXJrIGFwcGVhcnMsCisJICogd2UgY2FuIHN1YnRyYWN0IGFsbCB0aGUgRUNDIGJpdHMgdGhhdCBhcHBlYXIgYmVmb3JlIGl0LgorCSAqLworCWJsb2NrX21hcmtfYml0X29mZnNldCAtPQorCQlibG9ja19tYXJrX2NodW5rX251bWJlciAqIGNodW5rX2VjY19zaXplX2luX2JpdHM7CisKKwlyZXR1cm4gYmxvY2tfbWFya19iaXRfb2Zmc2V0OworfQorCitzdGF0aWMgdWludDMyX3QgbXhzX25hbmRfbWFya19ieXRlX29mZnNldChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwl1aW50MzJfdCBlY2Nfc3RyZW5ndGg7CisJZWNjX3N0cmVuZ3RoID0gbXhzX25hbmRfZ2V0X2VjY19zdHJlbmd0aChtdGQtPndyaXRlc2l6ZSwgbXRkLT5vb2JzaXplKTsKKwlyZXR1cm4gbXhzX25hbmRfZ2V0X21hcmtfb2Zmc2V0KG10ZC0+d3JpdGVzaXplLCBlY2Nfc3RyZW5ndGgpID4+IDM7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBteHNfbmFuZF9tYXJrX2JpdF9vZmZzZXQoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJdWludDMyX3QgZWNjX3N0cmVuZ3RoOworCWVjY19zdHJlbmd0aCA9IG14c19uYW5kX2dldF9lY2Nfc3RyZW5ndGgobXRkLT53cml0ZXNpemUsIG10ZC0+b29ic2l6ZSk7CisJcmV0dXJuIG14c19uYW5kX2dldF9tYXJrX29mZnNldChtdGQtPndyaXRlc2l6ZSwgZWNjX3N0cmVuZ3RoKSAmIDB4NzsKK30KKworLyoKKyAqIFdhaXQgZm9yIEJDSCBjb21wbGV0ZSBJUlEgYW5kIGNsZWFyIHRoZSBJUlEKKyAqLworc3RhdGljIGludCBteHNfbmFuZF93YWl0X2Zvcl9iY2hfY29tcGxldGUodm9pZCkKK3sKKwlzdHJ1Y3QgbXgyOF9iY2hfcmVncyAqYmNoX3JlZ3MgPSAoc3RydWN0IG14MjhfYmNoX3JlZ3MgKilNWFNfQkNIX0JBU0U7CisJaW50IHRpbWVvdXQgPSBNWFNfTkFORF9CQ0hfVElNRU9VVDsKKwlpbnQgcmV0OworCisJcmV0ID0gbXgyOF93YWl0X21hc2tfc2V0KCZiY2hfcmVncy0+aHdfYmNoX2N0cmxfcmVnLAorCQlCQ0hfQ1RSTF9DT01QTEVURV9JUlEsIHRpbWVvdXQpOworCisJd3JpdGVsKEJDSF9DVFJMX0NPTVBMRVRFX0lSUSwgJmJjaF9yZWdzLT5od19iY2hfY3RybF9jbHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2UgaW5zdGFsbCBpbiB0aGUgY21kX2N0cmwgZnVuY3Rpb24gcG9pbnRlciBvZiB0aGUKKyAqIG93bmluZyBzdHJ1Y3QgbmFuZF9jaGlwLiBUaGUgb25seSBmdW5jdGlvbnMgaW4gdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorICogdGhhdCB1c2UgdGhlc2UgZnVuY3Rpb25zIHBvaW50ZXJzIGFyZSBjbWRmdW5jIGFuZCBzZWxlY3RfY2hpcC4KKyAqCisgKiBJbiB0aGlzIGRyaXZlciwgd2UgaW1wbGVtZW50IG91ciBvd24gc2VsZWN0X2NoaXAsIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5CisgKiBiZSBjYWxsZWQgYnkgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbidzIGNtZGZ1bmMuIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuCisgKiBpZ25vcmUgdGhlIGNoaXAgZW5hYmxlIGJpdCBhbmQgY29uY2VudHJhdGUgb25seSBvbiBzZW5kaW5nIGJ5dGVzIHRvIHRoZSBOQU5ECisgKiBGbGFzaC4KKyAqLworc3RhdGljIHZvaWQgbXhzX25hbmRfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBkYXRhLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0gbXRkLT5wcml2OworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBuYW5kLT5wcml2OworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmQ7CisJdWludDMyX3QgY2hhbm5lbCA9IE1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMCArIG5hbmRfaW5mby0+Y3VyX2NoaXA7CisJaW50IHJldDsKKworCS8qCisJICogSWYgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZSwgc29tZXRoaW5nIGlzIF9WRVJZXyB3cm9uZyBpbiBNVEQKKwkgKiBzdWJzeXN0ZW0hCisJICovCisJaWYgKG5hbmRfaW5mby0+Y21kX3F1ZXVlX2xlbiA9PSBNWFNfTkFORF9DT01NQU5EX0JVRkZFUl9TSVpFKSB7CisJCXByaW50ZigiTVhTIE5BTkQ6IENvbW1hbmQgcXVldWUgdG9vIGxvbmdcbiIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBFdmVyeSBvcGVyYXRpb24gYmVnaW5zIHdpdGggYSBjb21tYW5kIGJ5dGUgYW5kIGEgc2VyaWVzIG9mIHplcm8gb3IKKwkgKiBtb3JlIGFkZHJlc3MgYnl0ZXMuIFRoZXNlIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IGVpdGhlciB0aGUgQWRkcmVzcworCSAqIExhdGNoIEVuYWJsZSAoQUxFKSBvciBDb21tYW5kIExhdGNoIEVuYWJsZSAoQ0xFKSBzaWduYWxzIGJlaW5nCisJICogYXNzZXJ0ZWQuIFdoZW4gTVREIGlzIHJlYWR5IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQsIGl0IHdpbGwKKwkgKiBkZWFzZXJ0IGJvdGggbGF0Y2ggZW5hYmxlcy4KKwkgKgorCSAqIFJhdGhlciB0aGFuIHJ1biBhIHNlcGFyYXRlIERNQSBvcGVyYXRpb24gZm9yIGV2ZXJ5IHNpbmdsZSBieXRlLCB3ZQorCSAqIHF1ZXVlIHRoZW0gdXAgYW5kIHJ1biBhIHNpbmdsZSBETUEgb3BlcmF0aW9uIGZvciB0aGUgZW50aXJlIHNlcmllcworCSAqIG9mIGNvbW1hbmQgYW5kIGRhdGEgYnl0ZXMuCisJICovCisJaWYgKGN0cmwgJiAoTkFORF9BTEUgfCBOQU5EX0NMRSkpIHsKKwkJaWYgKGRhdGEgIT0gTkFORF9DTURfTk9ORSkKKwkJCW5hbmRfaW5mby0+Y21kX2J1ZltuYW5kX2luZm8tPmNtZF9xdWV1ZV9sZW4rK10gPSBkYXRhOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiBjb250cm9sIGFycml2ZXMgaGVyZSwgTVREIGhhcyBkZWFzc2VydGVkIGJvdGggdGhlIEFMRSBhbmQgQ0xFLAorCSAqIHdoaWNoIG1lYW5zIGl0J3MgcmVhZHkgdG8gcnVuIGFuIG9wZXJhdGlvbi4gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkKKwkgKiBieXRlcyB0byBzZW5kLgorCSAqLworCWlmIChuYW5kX2luZm8tPmNtZF9xdWV1ZV9sZW4gPT0gMCkKKwkJcmV0dXJuOworCisJLyogQ29tcGlsZSB0aGUgRE1BIGRlc2NyaXB0b3IgLS0gYSBkZXNjcmlwdG9yIHRoYXQgc2VuZHMgY29tbWFuZC4gKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9ETUFfUkVBRCB8IE1YU19ETUFfREVTQ19JUlEgfAorCQlNWFNfRE1BX0RFU0NfQ0hBSU4gfCBNWFNfRE1BX0RFU0NfREVDX1NFTSB8CisJCU1YU19ETUFfREVTQ19XQUlUNEVORCB8ICgzIDw8IE1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUKSB8CisJCShuYW5kX2luZm8tPmNtZF9xdWV1ZV9sZW4gPDwgTVhTX0RNQV9ERVNDX0JZVEVTX09GRlNFVCk7CisKKwlkLT5jbWQuYWRkcmVzcyA9IChkbWFfYWRkcl90KW5hbmRfaW5mby0+Y21kX2J1ZjsKKworCWQtPmNtZC5waW9fd29yZHNbMF0gPQorCQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9XUklURSB8CisJCUdQTUlfQ1RSTDBfV09SRF9MRU5HVEggfAorCQkobmFuZF9pbmZvLT5jdXJfY2hpcCA8PCBHUE1JX0NUUkwwX0NTX09GRlNFVCkgfAorCQlHUE1JX0NUUkwwX0FERFJFU1NfTkFORF9DTEUgfAorCQlHUE1JX0NUUkwwX0FERFJFU1NfSU5DUkVNRU5UIHwKKwkJbmFuZF9pbmZvLT5jbWRfcXVldWVfbGVuOworCisJbXhzX2RtYV9kZXNjX2FwcGVuZChjaGFubmVsLCBkKTsKKworCS8qIEV4ZWN1dGUgdGhlIERNQSBjaGFpbi4gKi8KKwlyZXQgPSBteHNfZG1hX2dvKGNoYW5uZWwpOworCWlmIChyZXQpCisJCXByaW50ZigiTVhTIE5BTkQ6IEVycm9yIHNlbmRpbmcgY29tbWFuZFxuIik7CisKKwlteHNfbmFuZF9yZXR1cm5fZG1hX2Rlc2NzKG5hbmRfaW5mbyk7CisKKwkvKiBSZXNldCB0aGUgY29tbWFuZCBxdWV1ZS4gKi8KKwluYW5kX2luZm8tPmNtZF9xdWV1ZV9sZW4gPSAwOworfQorCisvKgorICogVGVzdCBpZiB0aGUgTkFORCBmbGFzaCBpcyByZWFkeS4KKyAqLworc3RhdGljIGludCBteHNfbmFuZF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gY2hpcC0+cHJpdjsKKwlzdHJ1Y3QgbXgyOF9ncG1pX3JlZ3MgKmdwbWlfcmVncyA9CisJCShzdHJ1Y3QgbXgyOF9ncG1pX3JlZ3MgKilNWFNfR1BNSV9CQVNFOworCXVpbnQzMl90IHRtcDsKKworCXRtcCA9IHJlYWRsKCZncG1pX3JlZ3MtPmh3X2dwbWlfc3RhdCk7CisJdG1wID4+PSAoR1BNSV9TVEFUX1JFQURZX0JVU1lfT0ZGU0VUICsgbmFuZF9pbmZvLT5jdXJfY2hpcCk7CisKKwlyZXR1cm4gdG1wICYgMTsKK30KKworLyoKKyAqIFNlbGVjdCB0aGUgTkFORCBjaGlwLgorICovCitzdGF0aWMgdm9pZCBteHNfbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gbmFuZC0+cHJpdjsKKworCW5hbmRfaW5mby0+Y3VyX2NoaXAgPSBjaGlwOworfQorCisvKgorICogSGFuZGxlIGJsb2NrIG1hcmsgc3dhcHBpbmcuCisgKgorICogTm90ZSB0aGF0LCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCBkb2Vzbid0IGtub3cgd2hldGhlciBpdCdzCisgKiBzd2FwcGluZyB0aGUgYmxvY2sgbWFyaywgb3Igc3dhcHBpbmcgaXQgKmJhY2sqIC0tIGJ1dCBpdCBkb2Vzbid0IG1hdHRlcgorICogYmVjYXVzZSB0aGUgdGhlIG9wZXJhdGlvbiBpcyB0aGUgc2FtZS4KKyAqLworc3RhdGljIHZvaWQgbXhzX25hbmRfc3dhcF9ibG9ja19tYXJrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQl1aW50OF90ICpkYXRhX2J1ZiwgdWludDhfdCAqb29iX2J1ZikKK3sKKwl1aW50MzJfdCBiaXRfb2Zmc2V0OworCXVpbnQzMl90IGJ1Zl9vZmZzZXQ7CisKKwl1aW50MzJfdCBzcmM7CisJdWludDMyX3QgZHN0OworCisJYml0X29mZnNldCA9IG14c19uYW5kX21hcmtfYml0X29mZnNldChtdGQpOworCWJ1Zl9vZmZzZXQgPSBteHNfbmFuZF9tYXJrX2J5dGVfb2Zmc2V0KG10ZCk7CisKKwkvKgorCSAqIEdldCB0aGUgYnl0ZSBmcm9tIHRoZSBkYXRhIGFyZWEgdGhhdCBvdmVybGF5cyB0aGUgYmxvY2sgbWFyay4gU2luY2UKKwkgKiB0aGUgRUNDIGVuZ2luZSBhcHBsaWVzIGl0cyBvd24gdmlldyB0byB0aGUgYml0cyBpbiB0aGUgcGFnZSwgdGhlCisJICogcGh5c2ljYWwgYmxvY2sgbWFyayB3b24ndCAoaW4gZ2VuZXJhbCkgYXBwZWFyIG9uIGEgYnl0ZSBib3VuZGFyeSBpbgorCSAqIHRoZSBkYXRhLgorCSAqLworCXNyYyA9IGRhdGFfYnVmW2J1Zl9vZmZzZXRdID4+IGJpdF9vZmZzZXQ7CisJc3JjIHw9IGRhdGFfYnVmW2J1Zl9vZmZzZXQgKyAxXSA8PCAoOCAtIGJpdF9vZmZzZXQpOworCisJZHN0ID0gb29iX2J1ZlswXTsKKworCW9vYl9idWZbMF0gPSBzcmM7CisKKwlkYXRhX2J1ZltidWZfb2Zmc2V0XSAmPSB+KDB4ZmYgPDwgYml0X29mZnNldCk7CisJZGF0YV9idWZbYnVmX29mZnNldCArIDFdICY9IDB4ZmYgPDwgYml0X29mZnNldDsKKworCWRhdGFfYnVmW2J1Zl9vZmZzZXRdIHw9IGRzdCA8PCBiaXRfb2Zmc2V0OworCWRhdGFfYnVmW2J1Zl9vZmZzZXQgKyAxXSB8PSBkc3QgPj4gKDggLSBiaXRfb2Zmc2V0KTsKK30KKworLyoKKyAqIFJlYWQgZGF0YSBmcm9tIE5BTkQuCisgKi8KK3N0YXRpYyB2b2lkIG14c19uYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW5ndGgpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gbmFuZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpkOworCXVpbnQzMl90IGNoYW5uZWwgPSBNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTAgKyBuYW5kX2luZm8tPmN1cl9jaGlwOworCWludCByZXQ7CisKKwlpZiAobGVuZ3RoID4gTkFORF9NQVhfUEFHRVNJWkUpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogRE1BIGJ1ZmZlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghYnVmKSB7CisJCXByaW50ZigiTVhTIE5BTkQ6IERNQSBidWZmZXIgaXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBDb21waWxlIHRoZSBETUEgZGVzY3JpcHRvciAtIGEgZGVzY3JpcHRvciB0aGF0IHJlYWRzIGRhdGEuICovCisJZCA9IG14c19uYW5kX2dldF9kbWFfZGVzYyhuYW5kX2luZm8pOworCWQtPmNtZC5kYXRhID0KKwkJTVhTX0RNQV9ERVNDX0NPTU1BTkRfRE1BX1dSSVRFIHwgTVhTX0RNQV9ERVNDX0lSUSB8CisJCU1YU19ETUFfREVTQ19ERUNfU0VNIHwgTVhTX0RNQV9ERVNDX1dBSVQ0RU5EIHwKKwkJKDEgPDwgTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQpIHwKKwkJKGxlbmd0aCA8PCBNWFNfRE1BX0RFU0NfQllURVNfT0ZGU0VUKTsKKworCWQtPmNtZC5hZGRyZXNzID0gKGRtYV9hZGRyX3QpbmFuZF9pbmZvLT5kYXRhX2J1ZjsKKworCWQtPmNtZC5waW9fd29yZHNbMF0gPQorCQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9SRUFEIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEEgfAorCQlsZW5ndGg7CisKKwlteHNfZG1hX2Rlc2NfYXBwZW5kKGNoYW5uZWwsIGQpOworCisJLyoKKwkgKiBBIERNQSBkZXNjcmlwdG9yIHRoYXQgd2FpdHMgZm9yIHRoZSBjb21tYW5kIHRvIGVuZCBhbmQgdGhlIGNoaXAgdG8KKwkgKiBiZWNvbWUgcmVhZHkuCisJICoKKwkgKiBJIHRoaW5rIHdlIGFjdHVhbGx5IHNob3VsZCAqbm90KiBiZSB3YWl0aW5nIGZvciB0aGUgY2hpcCB0byBiZWNvbWUKKwkgKiByZWFkeSBiZWNhdXNlLCBhZnRlciBhbGwsIHdlIGRvbid0IGNhcmUuIEkgdGhpbmsgdGhlIG9yaWdpbmFsIGNvZGUKKwkgKiBkaWQgdGhhdCBhbmQgbm8gb25lIGhhcyByZS10aG91Z2h0IGl0IHlldC4KKwkgKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9OT19ETUFYRkVSIHwgTVhTX0RNQV9ERVNDX0lSUSB8CisJCU1YU19ETUFfREVTQ19OQU5EX1dBSVRfNF9SRUFEWSB8IE1YU19ETUFfREVTQ19ERUNfU0VNIHwKKwkJTVhTX0RNQV9ERVNDX1dBSVQ0RU5EIHwgKDQgPDwgTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQpOworCisJZC0+Y21kLmFkZHJlc3MgPSAwOworCisJZC0+Y21kLnBpb193b3Jkc1swXSA9CisJCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX1dBSVRfRk9SX1JFQURZIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEE7CisKKwlteHNfZG1hX2Rlc2NfYXBwZW5kKGNoYW5uZWwsIGQpOworCisJLyogRXhlY3V0ZSB0aGUgRE1BIGNoYWluLiAqLworCXJldCA9IG14c19kbWFfZ28oY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlwcmludGYoIk1YUyBOQU5EOiBETUEgcmVhZCBlcnJvclxuIik7CisJCWdvdG8gcnRuOworCX0KKworCW1lbWNweShidWYsIG5hbmRfaW5mby0+ZGF0YV9idWYsIGxlbmd0aCk7CisKK3J0bjoKKwlteHNfbmFuZF9yZXR1cm5fZG1hX2Rlc2NzKG5hbmRfaW5mbyk7Cit9CisKKy8qCisgKiBXcml0ZSBkYXRhIHRvIE5BTkQuCisgKi8KK3N0YXRpYyB2b2lkIG14c19uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLAorCQkJCWludCBsZW5ndGgpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gbmFuZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX2RtYV9kZXNjICpkOworCXVpbnQzMl90IGNoYW5uZWwgPSBNWFNfRE1BX0NIQU5ORUxfQUhCX0FQQkhfR1BNSTAgKyBuYW5kX2luZm8tPmN1cl9jaGlwOworCWludCByZXQ7CisKKwlpZiAobGVuZ3RoID4gTkFORF9NQVhfUEFHRVNJWkUpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogRE1BIGJ1ZmZlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghYnVmKSB7CisJCXByaW50ZigiTVhTIE5BTkQ6IERNQSBidWZmZXIgaXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwltZW1jcHkobmFuZF9pbmZvLT5kYXRhX2J1ZiwgYnVmLCBsZW5ndGgpOworCisJLyogQ29tcGlsZSB0aGUgRE1BIGRlc2NyaXB0b3IgLSBhIGRlc2NyaXB0b3IgdGhhdCB3cml0ZXMgZGF0YS4gKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9ETUFfUkVBRCB8IE1YU19ETUFfREVTQ19JUlEgfAorCQlNWFNfRE1BX0RFU0NfREVDX1NFTSB8IE1YU19ETUFfREVTQ19XQUlUNEVORCB8CisJCSg0IDw8IE1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUKSB8CisJCShsZW5ndGggPDwgTVhTX0RNQV9ERVNDX0JZVEVTX09GRlNFVCk7CisKKwlkLT5jbWQuYWRkcmVzcyA9IChkbWFfYWRkcl90KW5hbmRfaW5mby0+ZGF0YV9idWY7CisKKwlkLT5jbWQucGlvX3dvcmRzWzBdID0KKwkJR1BNSV9DVFJMMF9DT01NQU5EX01PREVfV1JJVEUgfAorCQlHUE1JX0NUUkwwX1dPUkRfTEVOR1RIIHwKKwkJKG5hbmRfaW5mby0+Y3VyX2NoaXAgPDwgR1BNSV9DVFJMMF9DU19PRkZTRVQpIHwKKwkJR1BNSV9DVFJMMF9BRERSRVNTX05BTkRfREFUQSB8CisJCWxlbmd0aDsKKworCW14c19kbWFfZGVzY19hcHBlbmQoY2hhbm5lbCwgZCk7CisKKwkvKiBFeGVjdXRlIHRoZSBETUEgY2hhaW4uICovCisJcmV0ID0gbXhzX2RtYV9nbyhjaGFubmVsKTsKKwlpZiAocmV0KQorCQlwcmludGYoIk1YUyBOQU5EOiBETUEgd3JpdGUgZXJyb3JcbiIpOworCisJbXhzX25hbmRfcmV0dXJuX2RtYV9kZXNjcyhuYW5kX2luZm8pOworfQorCisvKgorICogUmVhZCBhIHNpbmdsZSBieXRlIGZyb20gTkFORC4KKyAqLworc3RhdGljIHVpbnQ4X3QgbXhzX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXVpbnQ4X3QgYnVmOworCW14c19uYW5kX3JlYWRfYnVmKG10ZCwgJmJ1ZiwgMSk7CisJcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqIFJlYWQgYSBwYWdlIGZyb20gTkFORC4KKyAqLworc3RhdGljIGludCBteHNfbmFuZF9lY2NfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAorCQkJCQl1aW50OF90ICpidWYsIGludCBwYWdlKQoreworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBuYW5kLT5wcml2OworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmQ7CisJdWludDMyX3QgY2hhbm5lbCA9IE1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMCArIG5hbmRfaW5mby0+Y3VyX2NoaXA7CisJdWludDMyX3QgY29ycmVjdGVkID0gMCwgZmFpbGVkID0gMDsKKwl1aW50OF90CSpzdGF0dXM7CisJaW50IGksIHJldDsKKworCS8qIENvbXBpbGUgdGhlIERNQSBkZXNjcmlwdG9yIC0gd2FpdCBmb3IgcmVhZHkuICovCisJZCA9IG14c19uYW5kX2dldF9kbWFfZGVzYyhuYW5kX2luZm8pOworCWQtPmNtZC5kYXRhID0KKwkJTVhTX0RNQV9ERVNDX0NPTU1BTkRfTk9fRE1BWEZFUiB8IE1YU19ETUFfREVTQ19DSEFJTiB8CisJCU1YU19ETUFfREVTQ19OQU5EX1dBSVRfNF9SRUFEWSB8IE1YU19ETUFfREVTQ19XQUlUNEVORCB8CisJCSgxIDw8IE1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUKTsKKworCWQtPmNtZC5hZGRyZXNzID0gMDsKKworCWQtPmNtZC5waW9fd29yZHNbMF0gPQorCQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9XQUlUX0ZPUl9SRUFEWSB8CisJCUdQTUlfQ1RSTDBfV09SRF9MRU5HVEggfAorCQkobmFuZF9pbmZvLT5jdXJfY2hpcCA8PCBHUE1JX0NUUkwwX0NTX09GRlNFVCkgfAorCQlHUE1JX0NUUkwwX0FERFJFU1NfTkFORF9EQVRBOworCisJbXhzX2RtYV9kZXNjX2FwcGVuZChjaGFubmVsLCBkKTsKKworCS8qIENvbXBpbGUgdGhlIERNQSBkZXNjcmlwdG9yIC0gZW5hYmxlIHRoZSBCQ0ggYmxvY2sgYW5kIHJlYWQuICovCisJZCA9IG14c19uYW5kX2dldF9kbWFfZGVzYyhuYW5kX2luZm8pOworCWQtPmNtZC5kYXRhID0KKwkJTVhTX0RNQV9ERVNDX0NPTU1BTkRfTk9fRE1BWEZFUiB8IE1YU19ETUFfREVTQ19DSEFJTiB8CisJCU1YU19ETUFfREVTQ19XQUlUNEVORCB8CSg2IDw8IE1YU19ETUFfREVTQ19QSU9fV09SRFNfT0ZGU0VUKTsKKworCWQtPmNtZC5hZGRyZXNzID0gMDsKKworCWQtPmNtZC5waW9fd29yZHNbMF0gPQorCQlHUE1JX0NUUkwwX0NPTU1BTkRfTU9ERV9SRUFEIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEEgfAorCQkobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOworCWQtPmNtZC5waW9fd29yZHNbMV0gPSAwOworCWQtPmNtZC5waW9fd29yZHNbMl0gPQorCQlHUE1JX0VDQ0NUUkxfRU5BQkxFX0VDQyB8CisJCUdQTUlfRUNDQ1RSTF9FQ0NfQ01EX0RFQ09ERSB8CisJCUdQTUlfRUNDQ1RSTF9CVUZGRVJfTUFTS19CQ0hfUEFHRTsKKwlkLT5jbWQucGlvX3dvcmRzWzNdID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CisJZC0+Y21kLnBpb193b3Jkc1s0XSA9IChkbWFfYWRkcl90KW5hbmRfaW5mby0+ZGF0YV9idWY7CisJZC0+Y21kLnBpb193b3Jkc1s1XSA9IChkbWFfYWRkcl90KW5hbmRfaW5mby0+b29iX2J1ZjsKKworCW14c19kbWFfZGVzY19hcHBlbmQoY2hhbm5lbCwgZCk7CisKKwkvKiBDb21waWxlIHRoZSBETUEgZGVzY3JpcHRvciAtIGRpc2FibGUgdGhlIEJDSCBibG9jay4gKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9OT19ETUFYRkVSIHwgTVhTX0RNQV9ERVNDX0NIQUlOIHwKKwkJTVhTX0RNQV9ERVNDX05BTkRfV0FJVF80X1JFQURZIHwgTVhTX0RNQV9ERVNDX1dBSVQ0RU5EIHwKKwkJKDMgPDwgTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQpOworCisJZC0+Y21kLmFkZHJlc3MgPSAwOworCisJZC0+Y21kLnBpb193b3Jkc1swXSA9CisJCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX1dBSVRfRk9SX1JFQURZIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEEgfAorCQkobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOworCWQtPmNtZC5waW9fd29yZHNbMV0gPSAwOworCWQtPmNtZC5waW9fd29yZHNbMl0gPSAwOworCisJbXhzX2RtYV9kZXNjX2FwcGVuZChjaGFubmVsLCBkKTsKKworCS8qIENvbXBpbGUgdGhlIERNQSBkZXNjcmlwdG9yIC0gZGVhc3NlcnQgdGhlIE5BTkQgbG9jayBhbmQgaW50ZXJydXB0LiAqLworCWQgPSBteHNfbmFuZF9nZXRfZG1hX2Rlc2MobmFuZF9pbmZvKTsKKwlkLT5jbWQuZGF0YSA9CisJCU1YU19ETUFfREVTQ19DT01NQU5EX05PX0RNQVhGRVIgfCBNWFNfRE1BX0RFU0NfSVJRIHwKKwkJTVhTX0RNQV9ERVNDX0RFQ19TRU07CisKKwlkLT5jbWQuYWRkcmVzcyA9IDA7CisKKwlteHNfZG1hX2Rlc2NfYXBwZW5kKGNoYW5uZWwsIGQpOworCisJLyogRXhlY3V0ZSB0aGUgRE1BIGNoYWluLiAqLworCXJldCA9IG14c19kbWFfZ28oY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlwcmludGYoIk1YUyBOQU5EOiBETUEgcmVhZCBlcnJvclxuIik7CisJCWdvdG8gcnRuOworCX0KKworCXJldCA9IG14c19uYW5kX3dhaXRfZm9yX2JjaF9jb21wbGV0ZSgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogQkNIIHJlYWQgdGltZW91dFxuIik7CisJCWdvdG8gcnRuOworCX0KKworCS8qIFJlYWQgRE1BIGNvbXBsZXRlZCwgbm93IGRvIHRoZSBtYXJrIHN3YXBwaW5nLiAqLworCW14c19uYW5kX3N3YXBfYmxvY2tfbWFyayhtdGQsIG5hbmRfaW5mby0+ZGF0YV9idWYsIG5hbmRfaW5mby0+b29iX2J1Zik7CisKKwkvKiBMb29wIG92ZXIgc3RhdHVzIGJ5dGVzLCBhY2N1bXVsYXRpbmcgRUNDIHN0YXR1cy4gKi8KKwlzdGF0dXMgPSBuYW5kX2luZm8tPm9vYl9idWYgKyBteHNfbmFuZF9hdXhfc3RhdHVzX29mZnNldCgpOworCWZvciAoaSA9IDA7IGkgPCBteHNfbmFuZF9lY2NfY2h1bmtfY250KG10ZC0+d3JpdGVzaXplKTsgaSsrKSB7CisJCWlmIChzdGF0dXNbaV0gPT0gMHgwMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdGF0dXNbaV0gPT0gMHhmZikKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdGF0dXNbaV0gPT0gMHhmZSkgeworCQkJZmFpbGVkKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvcnJlY3RlZCArPSBzdGF0dXNbaV07CisJfQorCisJLyogUHJvcGFnYXRlIEVDQyBzdGF0dXMgdG8gdGhlIG93bmluZyBNVEQuICovCisJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkICs9IGZhaWxlZDsKKwltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gY29ycmVjdGVkOworCisJLyoKKwkgKiBJdCdzIHRpbWUgdG8gZGVsaXZlciB0aGUgT09CIGJ5dGVzLiBTZWUgbXhzX25hbmRfZWNjX3JlYWRfb29iKCkgZm9yCisJICogZGV0YWlscyBhYm91dCBvdXIgcG9saWN5IGZvciBkZWxpdmVyaW5nIHRoZSBPT0IuCisJICoKKwkgKiBXZSBmaWxsIHRoZSBjYWxsZXIncyBidWZmZXIgd2l0aCBzZXQgYml0cywgYW5kIHRoZW4gY29weSB0aGUgYmxvY2sKKwkgKiBtYXJrIHRvIHRoZSBjYWxsZXIncyBidWZmZXIuIE5vdGUgdGhhdCwgaWYgYmxvY2sgbWFyayBzd2FwcGluZyB3YXMKKwkgKiBuZWNlc3NhcnksIGl0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZSwgc28gd2UgY2FuIHJlbHkgb24gdGhlIGZpcnN0CisJICogYnl0ZSBvZiB0aGUgYXV4aWxpYXJ5IGJ1ZmZlciB0byBjb250YWluIHRoZSBibG9jayBtYXJrLgorCSAqLworCW1lbXNldChuYW5kLT5vb2JfcG9pLCAweGZmLCBtdGQtPm9vYnNpemUpOworCisJbmFuZC0+b29iX3BvaVswXSA9IG5hbmRfaW5mby0+b29iX2J1ZlswXTsKKworCW1lbWNweShidWYsIG5hbmRfaW5mby0+ZGF0YV9idWYsIG10ZC0+d3JpdGVzaXplKTsKKworcnRuOgorCW14c19uYW5kX3JldHVybl9kbWFfZGVzY3MobmFuZF9pbmZvKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXcml0ZSBhIHBhZ2UgdG8gTkFORC4KKyAqLworc3RhdGljIHZvaWQgbXhzX25hbmRfZWNjX3dyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgY29uc3QgdWludDhfdCAqYnVmKQoreworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBuYW5kLT5wcml2OworCXN0cnVjdCBteHNfZG1hX2Rlc2MgKmQ7CisJdWludDMyX3QgY2hhbm5lbCA9IE1YU19ETUFfQ0hBTk5FTF9BSEJfQVBCSF9HUE1JMCArIG5hbmRfaW5mby0+Y3VyX2NoaXA7CisJaW50IHJldDsKKworCW1lbWNweShuYW5kX2luZm8tPmRhdGFfYnVmLCBidWYsIG10ZC0+d3JpdGVzaXplKTsKKwltZW1jcHkobmFuZF9pbmZvLT5vb2JfYnVmLCBuYW5kLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCisJLyogSGFuZGxlIGJsb2NrIG1hcmsgc3dhcHBpbmcuICovCisJbXhzX25hbmRfc3dhcF9ibG9ja19tYXJrKG10ZCwgbmFuZF9pbmZvLT5kYXRhX2J1ZiwgbmFuZF9pbmZvLT5vb2JfYnVmKTsKKworCS8qIENvbXBpbGUgdGhlIERNQSBkZXNjcmlwdG9yIC0gd3JpdGUgZGF0YS4gKi8KKwlkID0gbXhzX25hbmRfZ2V0X2RtYV9kZXNjKG5hbmRfaW5mbyk7CisJZC0+Y21kLmRhdGEgPQorCQlNWFNfRE1BX0RFU0NfQ09NTUFORF9OT19ETUFYRkVSIHwgTVhTX0RNQV9ERVNDX0lSUSB8CisJCU1YU19ETUFfREVTQ19ERUNfU0VNIHwgTVhTX0RNQV9ERVNDX1dBSVQ0RU5EIHwKKwkJKDYgPDwgTVhTX0RNQV9ERVNDX1BJT19XT1JEU19PRkZTRVQpOworCisJZC0+Y21kLmFkZHJlc3MgPSAwOworCisJZC0+Y21kLnBpb193b3Jkc1swXSA9CisJCUdQTUlfQ1RSTDBfQ09NTUFORF9NT0RFX1dSSVRFIHwKKwkJR1BNSV9DVFJMMF9XT1JEX0xFTkdUSCB8CisJCShuYW5kX2luZm8tPmN1cl9jaGlwIDw8IEdQTUlfQ1RSTDBfQ1NfT0ZGU0VUKSB8CisJCUdQTUlfQ1RSTDBfQUREUkVTU19OQU5EX0RBVEE7CisJZC0+Y21kLnBpb193b3Jkc1sxXSA9IDA7CisJZC0+Y21kLnBpb193b3Jkc1syXSA9CisJCUdQTUlfRUNDQ1RSTF9FTkFCTEVfRUNDIHwKKwkJR1BNSV9FQ0NDVFJMX0VDQ19DTURfRU5DT0RFIHwKKwkJR1BNSV9FQ0NDVFJMX0JVRkZFUl9NQVNLX0JDSF9QQUdFOworCWQtPmNtZC5waW9fd29yZHNbM10gPSAobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOworCWQtPmNtZC5waW9fd29yZHNbNF0gPSAoZG1hX2FkZHJfdCluYW5kX2luZm8tPmRhdGFfYnVmOworCWQtPmNtZC5waW9fd29yZHNbNV0gPSAoZG1hX2FkZHJfdCluYW5kX2luZm8tPm9vYl9idWY7CisKKwlteHNfZG1hX2Rlc2NfYXBwZW5kKGNoYW5uZWwsIGQpOworCisJLyogRXhlY3V0ZSB0aGUgRE1BIGNoYWluLiAqLworCXJldCA9IG14c19kbWFfZ28oY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlwcmludGYoIk1YUyBOQU5EOiBETUEgd3JpdGUgZXJyb3JcbiIpOworCQlnb3RvIHJ0bjsKKwl9CisKKwlyZXQgPSBteHNfbmFuZF93YWl0X2Zvcl9iY2hfY29tcGxldGUoKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiTVhTIE5BTkQ6IEJDSCB3cml0ZSB0aW1lb3V0XG4iKTsKKwkJZ290byBydG47CisJfQorCitydG46CisJbXhzX25hbmRfcmV0dXJuX2RtYV9kZXNjcyhuYW5kX2luZm8pOworfQorCisvKgorICogUmVhZCBPT0IgZnJvbSBOQU5ELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSB2ZW5lZXIgdGhhdCByZXBsYWNlcyB0aGUgZnVuY3Rpb24gb3JpZ2luYWxseSBpbnN0YWxsZWQgYnkKKyAqIHRoZSBOQU5EIEZsYXNoIE1URCBjb2RlLgorICovCitzdGF0aWMgaW50IG14c19uYW5kX2hvb2tfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBjaGlwLT5wcml2OworCWludCByZXQ7CisKKwlpZiAob3BzLT5tb2RlID09IE1URF9PT0JfUkFXKQorCQluYW5kX2luZm8tPnJhd19vb2JfbW9kZSA9IDE7CisJZWxzZQorCQluYW5kX2luZm8tPnJhd19vb2JfbW9kZSA9IDA7CisKKwlyZXQgPSBuYW5kX2luZm8tPmhvb2tlZF9yZWFkX29vYihtdGQsIGZyb20sIG9wcyk7CisKKwluYW5kX2luZm8tPnJhd19vb2JfbW9kZSA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV3JpdGUgT09CIHRvIE5BTkQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIHZlbmVlciB0aGF0IHJlcGxhY2VzIHRoZSBmdW5jdGlvbiBvcmlnaW5hbGx5IGluc3RhbGxlZCBieQorICogdGhlIE5BTkQgRmxhc2ggTVREIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgbXhzX25hbmRfaG9va193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCQkJc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvID0gY2hpcC0+cHJpdjsKKwlpbnQgcmV0OworCisJaWYgKG9wcy0+bW9kZSA9PSBNVERfT09CX1JBVykKKwkJbmFuZF9pbmZvLT5yYXdfb29iX21vZGUgPSAxOworCWVsc2UKKwkJbmFuZF9pbmZvLT5yYXdfb29iX21vZGUgPSAwOworCisJcmV0ID0gbmFuZF9pbmZvLT5ob29rZWRfd3JpdGVfb29iKG10ZCwgdG8sIG9wcyk7CisKKwluYW5kX2luZm8tPnJhd19vb2JfbW9kZSA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTWFyayBhIGJsb2NrIGJhZCBpbiBOQU5ELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSB2ZW5lZXIgdGhhdCByZXBsYWNlcyB0aGUgZnVuY3Rpb24gb3JpZ2luYWxseSBpbnN0YWxsZWQgYnkKKyAqIHRoZSBOQU5EIEZsYXNoIE1URCBjb2RlLgorICovCitzdGF0aWMgaW50IG14c19uYW5kX2hvb2tfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBjaGlwLT5wcml2OworCWludCByZXQ7CisKKwluYW5kX2luZm8tPm1hcmtpbmdfYmxvY2tfYmFkID0gMTsKKworCXJldCA9IG5hbmRfaW5mby0+aG9va2VkX2Jsb2NrX21hcmtiYWQobXRkLCBvZnMpOworCisJbmFuZF9pbmZvLT5tYXJraW5nX2Jsb2NrX2JhZCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIGluIHRoaXMgZHJpdmVyIHdoZXJlIHdlIGhhdmUgdG8gaGFuZGxlIHRoZSBPT0IgYW5kCisgKiBibG9jayBtYXJrcy4gVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhpbmdzIGFyZSB0aGUgbW9zdCBjb21wbGljYXRlZCwgc28KKyAqIHRoaXMgaXMgd2hlcmUgd2UgdHJ5IHRvIGV4cGxhaW4gaXQgYWxsLiBBbGwgdGhlIG90aGVyIHBsYWNlcyByZWZlciBiYWNrIHRvCisgKiBoZXJlLgorICoKKyAqIFRoZXNlIGFyZSB0aGUgcnVsZXMsIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgaW1wb3J0YW5jZToKKyAqCisgKiAxKSBOb3RoaW5nIHRoZSBjYWxsZXIgZG9lcyBjYW4gYmUgYWxsb3dlZCB0byBpbXBlcmlsIHRoZSBibG9jayBtYXJrLCBzbyBhbGwKKyAqICAgIHdyaXRlIG9wZXJhdGlvbnMgdGFrZSBtZWFzdXJlcyB0byBwcm90ZWN0IGl0LgorICoKKyAqIDIpIEluIHJlYWQgb3BlcmF0aW9ucywgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIE9PQiB3ZSByZXR1cm4gbXVzdCByZWZsZWN0IHRoZQorICogICAgdHJ1ZSBzdGF0ZSBvZiB0aGUgYmxvY2sgbWFyaywgbm8gbWF0dGVyIHdoZXJlIHRoYXQgYmxvY2sgbWFyayBhcHBlYXJzIGluCisgKiAgICB0aGUgcGh5c2ljYWwgcGFnZS4KKyAqCisgKiAzKSBFQ0MtYmFzZWQgcmVhZCBvcGVyYXRpb25zIHJldHVybiBhbiBPT0IgZnVsbCBvZiBzZXQgYml0cyAoc2luY2Ugd2UgbmV2ZXIKKyAqICAgIGFsbG93IEVDQy1iYXNlZCB3cml0ZXMgdG8gdGhlIE9PQiwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCBFQ0MtYmFzZWQgcmVhZHMKKyAqICAgIHJldHVybikuCisgKgorICogNCkgIlJhdyIgcmVhZCBvcGVyYXRpb25zIHJldHVybiBhIGRpcmVjdCB2aWV3IG9mIHRoZSBwaHlzaWNhbCBieXRlcyBpbiB0aGUKKyAqICAgIHBhZ2UsIHVzaW5nIHRoZSBjb252ZW50aW9uYWwgZGVmaW5pdGlvbiBvZiB3aGljaCBieXRlcyBhcmUgZGF0YSBhbmQgd2hpY2gKKyAqICAgIGFyZSBPT0IuIFRoaXMgZ2l2ZXMgdGhlIGNhbGxlciBhIHdheSB0byBzZWUgdGhlIGFjdHVhbCwgcGh5c2ljYWwgYnl0ZXMKKyAqICAgIGluIHRoZSBwYWdlLCB3aXRob3V0IHRoZSBkaXN0b3J0aW9ucyBhcHBsaWVkIGJ5IG91ciBFQ0MgZW5naW5lLgorICoKKyAqIFdoYXQgd2UgZG8gZm9yIHRoaXMgc3BlY2lmaWMgcmVhZCBvcGVyYXRpb24gZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nCisgKiAicmF3IiByZWFkLCBvciBhbiBFQ0MtYmFzZWQgcmVhZC4KKyAqCisgKiBJdCB0dXJucyBvdXQgdGhhdCBrbm93aW5nIHdoZXRoZXIgd2Ugd2FudCBhbiAiRUNDLWJhc2VkIiBvciAicmF3IiByZWFkIGlzIG5vdAorICogZWFzeS4gV2hlbiByZWFkaW5nIGEgcGFnZSwgZm9yIGV4YW1wbGUsIHRoZSBOQU5EIEZsYXNoIE1URCBjb2RlIGNhbGxzIG91cgorICogZWNjLnJlYWRfcGFnZSBvciBlY2MucmVhZF9wYWdlX3JhdyBmdW5jdGlvbi4gVGh1cywgdGhlIGZhY3QgdGhhdCBNVEQgd2FudHMgYW4KKyAqIEVDQy1iYXNlZCBvciByYXcgdmlldyBvZiB0aGUgcGFnZSBpcyBpbXBsaWNpdCBpbiB3aGljaCBmdW5jdGlvbiBpdCBjYWxscworICogKHRoZXJlIGlzIGEgc2ltaWxhciBwYWlyIG9mIEVDQy1iYXNlZC9yYXcgZnVuY3Rpb25zIGZvciB3cml0aW5nKS4KKyAqCisgKiBTaW5jZSBNVEQgYXNzdW1lcyB0aGUgT09CIGlzIG5vdCBjb3ZlcmVkIGJ5IEVDQywgdGhlcmUgaXMgbm8gcGFpciBvZgorICogRUNDLWJhc2VkL3JhdyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgb3Igb3Igd3JpdGluZyB0aGUgT09CLiBUaGUgZmFjdCB0aGF0IHRoZQorICogY2FsbGVyIHdhbnRzIGFuIEVDQy1iYXNlZCBvciByYXcgdmlldyBvZiB0aGUgcGFnZSBpcyBub3QgcHJvcGFnYXRlZCBkb3duIHRvCisgKiB0aGlzIGRyaXZlci4KKyAqCisgKiBTaW5jZSBvdXIgT09CICppcyogY292ZXJlZCBieSBFQ0MsIHdlIG5lZWQgdGhpcyBpbmZvcm1hdGlvbi4gU28sIHdlIGhvb2sgdGhlCisgKiBlY2MucmVhZF9vb2IgYW5kIGVjYy53cml0ZV9vb2IgZnVuY3Rpb24gcG9pbnRlcnMgaW4gdGhlIG93bmluZworICogc3RydWN0IG10ZF9pbmZvIHdpdGggb3VyIG93biBmdW5jdGlvbnMuIFRoZXNlIGhvb2sgZnVuY3Rpb25zIHNldCB0aGUKKyAqIHJhd19vb2JfbW9kZSBmaWVsZCBzbyB0aGF0LCB3aGVuIGNvbnRyb2wgZmluYWxseSBhcnJpdmVzIGhlcmUsIHdlJ2xsIGtub3cKKyAqIHdoYXQgdG8gZG8uCisgKi8KK3N0YXRpYyBpbnQgbXhzX25hbmRfZWNjX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAorCQkJCWludCBwYWdlLCBpbnQgY21kKQoreworCXN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8gPSBuYW5kLT5wcml2OworCisJLyoKKwkgKiBGaXJzdCwgZmlsbCBpbiB0aGUgT09CIGJ1ZmZlci4gSWYgd2UncmUgZG9pbmcgYSByYXcgcmVhZCwgd2UgbmVlZCB0bworCSAqIGdldCB0aGUgYnl0ZXMgZnJvbSB0aGUgcGh5c2ljYWwgcGFnZS4gSWYgd2UncmUgbm90IGRvaW5nIGEgcmF3IHJlYWQsCisJICogd2UgbmVlZCB0byBmaWxsIHRoZSBidWZmZXIgd2l0aCBzZXQgYml0cy4KKwkgKi8KKwlpZiAobmFuZF9pbmZvLT5yYXdfb29iX21vZGUpIHsKKwkJLyoKKwkJICogSWYgY29udHJvbCBhcnJpdmVzIGhlcmUsIHdlJ3JlIGRvaW5nIGEgInJhdyIgcmVhZC4gU2VuZCB0aGUKKwkJICogY29tbWFuZCB0byByZWFkIHRoZSBjb252ZW50aW9uYWwgT09CIGFuZCByZWFkIGl0LgorCQkgKi8KKwkJbmFuZC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQUQwLCBtdGQtPndyaXRlc2l6ZSwgcGFnZSk7CisJCW5hbmQtPnJlYWRfYnVmKG10ZCwgbmFuZC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiBjb250cm9sIGFycml2ZXMgaGVyZSwgd2UncmUgbm90IGRvaW5nIGEgInJhdyIgcmVhZC4gRmlsbAorCQkgKiB0aGUgT09CIGJ1ZmZlciB3aXRoIHNldCBiaXRzIGFuZCBjb3JyZWN0IHRoZSBibG9jayBtYXJrLgorCQkgKi8KKwkJbWVtc2V0KG5hbmQtPm9vYl9wb2ksIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CisKKwkJbmFuZC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQUQwLCBtdGQtPndyaXRlc2l6ZSwgcGFnZSk7CisJCW14c19uYW5kX3JlYWRfYnVmKG10ZCwgbmFuZC0+b29iX3BvaSwgMSk7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworLyoKKyAqIFdyaXRlIE9PQiBkYXRhIHRvIE5BTkQuCisgKi8KK3N0YXRpYyBpbnQgbXhzX25hbmRfZWNjX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKKwkJCQkJaW50IHBhZ2UpCit7CisJc3RydWN0IG14c19uYW5kX2luZm8gKm5hbmRfaW5mbyA9IG5hbmQtPnByaXY7CisJdWludDhfdCBibG9ja19tYXJrID0gMDsKKworCS8qCisJICogVGhlcmUgYXJlIGZ1bmRhbWVudGFsIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gdGhlIGkuTVggR1BNSSBORkMgYW5kCisJICogdGhlIE5BTkQgRmxhc2ggTVREIG1vZGVsIHRoYXQgbWFrZSBpdCBlc3NlbnRpYWxseSBpbXBvc3NpYmxlIHRvIHdyaXRlCisJICogdGhlIG91dC1vZi1iYW5kIGJ5dGVzLgorCSAqCisJICogV2UgcGVybWl0ICpPTkUqIGV4Y2VwdGlvbi4gSWYgdGhlICppbnRlbnQqIG9mIHdyaXRpbmcgdGhlIE9PQiBpcyB0bworCSAqIG1hcmsgYSBibG9jayBiYWQsIHdlIGNhbiBkbyB0aGF0LgorCSAqLworCisJaWYgKCFuYW5kX2luZm8tPm1hcmtpbmdfYmxvY2tfYmFkKSB7CisJCXByaW50ZigiTlhTIE5BTkQ6IFdyaXRpbmcgT09CIGlzbid0IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFdyaXRlIHRoZSBibG9jayBtYXJrLiAqLworCW5hbmQtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgbXRkLT53cml0ZXNpemUsIHBhZ2UpOworCW5hbmQtPndyaXRlX2J1ZihtdGQsICZibG9ja19tYXJrLCAxKTsKKwluYW5kLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7CisKKwkvKiBDaGVjayBpZiBpdCB3b3JrZWQuICovCisJaWYgKG5hbmQtPndhaXRmdW5jKG10ZCwgbmFuZCkgJiBOQU5EX1NUQVRVU19GQUlMKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2xhaW1zIGFsbCBibG9ja3MgYXJlIGdvb2QuCisgKgorICogSW4gcHJpbmNpcGxlLCB0aGlzIGZ1bmN0aW9uIGlzICpvbmx5KiBjYWxsZWQgd2hlbiB0aGUgTkFORCBGbGFzaCBNVEQgc3lzdGVtCisgKiBpc24ndCBhbGxvd2VkIHRvIGtlZXAgYW4gaW4tbWVtb3J5IGJhZCBibG9jayB0YWJsZSwgc28gaXQgaXMgZm9yY2VkIHRvIGFzaworICogdGhlIGRyaXZlciBmb3IgYmFkIGJsb2NrIGluZm9ybWF0aW9uLgorICoKKyAqIEluIGZhY3QsIHdlIHBlcm1pdCB0aGUgTkFORCBGbGFzaCBNVEQgc3lzdGVtIHRvIGhhdmUgYW4gaW4tbWVtb3J5IEJCVCwgc28KKyAqIHRoaXMgZnVuY3Rpb24gaXMgKm9ubHkqIGNhbGxlZCB3aGVuIHdlIHRha2UgaXQgYXdheS4KKyAqCisgKiBUaHVzLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gd2Ugd2FudCAqYWxsKiBibG9ja3MgdG8gbG9vayBnb29kLAorICogc28gaXQgKmFsd2F5cyogcmV0dXJuIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgbXhzX25hbmRfYmxvY2tfYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5vbWluYWxseSwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBsb29rIGZvciBvciBjcmVhdGUgdGhlIGJhZAorICogYmxvY2sgdGFibGUuIEluIGZhY3QsIHNpbmNlIHRoZSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24gYXQgdGhlIHZlcnkgZW5kIG9mCisgKiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzdGFydGVkIGJ5IG5hbmRfc2NhbigpLCBhbmQgd2UgZG9lc24ndCBoYXZlIGEKKyAqIG1vcmUgZm9ybWFsIG1lY2hhbmlzbSwgd2UgImhvb2siIHRoaXMgZnVuY3Rpb24gdG8gY29udGludWUgaW5pdCBwcm9jZXNzLgorICoKKyAqIEF0IHRoaXMgcG9pbnQsIHRoZSBwaHlzaWNhbCBOQU5EIEZsYXNoIGNoaXBzIGhhdmUgYmVlbiBpZGVudGlmaWVkIGFuZAorICogY291bnRlZCwgc28gd2Uga25vdyB0aGUgcGh5c2ljYWwgZ2VvbWV0cnkuIFRoaXMgZW5hYmxlcyB1cyB0byBtYWtlIHNvbWUKKyAqIGltcG9ydGFudCBjb25maWd1cmF0aW9uIGRlY2lzaW9ucy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gcHJvcG9nYXRlcyBkaXJlY3RseSBiYWNrIHRvIHRoaXMgZHJpdmVyJ3MKKyAqIGNhbGwgdG8gbmFuZF9zY2FuKCkuIEFueXRoaW5nIG90aGVyIHRoYW4gemVybyB3aWxsIGNhdXNlIHRoaXMgZHJpdmVyIHRvCisgKiB0ZWFyIGV2ZXJ5dGhpbmcgZG93biBhbmQgZGVjbGFyZSBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG14c19uYW5kX3NjYW5fYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmQgPSBtdGQtPnByaXY7CisJc3RydWN0IG14c19uYW5kX2luZm8gKm5hbmRfaW5mbyA9IG5hbmQtPnByaXY7CisJc3RydWN0IG14MjhfYmNoX3JlZ3MgKmJjaF9yZWdzID0gKHN0cnVjdCBteDI4X2JjaF9yZWdzICopTVhTX0JDSF9CQVNFOworCXVpbnQzMl90IHRtcDsKKworCS8qIENvbmZpZ3VyZSBCQ0ggYW5kIHNldCBORkMgZ2VvbWV0cnkgKi8KKwlteDI4X3Jlc2V0X2Jsb2NrKCZiY2hfcmVncy0+aHdfYmNoX2N0cmxfcmVnKTsKKworCS8qIENvbmZpZ3VyZSBsYXlvdXQgMCAqLworCXRtcCA9IChteHNfbmFuZF9lY2NfY2h1bmtfY250KG10ZC0+d3JpdGVzaXplKSAtIDEpCisJCTw8IEJDSF9GTEFTSExBWU9VVDBfTkJMT0NLU19PRkZTRVQ7CisJdG1wIHw9IE1YU19OQU5EX01FVEFEQVRBX1NJWkUgPDwgQkNIX0ZMQVNITEFZT1VUMF9NRVRBX1NJWkVfT0ZGU0VUOworCXRtcCB8PSAobXhzX25hbmRfZ2V0X2VjY19zdHJlbmd0aChtdGQtPndyaXRlc2l6ZSwgbXRkLT5vb2JzaXplKSA+PiAxKQorCQk8PCBCQ0hfRkxBU0hMQVlPVVQwX0VDQzBfT0ZGU0VUOworCXRtcCB8PSBNWFNfTkFORF9DSFVOS19EQVRBX0NIVU5LX1NJWkU7CisJd3JpdGVsKHRtcCwgJmJjaF9yZWdzLT5od19iY2hfZmxhc2gwbGF5b3V0MCk7CisKKwl0bXAgPSAobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpCisJCTw8IEJDSF9GTEFTSExBWU9VVDFfUEFHRV9TSVpFX09GRlNFVDsKKwl0bXAgfD0gKG14c19uYW5kX2dldF9lY2Nfc3RyZW5ndGgobXRkLT53cml0ZXNpemUsIG10ZC0+b29ic2l6ZSkgPj4gMSkKKwkJPDwgQkNIX0ZMQVNITEFZT1VUMV9FQ0NOX09GRlNFVDsKKwl0bXAgfD0gTVhTX05BTkRfQ0hVTktfREFUQV9DSFVOS19TSVpFOworCXdyaXRlbCh0bXAsICZiY2hfcmVncy0+aHdfYmNoX2ZsYXNoMGxheW91dDEpOworCisJLyogU2V0ICphbGwqIGNoaXAgc2VsZWN0cyB0byB1c2UgbGF5b3V0IDAgKi8KKwl3cml0ZWwoMCwgJmJjaF9yZWdzLT5od19iY2hfbGF5b3V0c2VsZWN0KTsKKworCS8qIEVuYWJsZSBCQ0ggY29tcGxldGUgaW50ZXJydXB0ICovCisJd3JpdGVsKEJDSF9DVFJMX0NPTVBMRVRFX0lSUV9FTiwgJmJjaF9yZWdzLT5od19iY2hfY3RybF9zZXQpOworCisJLyogSG9vayBzb21lIG9wZXJhdGlvbnMgYXQgdGhlIE1URCBsZXZlbC4gKi8KKwlpZiAobXRkLT5yZWFkX29vYiAhPSBteHNfbmFuZF9ob29rX3JlYWRfb29iKSB7CisJCW5hbmRfaW5mby0+aG9va2VkX3JlYWRfb29iID0gbXRkLT5yZWFkX29vYjsKKwkJbXRkLT5yZWFkX29vYiA9IG14c19uYW5kX2hvb2tfcmVhZF9vb2I7CisJfQorCisJaWYgKG10ZC0+d3JpdGVfb29iICE9IG14c19uYW5kX2hvb2tfd3JpdGVfb29iKSB7CisJCW5hbmRfaW5mby0+aG9va2VkX3dyaXRlX29vYiA9IG10ZC0+d3JpdGVfb29iOworCQltdGQtPndyaXRlX29vYiA9IG14c19uYW5kX2hvb2tfd3JpdGVfb29iOworCX0KKworCWlmIChtdGQtPmJsb2NrX21hcmtiYWQgIT0gbXhzX25hbmRfaG9va19ibG9ja19tYXJrYmFkKSB7CisJCW5hbmRfaW5mby0+aG9va2VkX2Jsb2NrX21hcmtiYWQgPSBtdGQtPmJsb2NrX21hcmtiYWQ7CisJCW10ZC0+YmxvY2tfbWFya2JhZCA9IG14c19uYW5kX2hvb2tfYmxvY2tfbWFya2JhZDsKKwl9CisKKwkvKiBXZSB1c2UgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmb3IgYmFkIGJsb2NrIG1hbmFnZW1lbnQuICovCisJcmV0dXJuIG5hbmRfZGVmYXVsdF9iYnQobXRkKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIERNQSBidWZmZXJzCisgKi8KK2ludCBteHNfbmFuZF9hbGxvY19idWZmZXJzKHN0cnVjdCBteHNfbmFuZF9pbmZvICpuYW5kX2luZm8pCit7CisJdWludDhfdCAqYnVmOworCWNvbnN0IGludCBzaXplID0gTkFORF9NQVhfUEFHRVNJWkUgKyBOQU5EX01BWF9PT0JTSVpFOworCisJLyogRE1BIGJ1ZmZlcnMgKi8KKwlidWYgPSBtZW1hbGlnbihNWFNfRE1BX0FMSUdOTUVOVCwgc2l6ZSk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogRXJyb3IgYWxsb2NhdGluZyBETUEgYnVmZmVyc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChidWYsIDAsIHNpemUpOworCisJbmFuZF9pbmZvLT5kYXRhX2J1ZiA9IGJ1ZjsKKwluYW5kX2luZm8tPm9vYl9idWYgPSBidWYgKyBOQU5EX01BWF9QQUdFU0laRTsKKworCS8qIENvbW1hbmQgYnVmZmVycyAqLworCW5hbmRfaW5mby0+Y21kX2J1ZiA9IG1lbWFsaWduKE1YU19ETUFfQUxJR05NRU5ULAorCQkJCU1YU19OQU5EX0NPTU1BTkRfQlVGRkVSX1NJWkUpOworCWlmICghbmFuZF9pbmZvLT5jbWRfYnVmKSB7CisJCWZyZWUoYnVmKTsKKwkJcHJpbnRmKCJNWFMgTkFORDogRXJyb3IgYWxsb2NhdGluZyBjb21tYW5kIGJ1ZmZlcnNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KG5hbmRfaW5mby0+Y21kX2J1ZiwgMCwgTVhTX05BTkRfQ09NTUFORF9CVUZGRVJfU0laRSk7CisJbmFuZF9pbmZvLT5jbWRfcXVldWVfbGVuID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogSW5pdGlhbGl6ZXMgdGhlIE5GQyBoYXJkd2FyZS4KKyAqLworaW50IG14c19uYW5kX2luaXQoc3RydWN0IG14c19uYW5kX2luZm8gKmluZm8pCit7CisJc3RydWN0IG14MjhfZ3BtaV9yZWdzICpncG1pX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfZ3BtaV9yZWdzICopTVhTX0dQTUlfQkFTRTsKKwlpbnQgaSA9IDA7CisKKwlpbmZvLT5kZXNjID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXhzX2RtYV9kZXNjICopICoKKwkJCQlNWFNfTkFORF9ETUFfREVTQ1JJUFRPUl9DT1VOVCk7CisJaWYgKCFpbmZvLT5kZXNjKQorCQlnb3RvIGVycjE7CisKKwkvKiBBbGxvY2F0ZSB0aGUgRE1BIGRlc2NyaXB0b3JzLiAqLworCWZvciAoaSA9IDA7IGkgPCBNWFNfTkFORF9ETUFfREVTQ1JJUFRPUl9DT1VOVDsgaSsrKSB7CisJCWluZm8tPmRlc2NbaV0gPSBteHNfZG1hX2Rlc2NfYWxsb2MoKTsKKwkJaWYgKCFpbmZvLT5kZXNjW2ldKQorCQkJZ290byBlcnIyOworCX0KKworCS8qIEluaXQgdGhlIERNQSBjb250cm9sbGVyLiAqLworCW14c19kbWFfaW5pdCgpOworCisJLyogUmVzZXQgdGhlIEdQTUkgYmxvY2suICovCisJbXgyOF9yZXNldF9ibG9jaygmZ3BtaV9yZWdzLT5od19ncG1pX2N0cmwwX3JlZyk7CisKKwkvKgorCSAqIENob29zZSBOQU5EIG1vZGUsIHNldCBJUlEgcG9sYXJpdHksIGRpc2FibGUgd3JpdGUgcHJvdGVjdGlvbiBhbmQKKwkgKiBzZWxlY3QgQkNIIEVDQy4KKwkgKi8KKwljbHJzZXRiaXRzX2xlMzIoJmdwbWlfcmVncy0+aHdfZ3BtaV9jdHJsMSwKKwkJCUdQTUlfQ1RSTDFfR1BNSV9NT0RFLAorCQkJR1BNSV9DVFJMMV9BVEFfSVJRUkRZX1BPTEFSSVRZIHwgR1BNSV9DVFJMMV9ERVZfUkVTRVQgfAorCQkJR1BNSV9DVFJMMV9CQ0hfTU9ERSk7CisKKwlyZXR1cm4gMDsKKworZXJyMjoKKwlmcmVlKGluZm8tPmRlc2MpOworZXJyMToKKwlmb3IgKC0taTsgaSA+PSAwOyBpLS0pCisJCW14c19kbWFfZGVzY19mcmVlKGluZm8tPmRlc2NbaV0pOworCXByaW50ZigiTVhTIE5BTkQ6IFVuYWJsZSB0byBhbGxvY2F0ZSBETUEgZGVzY3JpcHRvcnNcbiIpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKiEKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyB0aGUgZHJpdmVyIGJpbmRpbmcgcHJvY2Vzcy4KKyAqCisgKiBAcGFyYW0gICBwZGV2ICB0aGUgZGV2aWNlIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGRldmljZSBzcGVjaWZpYworICogICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdGhhdCBpcyB1c2VkIGJ5IHRoZSBzdXNwZW5kLCByZXN1bWUgYW5kCisgKiAgICAgICAgICAgICAgICByZW1vdmUgZnVuY3Rpb25zCisgKgorICogQHJldHVybiAgVGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDAuCisgKi8KK2ludCBib2FyZF9uYW5kX2luaXQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKK3sKKwlzdHJ1Y3QgbXhzX25hbmRfaW5mbyAqbmFuZF9pbmZvOworCWludCBlcnI7CisKKwluYW5kX2luZm8gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBteHNfbmFuZF9pbmZvKSk7CisJaWYgKCFuYW5kX2luZm8pIHsKKwkJcHJpbnRmKCJNWFMgTkFORDogRmFpbGVkIHRvIGFsbG9jYXRlIHByaXZhdGUgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQobmFuZF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG14c19uYW5kX2luZm8pKTsKKworCWVyciA9IG14c19uYW5kX2FsbG9jX2J1ZmZlcnMobmFuZF9pbmZvKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjE7CisKKwllcnIgPSBteHNfbmFuZF9pbml0KG5hbmRfaW5mbyk7CisJaWYgKGVycikKKwkJZ290byBlcnIyOworCisJbWVtc2V0KCZmYWtlX2VjY19sYXlvdXQsIDAsIHNpemVvZihmYWtlX2VjY19sYXlvdXQpKTsKKworCW5hbmQtPnByaXYgPSBuYW5kX2luZm87CisJbmFuZC0+b3B0aW9ucyB8PSBOQU5EX05PX1NVQlBBR0VfV1JJVEU7CisKKwluYW5kLT5jbWRfY3RybAkJPSBteHNfbmFuZF9jbWRfY3RybDsKKworCW5hbmQtPmRldl9yZWFkeQkJPSBteHNfbmFuZF9kZXZpY2VfcmVhZHk7CisJbmFuZC0+c2VsZWN0X2NoaXAJPSBteHNfbmFuZF9zZWxlY3RfY2hpcDsKKwluYW5kLT5ibG9ja19iYWQJCT0gbXhzX25hbmRfYmxvY2tfYmFkOworCW5hbmQtPnNjYW5fYmJ0CQk9IG14c19uYW5kX3NjYW5fYmJ0OworCisJbmFuZC0+cmVhZF9ieXRlCQk9IG14c19uYW5kX3JlYWRfYnl0ZTsKKworCW5hbmQtPnJlYWRfYnVmCQk9IG14c19uYW5kX3JlYWRfYnVmOworCW5hbmQtPndyaXRlX2J1ZgkJPSBteHNfbmFuZF93cml0ZV9idWY7CisKKwluYW5kLT5lY2MucmVhZF9wYWdlCT0gbXhzX25hbmRfZWNjX3JlYWRfcGFnZTsKKwluYW5kLT5lY2Mud3JpdGVfcGFnZQk9IG14c19uYW5kX2VjY193cml0ZV9wYWdlOworCW5hbmQtPmVjYy5yZWFkX29vYgk9IG14c19uYW5kX2VjY19yZWFkX29vYjsKKwluYW5kLT5lY2Mud3JpdGVfb29iCT0gbXhzX25hbmRfZWNjX3dyaXRlX29vYjsKKworCW5hbmQtPmVjYy5sYXlvdXQJPSAmZmFrZV9lY2NfbGF5b3V0OworCW5hbmQtPmVjYy5tb2RlCQk9IE5BTkRfRUNDX0hXOworCW5hbmQtPmVjYy5ieXRlcwkJPSA5OworCW5hbmQtPmVjYy5zaXplCQk9IDUxMjsKKworCXJldHVybiAwOworCitlcnIyOgorCWZyZWUobmFuZF9pbmZvLT5kYXRhX2J1Zik7CisJZnJlZShuYW5kX2luZm8tPmNtZF9idWYpOworZXJyMToKKwlmcmVlKG5hbmRfaW5mbyk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlCmluZGV4IGI5ODRiZDQuLmIwOTBkNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZQpAQCAtMjUsOCArMjUsMTIgQEAKIAogTElCCTo9ICQob2JqKWxpYm9uZW5hbmQubwogCitpZm5kZWYJQ09ORklHX1NQTF9CVUlMRAogQ09CSlMtJChDT05GSUdfQ01EX09ORU5BTkQpCTo9IG9uZW5hbmRfdWJvb3QubyBvbmVuYW5kX2Jhc2UubyBvbmVuYW5kX2JidC5vCiBDT0JKUy0kKENPTkZJR19TQU1TVU5HX09ORU5BTkQpCSs9IHNhbXN1bmcubworZWxzZQorQ09CSlMteQkJCQk6PSBvbmVuYW5kX3NwbC5vCitlbmRpZgogCiBDT0JKUwk6PSAkKENPQkpTLXkpCiBTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwppbmRleCAyNGUwMmMyLi4wNmYxODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKQEAgLTE5NDMsMTYgKzE5NDMsMTAgQEAKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCBzdGFydCwgZW5kLCBibG9jaywgdmFsdWUsIHN0YXR1czsKLQlpbnQgd3Bfc3RhdHVzX21hc2s7CiAKIAlzdGFydCA9IG9uZW5hbmRfYmxvY2sodGhpcywgb2ZzKTsKIAllbmQgPSBvbmVuYW5kX2Jsb2NrKHRoaXMsIG9mcyArIGxlbik7CiAKLQlpZiAoY21kID09IE9ORU5BTkRfQ01EX0xPQ0spCi0JCXdwX3N0YXR1c19tYXNrID0gT05FTkFORF9XUF9MUzsKLQllbHNlCi0JCXdwX3N0YXR1c19tYXNrID0gT05FTkFORF9XUF9VUzsKLQogCS8qIENvbnRpbnVvdXMgbG9jayBzY2hlbWUgKi8KIAlpZiAodGhpcy0+b3B0aW9ucyAmIE9ORU5BTkRfSEFTX0NPTlRfTE9DSykgewogCQkvKiBTZXQgc3RhcnQgYmxvY2sgYWRkcmVzcyAqLwpAQCAtMjIyNiwxOSArMjIyMCwyMSBAQAogc3RhdGljIGludCBvbmVuYW5kX2NoZWNrX21hZihpbnQgbWFudWYpCiB7CiAJaW50IHNpemUgPSBBUlJBWV9TSVpFKG9uZW5hbmRfbWFudWZfaWRzKTsKLQljaGFyICpuYW1lOwogCWludCBpOworI2lmZGVmIE9ORU5BTkRfREVCVUcKKwljaGFyICpuYW1lOworI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogCQlpZiAobWFudWYgPT0gb25lbmFuZF9tYW51Zl9pZHNbaV0uaWQpCiAJCQlicmVhazsKIAorI2lmZGVmIE9ORU5BTkRfREVCVUcKIAlpZiAoaSA8IHNpemUpCiAJCW5hbWUgPSBvbmVuYW5kX21hbnVmX2lkc1tpXS5uYW1lOwogCWVsc2UKIAkJbmFtZSA9ICJVbmtub3duIjsKIAotI2lmZGVmIE9ORU5BTkRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiT25lTkFORCBNYW51ZmFjdHVyZXI6ICVzICgweCUweClcbiIsIG5hbWUsIG1hbnVmKTsKICNlbmRpZgogCkBAIC0yMjU1LDcgKzIyNTEsNyBAQAogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJdW5zaWduZWQgaW50IGRpZSwgYmRyeTsKLQlpbnQgcmV0LCBzeXNjZmcsIGxvY2tlZDsKKwlpbnQgc3lzY2ZnLCBsb2NrZWQ7CiAKIAkvKiBEaXNhYmxlIEVDQyAqLwogCXN5c2NmZyA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1lTX0NGRzEpOwpAQCAtMjI2Niw3ICsyMjYyLDcgQEAKIAkJdGhpcy0+d2FpdChtdGQsIEZMX1NZTkNJTkcpOwogCiAJCXRoaXMtPmNvbW1hbmQobXRkLCBGTEVYT05FTkFORF9DTURfUkVBRF9QSSwgZGllLCAwKTsKLQkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOworCQl0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CiAKIAkJYmRyeSA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9EQVRBUkFNKTsKIAkJaWYgKChiZHJ5ID4+IEZMRVhPTkVOQU5EX1BJX1VOTE9DS19TSElGVCkgPT0gMykKQEAgLTIyNzYsNyArMjI3Miw3IEBACiAJCXRoaXMtPmJvdW5kYXJ5W2RpZV0gPSBiZHJ5ICYgRkxFWE9ORU5BTkRfUElfTUFTSzsKIAogCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVTRVQsIDAsIDApOwotCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOworCQl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOwogCiAJCXByaW50ayhLRVJOX0lORk8gIkRpZSAlZCBib3VuZGFyeTogJWQlc1xuIiwgZGllLAogCQkgICAgICAgdGhpcy0+Ym91bmRhcnlbZGllXSwgbG9ja2VkID8gIihMb2NrZWQpIiA6ICIoVW5sb2NrZWQpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfc3BsLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfc3BsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlYWE3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9zcGwuYwpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGNvZGU6CisgKglDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKglLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvb25lbmFuZF9yZWdzLmg+CisjaW5jbHVkZSA8b25lbmFuZF91Ym9vdC5oPgorCisvKgorICogRGV2aWNlIGdlb21ldHJ5OgorICogLSAyMDQ4YiBwYWdlLCAxMjhrIGVyYXNlIGJsb2NrLgorICogLSA0MDk2YiBwYWdlLCAyNTZrIGVyYXNlIGJsb2NrLgorICovCitlbnVtIG9uZW5hbmRfc3BsX3BhZ2VzaXplIHsKKwlQQUdFXzJLID0gMjA0OCwKKwlQQUdFXzRLID0gNDA5NiwKK307CisKKyNkZWZpbmUgT05FTkFORF9QQUdFU19QRVJfQkxPQ0sJCQk2NAorI2RlZmluZSBvbmVuYW5kX2Jsb2NrX2FkZHJlc3MoYmxvY2spCQkoYmxvY2spCisjZGVmaW5lIG9uZW5hbmRfc2VjdG9yX2FkZHJlc3MocGFnZSkJCShwYWdlIDw8IDIpCisjZGVmaW5lIG9uZW5hbmRfYnVmZmVyX2FkZHJlc3MoKQkJKCgxIDw8IDMpIDw8IDgpCisjZGVmaW5lIG9uZW5hbmRfYnVmZmVycmFtX2FkZHJlc3MoYmxvY2spCSgwKQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IG9uZW5hbmRfcmVhZHcodWludDMyX3QgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoQ09ORklHX1NZU19PTkVOQU5EX0JBU0UgKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9uZW5hbmRfd3JpdGV3KHVpbnQxNl90IHZhbHVlLCB1aW50MzJfdCBhZGRyKQoreworCXdyaXRldyh2YWx1ZSwgQ09ORklHX1NZU19PTkVOQU5EX0JBU0UgKyBhZGRyKTsKK30KKworc3RhdGljIGVudW0gb25lbmFuZF9zcGxfcGFnZXNpemUgb25lbmFuZF9zcGxfZ2V0X2dlb21ldHJ5KHZvaWQpCit7CisJdWludDMyX3QgZGV2X2lkLCBkZW5zaXR5OworCisJaWYgKCFvbmVuYW5kX3JlYWR3KE9ORU5BTkRfUkVHX1RFQ0hOT0xPR1kpKSB7CisJCWRldl9pZCA9IG9uZW5hbmRfcmVhZHcoT05FTkFORF9SRUdfREVWSUNFX0lEKTsKKwkJZGVuc2l0eSA9IGRldl9pZCA+PiBPTkVOQU5EX0RFVklDRV9ERU5TSVRZX1NISUZUOworCQlkZW5zaXR5ICY9IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfTUFTSzsKKworCQlpZiAoZGVuc2l0eSA8IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfNEdiKQorCQkJcmV0dXJuIFBBR0VfMks7CisKKwkJaWYgKGRldl9pZCAmIE9ORU5BTkRfREVWSUNFX0lTX0REUCkKKwkJCXJldHVybiBQQUdFXzJLOworCX0KKworCXJldHVybiBQQUdFXzRLOworfQorCitzdGF0aWMgaW50IG9uZW5hbmRfc3BsX3JlYWRfcGFnZSh1aW50MzJfdCBibG9jaywgdWludDMyX3QgcGFnZSwgdWludDMyX3QgKmJ1ZiwKKwkJCQkJZW51bSBvbmVuYW5kX3NwbF9wYWdlc2l6ZSBwYWdlc2l6ZSkKK3sKKwljb25zdCB1aW50MzJfdCBhZGRyID0gQ09ORklHX1NZU19PTkVOQU5EX0JBU0UgKyBPTkVOQU5EX0RBVEFSQU07CisJdWludDMyX3Qgb2Zmc2V0OworCisJb25lbmFuZF93cml0ZXcob25lbmFuZF9ibG9ja19hZGRyZXNzKGJsb2NrKSwKKwkJCU9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1MxKTsKKworCW9uZW5hbmRfd3JpdGV3KG9uZW5hbmRfYnVmZmVycmFtX2FkZHJlc3MoYmxvY2spLAorCQkJT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIpOworCisJb25lbmFuZF93cml0ZXcob25lbmFuZF9zZWN0b3JfYWRkcmVzcyhwYWdlKSwKKwkJCU9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1M4KTsKKworCW9uZW5hbmRfd3JpdGV3KG9uZW5hbmRfYnVmZmVyX2FkZHJlc3MoKSwKKwkJCU9ORU5BTkRfUkVHX1NUQVJUX0JVRkZFUik7CisKKwlvbmVuYW5kX3dyaXRldyhPTkVOQU5EX0lOVF9DTEVBUiwgT05FTkFORF9SRUdfSU5URVJSVVBUKTsKKworCW9uZW5hbmRfd3JpdGV3KE9ORU5BTkRfQ01EX1JFQUQsIE9ORU5BTkRfUkVHX0NPTU1BTkQpOworCisJd2hpbGUgKCEob25lbmFuZF9yZWFkdyhPTkVOQU5EX1JFR19JTlRFUlJVUFQpICYgT05FTkFORF9JTlRfUkVBRCkpCisJCWNvbnRpbnVlOworCisJLyogQ2hlY2sgZm9yIGludmFsaWQgYmxvY2sgbWFyayAqLworCWlmIChwYWdlIDwgMiAmJiAob25lbmFuZF9yZWFkdyhPTkVOQU5EX1NQQVJFUkFNKSAhPSAweGZmZmYpKQorCQlyZXR1cm4gMTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgcGFnZXNpemU7IG9mZnNldCArPSA0KQorCQlidWZbb2Zmc2V0IC8gNF0gPSByZWFkbChhZGRyICsgb2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCit2b2lkIG9uZW5hbmRfc3BsX2xvYWRfaW1hZ2UodWludDMyX3Qgb2ZmcywgdWludDMyX3Qgc2l6ZSwgdm9pZCAqZHN0KQoreworCXVpbnQzMl90ICphZGRyID0gKHVpbnQzMl90ICopZHN0OworCXVpbnQzMl90IHRvdGFsX3BhZ2VzOworCXVpbnQzMl90IGJsb2NrOworCXVpbnQzMl90IHBhZ2UsIHJwYWdlOworCWVudW0gb25lbmFuZF9zcGxfcGFnZXNpemUgcGFnZXNpemU7CisJaW50IHJldDsKKworCXBhZ2VzaXplID0gb25lbmFuZF9zcGxfZ2V0X2dlb21ldHJ5KCk7CisKKwkvKgorCSAqIFRoZSBwYWdlIGNhbiBiZSBlaXRoZXIgMmsgb3IgNGssIGF2b2lkIHVzaW5nIERJVl9ST1VORF9VUCB0byBhdm9pZAorCSAqIHB1bGxpbmcgZnVydGhlciB1bndhbnRlZCBmdW5jdGlvbnMgaW50byB0aGUgU1BMLgorCSAqLworCWlmIChwYWdlc2l6ZSA9PSAyMDQ4KSB7CisJCXRvdGFsX3BhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIDIwNDgpOworCQlwYWdlID0gb2ZmcyAvIDIwNDg7CisJfSBlbHNlIHsKKwkJdG90YWxfcGFnZXMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgNDA5Nik7CisJCXBhZ2UgPSBvZmZzIC8gNDA5NjsKKwl9CisKKwlmb3IgKDsgcGFnZSA8PSB0b3RhbF9wYWdlczsgcGFnZSsrKSB7CisJCWJsb2NrID0gcGFnZSAvIE9ORU5BTkRfUEFHRVNfUEVSX0JMT0NLOworCQlycGFnZSA9IHBhZ2UgJiAoT05FTkFORF9QQUdFU19QRVJfQkxPQ0sgLSAxKTsKKwkJcmV0ID0gb25lbmFuZF9zcGxfcmVhZF9wYWdlKGJsb2NrLCBycGFnZSwgYWRkciwgcGFnZXNpemUpOworCQlpZiAocmV0KSB7CisJCQl0b3RhbF9wYWdlcyArPSBPTkVOQU5EX1BBR0VTX1BFUl9CTE9DSzsKKwkJCXBhZ2UgKz0gT05FTkFORF9QQUdFU19QRVJfQkxPQ0sgLSAxOworCQl9IGVsc2UgeworCQkJYWRkciArPSBwYWdlc2l6ZSAvIDQ7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC80eHhfZW5ldC5jIGIvZHJpdmVycy9uZXQvNHh4X2VuZXQuYwppbmRleCBhNzcxMTM5Li43MzcwMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC80eHhfZW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0LzR4eF9lbmV0LmMKQEAgLTkyLDYgKzkyLDcgQEAKICNpbmNsdWRlIDxhc20vcHBjNHh4LW1hbC5oPgogI2luY2x1ZGUgPG1paXBoeS5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZiAhKGRlZmluZWQoQ09ORklHX01JSSkgfHwgZGVmaW5lZChDT05GSUdfQ01EX01JSSkpCiAjZXJyb3IgIkNPTkZJR19NSUkgaGFzIHRvIGJlIGRlZmluZWQhIgpAQCAtODcyLDcgKzg3Myw3IEBACiAgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR180NjBFWCkgfHwgZGVmaW5lZChDT05GSUdfNDYwR1QpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR180MDVFWCkKLQlpbnQgZXRoZ3JvdXAgPSAtMTsKKwlfX21heWJlX3VudXNlZCBpbnQgZXRoZ3JvdXAgPSAtMTsKICNlbmRpZgogI2VuZGlmCiAJdTMyIGJkX2NhY2hlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0OTFfZW1hYy5jIGIvZHJpdmVycy9uZXQvYXQ5MV9lbWFjLmMKaW5kZXggOTdkMjczOS4uOWJkYTFmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXQ5MV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYXQ5MV9lbWFjLmMKQEAgLTQ3NCwxMSArNDc0LDkgQEAKIAogc3RhdGljIGludCBhdDkxZW1hY193cml0ZV9od2FkZHIoc3RydWN0IGV0aF9kZXZpY2UgKm5ldGRldikKIHsKLQllbWFjX2RldmljZSAqZGV2OwogCWF0OTFfZW1hY190ICplbWFjOwogCWF0OTFfcG1jX3QgKnBtYyA9IChhdDkxX3BtY190ICopIEFUTUVMX0JBU0VfUE1DOwogCWVtYWMgPSAoYXQ5MV9lbWFjX3QgKikgbmV0ZGV2LT5pb2Jhc2U7Ci0JZGV2ID0gKGVtYWNfZGV2aWNlICopIG5ldGRldi0+cHJpdjsKIAogCXdyaXRlbCgxIDw8IEFUTUVMX0lEX0VNQUMsICZwbWMtPnBjZXIpOwogCURFQlVHX0FUOTFFTUFDKCJpbml0IE1BQy1BRERSICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCBmYTMxMTU5Li4zNmMzM2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtODUsMTUgKzg1LDE3IEBACiAvKiBSZWNlaXZlIHBhY2tldCBidWZmZXJzICovCiBzdGF0aWMgdW5zaWduZWQgY2hhcgkJZW1hY19yeF9idWZmZXJzW0VNQUNfTUFYX1JYX0JVRkZFUlMgKiAoRU1BQ19NQVhfRVRIRVJORVRfUEtUX1NJWkUgKyBFTUFDX1BLVF9BTElHTildOwogCi0jZGVmaW5lIE1BWF9QSFkJCTMKKyNpZm5kZWYgQ09ORklHX1NZU19EQVZJTkNJX0VNQUNfUEhZX0NPVU5UCisjZGVmaW5lIENPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVAkzCisjZW5kaWYKIAogLyogUEhZIGFkZHJlc3MgZm9yIGEgZGlzY292ZXJlZCBQSFkgKDB4ZmYgLSBub3QgZm91bmQpICovCi1zdGF0aWMgdV9pbnQ4X3QJYWN0aXZlX3BoeV9hZGRyW01BWF9QSFldID0geyAweGZmLCAweGZmLCAweGZmIH07CitzdGF0aWMgdV9pbnQ4X3QJYWN0aXZlX3BoeV9hZGRyW0NPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVF07CiAKIC8qIG51bWJlciBvZiBQSFkgZm91bmQgYWN0aXZlICovCiBzdGF0aWMgdV9pbnQ4X3QJbnVtX3BoeTsKIAotcGh5X3QJCQkJcGh5W01BWF9QSFldOworcGh5X3QJCQkJcGh5W0NPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVF07CiAKIHN0YXRpYyBpbnQgZGF2aW5jaV9ldGhfc2V0X21hY19hZGRyKHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCiB7CkBAIC0xNjAsOSArMTYyLDggQEAKIAlpbnQJCWo7CiAJdW5zaWduZWQgaW50CWNvdW50ID0gMDsKIAotCWFjdGl2ZV9waHlfYWRkclswXSA9IDB4ZmY7Ci0JYWN0aXZlX3BoeV9hZGRyWzFdID0gMHhmZjsKLQlhY3RpdmVfcGh5X2FkZHJbMl0gPSAweGZmOworCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU1lTX0RBVklOQ0lfRU1BQ19QSFlfQ09VTlQ7IGkrKykKKwkJYWN0aXZlX3BoeV9hZGRyW2ldID0gMHhmZjsKIAogCXVkZWxheSgxMDAwKTsKIAlwaHlfYWN0X3N0YXRlID0gcmVhZGwoJmFkYXBfbWRpby0+QUxJVkUpOwpAQCAtMTc1LDcgKzE3NiwxNCBAQAogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMzI7IGkrKykKIAkJaWYgKHBoeV9hY3Rfc3RhdGUgJiAoMSA8PCBpKSkgewogCQkJY291bnQrKzsKLQkJCWFjdGl2ZV9waHlfYWRkcltqKytdID0gaTsKKwkJCWlmIChjb3VudCA8IENPTkZJR19TWVNfREFWSU5DSV9FTUFDX1BIWV9DT1VOVCkgeworCQkJCWFjdGl2ZV9waHlfYWRkcltqKytdID0gaTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCIlczogdG8gbWFueSBQSFlzIGRldGVjdGVkLlxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCWNvdW50ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCiAJbnVtX3BoeSA9IGNvdW50OwpAQCAtNzUyLDcgKzc2MCw3IEBACiAJaWYgKCFyZXQpCiAJCXJldHVybigwKTsKIAllbHNlCi0JCXByaW50ZigiICVkIEVUSCBQSFkgZGV0ZWN0ZWRcbiIsIHJldCk7CisJCWRlYnVnX2VtYWMoIiAlZCBFVEggUEhZIGRldGVjdGVkXG4iLCByZXQpOwogCiAJLyogR2V0IFBIWSBJRCBhbmQgaW5pdGlhbGl6ZSBwaHlfb3BzIGZvciBhIGRldGVjdGVkIFBIWSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGh5OyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwLmMgYi9kcml2ZXJzL25ldC9lMTAwMC5jCmluZGV4IDZlYWI3YjIuLjZiNzFiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAuYwpAQCAtMTM3MCw3ICsxMzcwLDYgQEAKIHsKIAl1aW50MzJfdCBjdHJsOwogCXVpbnQzMl90IGN0cmxfZXh0OwotCXVpbnQzMl90IGljcjsKIAl1aW50MzJfdCBtYW5jOwogCXVpbnQzMl90IHBiYSA9IDA7CiAKQEAgLTE0NDMsNyArMTQ0Miw3IEBACiAJRTEwMDBfV1JJVEVfUkVHKGh3LCBJTUMsIDB4ZmZmZmZmZmYpOwogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cy4gKi8KLQlpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKKwlFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKIAogCS8qIElmIE1XSSB3YXMgcHJldmlvdXNseSBlbmFibGVkLCByZWVuYWJsZSBpdC4gKi8KIAlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkgewpAQCAtNDQ0Nyw3ICs0NDQ2LDggQEAKIAkJbWRlbGF5KDIwKTsKIAogCQkvKiBOb3cgZW5hYmxlIHRoZSB0cmFuc21pdHRlciAqLwotCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCAweDJGNUIsIHBoeV9zYXZlZF9kYXRhKTsKKwkJaWYgKCFyZXRfdmFsKQorCQkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMHgyRjVCLCBwaHlfc2F2ZWRfZGF0YSk7CiAKIAkJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykgewogCQkJdWludDE2X3QgZnVzZWQsIGZpbmUsIGNvYXJzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMC5oCmluZGV4IGQ4NDAwZDQuLmZkMWQ4ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAuaApAQCAtMTY3OCwxNCArMTY3OCw2IEBACiAjZGVmaW5lIEVFUFJPTV9FV0VOX09QQ09ERSAgMHgxMwkvKiBFRVJQT00gZXJhc2Uvd3JpdGUgZW5hYmxlICovCiAjZGVmaW5lIEVFUFJPTV9FV0RTX09QQ09ERSAgMHgxMAkvKiBFRVJQT00gZXJhc3Qvd3JpdGUgZGlzYWJsZSAqLwogCi0vKiBFRVBST00gV29yZCBPZmZzZXRzICovCi0jZGVmaW5lIEVFUFJPTV9DT01QQVQJCSAgIDB4MDAwMwotI2RlZmluZSBFRVBST01fSURfTEVEX1NFVFRJTkdTCSAgIDB4MDAwNAotI2RlZmluZSBFRVBST01fSU5JVF9DT05UUk9MMV9SRUcgICAweDAwMEEKLSNkZWZpbmUgRUVQUk9NX0lOSVRfQ09OVFJPTDJfUkVHICAgMHgwMDBGCi0jZGVmaW5lIEVFUFJPTV9GTEFTSF9WRVJTSU9OCSAgIDB4MDAzMgotI2RlZmluZSBFRVBST01fQ0hFQ0tTVU1fUkVHCSAgIDB4MDAzRgotCiAvKiBXb3JkIGRlZmluaXRpb25zIGZvciBJRCBMRUQgU2V0dGluZ3MgKi8KICNkZWZpbmUgSURfTEVEX1JFU0VSVkVEXzAwMDAgMHgwMDAwCiAjZGVmaW5lIElEX0xFRF9SRVNFUlZFRF9GRkZGIDB4RkZGRgpAQCAtMjQ3OSw3ICsyNDcxLDYgQEAKICNkZWZpbmUgQURWRVJUSVNFXzEwMF9GVUxMCQkweDAwMDgKICNkZWZpbmUgQURWRVJUSVNFXzEwMDBfSEFMRgkJMHgwMDEwCiAjZGVmaW5lIEFEVkVSVElTRV8xMDAwX0ZVTEwJCTB4MDAyMAotI2RlZmluZSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUIDB4MDAyRgkvKiBFdmVyeXRoaW5nIGJ1dCAxMDAwLUhhbGYgKi8KIAogI2RlZmluZSBJQ0hfRkxBU0hfR0ZQUkVHICAgMHgwMDAwCiAjZGVmaW5lIElDSF9GTEFTSF9IU0ZTVFMgICAweDAwMDQKQEAgLTI1MDQsNyArMjQ5NSw2IEBACiAjZGVmaW5lIElDSF9HRlBSRUdfQkFTRV9NQVNLICAgICAgIDB4MUZGRgogI2RlZmluZSBJQ0hfRkxBU0hfTElORUFSX0FERFJfTUFTSyAweDAwRkZGRkZGCiAKLSNkZWZpbmUgRTEwMDBfRUVXUiAgICAgMHgwMTAyQyAgLyogRUVQUk9NIFdyaXRlIFJlZ2lzdGVyIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfU1dfRldfU1lOQyAweDA1QjVDIC8qIFNvZnR3YXJlLUZpcm13YXJlIFN5bmNocm9uaXphdGlvbiAtIFJXICovCiAKIC8qIFNQSSBFRVBST00gU3RhdHVzIFJlZ2lzdGVyICovCkBAIC0yNTk5LDcgKzI1ODksNiBAQAogI2RlZmluZSBQSFlfQ0ZHX1RJTUVPVVQgICAgICAgICAgICAgMTAwCiAjZGVmaW5lIERFRkFVTFRfODAwMDNFUzJMQU5fVElQR19JUEdUXzEwXzEwMCAweDAwMDAwMDA5CiAjZGVmaW5lIERFRkFVTFRfODAwMDNFUzJMQU5fVElQR19JUEdUXzEwMDAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEUxMDAwX1RYRE1BQ19EUFAgMHgwMDAwMDAwMQogI2RlZmluZSBBVVRPX0FMTF9NT0RFUwkwCiAKICNpZm5kZWYgRTEwMDBfTUFTVEVSX1NMQVZFCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwppbmRleCBkNTVjYWNkLi5lMjAxMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKQEAgLTQzMiw3ICs0MzIsNiBAQAogCXUxNiBwa3RfbGVuOwogCXUxNiBjb3B5X2xlbjsKIAl1MTYgc3RhdHVzOwotCXU4IGVpcl9yZWc7CiAJdTggcGt0X2NudCA9IDA7CiAJdTE2IHJ4YnVmX3JkcHQ7CiAJdTggaGJ1Zls2XTsKQEAgLTQ3Niw3ICs0NzUsNyBAQAogCQkvKiByZWFkIHBrdGNudCAqLwogCQlwa3RfY250ID0gZW5jX3I4KGVuYywgQ1RMX1JFR19FUEtUQ05UKTsKIAkJaWYgKGNvcHlfbGVuID09IDApIHsKLQkJCWVpcl9yZWcgPSBlbmNfcjgoZW5jLCBDVExfUkVHX0VJUik7CisJCQkodm9pZCllbmNfcjgoZW5jLCBDVExfUkVHX0VJUik7CiAJCQllbmNfcmVzZXRfcngoZW5jKTsKIAkJCXByaW50ZigiJXM6IHJlY2VpdmUgY29weV9sZW49MFxuIiwgZW5jLT5kZXYtPm5hbWUpOwogCQkJY29udGludWU7CkBAIC00ODksNyArNDg4LDcgQEAKIAkJTmV0UmVjZWl2ZShwYWNrZXQsIHBrdF9sZW4pOwogCQlpZiAoZW5jX2NsYWltX2J1cyhlbmMpKQogCQkJcmV0dXJuOwotCQllaXJfcmVnID0gZW5jX3I4KGVuYywgQ1RMX1JFR19FSVIpOworCQkodm9pZCllbmNfcjgoZW5jLCBDVExfUkVHX0VJUik7CiAJfSB3aGlsZSAocGt0X2NudCk7CiAJLyogVXNlIEVQS1RDTlQgbm90IEVJUi5QS1RJRiBmbGFnLCBzZWUgZXJyYXRhIHB0LiA2ICovCiB9CkBAIC01MDAsMTQgKzQ5OSwxMyBAQAogc3RhdGljIHZvaWQgZW5jX3BvbGwoZW5jX2Rldl90ICplbmMpCiB7CiAJdTggZWlyX3JlZzsKLQl1OCBlc3RhdF9yZWc7CiAJdTggcGt0X2NudDsKIAogI2lmZGVmIENPTkZJR19VU0VfSVJRCiAJLyogY2xlYXIgZ2xvYmFsIGludGVycnVwdCBlbmFibGUgYml0IGluIGVuYzI4ajYwICovCiAJZW5jX2JjbHIoZW5jLCBDVExfUkVHX0VJRSwgRU5DX0VJRV9JTlRJRSk7CiAjZW5kaWYKLQllc3RhdF9yZWcgPSBlbmNfcjgoZW5jLCBDVExfUkVHX0VTVEFUKTsKKwkodm9pZCllbmNfcjgoZW5jLCBDVExfUkVHX0VTVEFUKTsKIAllaXJfcmVnID0gZW5jX3I4KGVuYywgQ1RMX1JFR19FSVIpOwogCWlmIChlaXJfcmVnICYgRU5DX0VJUl9UWElGKSB7CiAJCS8qIGNsZWFyIFRYSUYgYml0IGluIEVJUiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX214Yy5jIGIvZHJpdmVycy9uZXQvZmVjX214Yy5jCmluZGV4IDBjMGM3Y2QuLmIwNWE0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19teGMuYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXhjLmMKQEAgLTQyLDYgKzQyLDE0IEBACiAjZGVmaW5lCUNPTkZJR19GRUNfWENWX1RZUEUJTUlJMTAwCiAjZW5kaWYKIAorLyoKKyAqIFRoZSBpLk1YMjggb3BlcmF0ZXMgd2l0aCBwYWNrZXRzIGluIGJpZyBlbmRpYW4uIFdlIG5lZWQgdG8gc3dhcCB0aGVtIGJlZm9yZQorICogc2VuZGluZyBhbmQgYWZ0ZXIgcmVjZWl2aW5nLgorICovCisjaWZkZWYJQ09ORklHX01YMjgKKyNkZWZpbmUJQ09ORklHX0ZFQ19NWENfU1dBUF9QQUNLRVQKKyNlbmRpZgorCiAjdW5kZWYgREVCVUcKIAogc3RydWN0IG5idWYgewpAQCAtNTEsNiArNTksMzIgQEAKIAl1aW50OF90IGhlYWRbMTZdOwkvKio8IE1BQyBoZWFkZXIoNiArIDYgKyAyKSArIDIoYWxpZ25lZCkgKi8KIH07CiAKKyNpZmRlZglDT05GSUdfRkVDX01YQ19TV0FQX1BBQ0tFVAorc3RhdGljIHZvaWQgc3dhcF9wYWNrZXQodWludDMyX3QgKnBhY2tldCwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAobGVuZ3RoLCA0KTsgaSsrKQorCQlwYWNrZXRbaV0gPSBfX3N3YWIzMihwYWNrZXRbaV0pOworfQorI2VuZGlmCisKKy8qCisgKiBUaGUgaS5NWDI4IGhhcyB0d28gZXRoZXJuZXQgaW50ZXJmYWNlcywgYnV0IHRoZXkgYXJlIG5vdCBlcXVhbC4KKyAqIE9ubHkgdGhlIGZpcnN0IG9uZSBjYW4gYWNjZXNzIHRoZSBNRElPIGJ1cy4KKyAqLworI2lmZGVmCUNPTkZJR19NWDI4CitzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhlcm5ldF9yZWdzICpmZWNfbWlpcGh5X2ZlY190b19ldGgoc3RydWN0IGZlY19wcml2ICpmZWMpCit7CisJcmV0dXJuIChzdHJ1Y3QgZXRoZXJuZXRfcmVncyAqKU1YU19FTkVUMF9CQVNFOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV0aGVybmV0X3JlZ3MgKmZlY19taWlwaHlfZmVjX3RvX2V0aChzdHJ1Y3QgZmVjX3ByaXYgKmZlYykKK3sKKwlyZXR1cm4gZmVjLT5ldGg7Cit9CisjZW5kaWYKKwogLyoKICAqIE1JSS1pbnRlcmZhY2UgcmVsYXRlZCBmdW5jdGlvbnMKICAqLwpAQCAtNTksNyArOTMsNyBAQAogewogCXN0cnVjdCBldGhfZGV2aWNlICplZGV2ID0gZXRoX2dldF9kZXZfYnlfbmFtZShkZXYpOwogCXN0cnVjdCBmZWNfcHJpdiAqZmVjID0gKHN0cnVjdCBmZWNfcHJpdiAqKWVkZXYtPnByaXY7Ci0Jc3RydWN0IGV0aGVybmV0X3JlZ3MgKmV0aCA9IGZlYy0+ZXRoOworCXN0cnVjdCBldGhlcm5ldF9yZWdzICpldGggPSBmZWNfbWlpcGh5X2ZlY190b19ldGgoZmVjKTsKIAogCXVpbnQzMl90IHJlZzsJCS8qIGNvbnZlbmllbnQgaG9sZGVyIGZvciB0aGUgUEhZIHJlZ2lzdGVyICovCiAJdWludDMyX3QgcGh5OwkJLyogY29udmVuaWVudCBob2xkZXIgZm9yIHRoZSBQSFkgKi8KQEAgLTExNyw3ICsxNTEsNyBAQAogewogCXN0cnVjdCBldGhfZGV2aWNlICplZGV2ID0gZXRoX2dldF9kZXZfYnlfbmFtZShkZXYpOwogCXN0cnVjdCBmZWNfcHJpdiAqZmVjID0gKHN0cnVjdCBmZWNfcHJpdiAqKWVkZXYtPnByaXY7Ci0Jc3RydWN0IGV0aGVybmV0X3JlZ3MgKmV0aCA9IGZlYy0+ZXRoOworCXN0cnVjdCBldGhlcm5ldF9yZWdzICpldGggPSBmZWNfbWlpcGh5X2ZlY190b19ldGgoZmVjKTsKIAogCXVpbnQzMl90IHJlZzsJCS8qIGNvbnZlbmllbnQgaG9sZGVyIGZvciB0aGUgUEhZIHJlZ2lzdGVyICovCiAJdWludDMyX3QgcGh5OwkJLyogY29udmVuaWVudCBob2xkZXIgZm9yIHRoZSBQSFkgKi8KQEAgLTU3Miw2ICs2MDYsOSBAQAogCSAqIE5vdGU6IFdlIGFyZSBhbHdheXMgdXNpbmcgdGhlIGZpcnN0IGJ1ZmZlciBmb3IgdHJhbnNtaXNzaW9uLAogCSAqIHRoZSBzZWNvbmQgd2lsbCBiZSBlbXB0eSBhbmQgb25seSB1c2VkIHRvIHN0b3AgdGhlIERNQSBlbmdpbmUKIAkgKi8KKyNpZmRlZglDT05GSUdfRkVDX01YQ19TV0FQX1BBQ0tFVAorCXN3YXBfcGFja2V0KCh1aW50MzJfdCAqKXBhY2tldCwgbGVuZ3RoKTsKKyNlbmRpZgogCXdyaXRldyhsZW5ndGgsICZmZWMtPnRiZF9iYXNlW2ZlYy0+dGJkX2luZGV4XS5kYXRhX2xlbmd0aCk7CiAJd3JpdGVsKCh1aW50MzJfdClwYWNrZXQsICZmZWMtPnRiZF9iYXNlW2ZlYy0+dGJkX2luZGV4XS5kYXRhX3BvaW50ZXIpOwogCS8qCkBAIC02NjgsNiArNzA1LDkgQEAKIAkJCS8qCiAJCQkgKiAgRmlsbCB0aGUgYnVmZmVyIGFuZCBwYXNzIGl0IHRvIHVwcGVyIGxheWVycwogCQkJICovCisjaWZkZWYJQ09ORklHX0ZFQ19NWENfU1dBUF9QQUNLRVQKKwkJCXN3YXBfcGFja2V0KCh1aW50MzJfdCAqKWZyYW1lLT5kYXRhLCBmcmFtZV9sZW5ndGgpOworI2VuZGlmCiAJCQltZW1jcHkoYnVmZiwgZnJhbWUtPmRhdGEsIGZyYW1lX2xlbmd0aCk7CiAJCQlOZXRSZWNlaXZlKGJ1ZmYsIGZyYW1lX2xlbmd0aCk7CiAJCQlsZW4gPSBmcmFtZV9sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mbS9mbS5jIGIvZHJpdmVycy9uZXQvZm0vZm0uYwppbmRleCAyM2VmMTRiLi44NDZjMzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mbS9mbS5jCisrKyBiL2RyaXZlcnMvbmV0L2ZtL2ZtLmMKQEAgLTM5NSw3ICszOTUsNiBAQAogCWludCBkZXYgPSBDT05GSUdfU1lTX01NQ19FTlZfREVWOwogCXZvaWQgKmFkZHIgPSBtYWxsb2MoQ09ORklHX1NZU19GTUFOX0ZXX0xFTkdUSCk7CiAJdTMyIGNudCA9IENPTkZJR19TWVNfRk1BTl9GV19MRU5HVEggLyA1MTI7Ci0JdTMyIG47CiAJdTMyIGJsayA9IENPTkZJR19TWVNfUUVfRldfSU5fTU1DIC8gNTEyOwogCXN0cnVjdCBtbWMgKm1tYyA9IGZpbmRfbW1jX2RldmljZShDT05GSUdfU1lTX01NQ19FTlZfREVWKTsKIApAQCAtNDA1LDcgKzQwNCw3IEBACiAJCXByaW50ZigiXG5NTUMgcmVhZDogZGV2ICMgJXUsIGJsb2NrICMgJXUsIGNvdW50ICV1IC4uLlxuIiwKIAkJCQlkZXYsIGJsaywgY250KTsKIAkJbW1jX2luaXQobW1jKTsKLQkJbiA9IG1tYy0+YmxvY2tfZGV2LmJsb2NrX3JlYWQoZGV2LCBibGssIGNudCwgYWRkcik7CisJCSh2b2lkKW1tYy0+YmxvY2tfZGV2LmJsb2NrX3JlYWQoZGV2LCBibGssIGNudCwgYWRkcik7CiAJCS8qIGZsdXNoIGNhY2hlIGFmdGVyIHJlYWQgKi8KIAkJZmx1c2hfY2FjaGUoKHVsb25nKWFkZHIsIGNudCAqIDUxMik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHNlYy5jIGIvZHJpdmVycy9uZXQvdHNlYy5jCmluZGV4IDc4ZmZjOTUuLjE2MGJjMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RzZWMuYworKysgYi9kcml2ZXJzL25ldC90c2VjLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDx0c2VjLmg+CiAjaW5jbHVkZSA8ZnNsX21kaW8uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCkBAIC00Myw2ICs0NCw5IEBACiAjZXJyb3IgInJ0eCBtdXN0IGJlIDY0LWJpdCBhbGlnbmVkIgogI2VuZGlmCiAKK3N0YXRpYyBpbnQgdHNlY19zZW5kKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsCisJdm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKTsKKwogLyogRGVmYXVsdCBpbml0aWFsaXphdGlvbnMgZm9yIFRTRUMgY29udHJvbGxlcnMuICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHNlY19pbmZvX3N0cnVjdCB0c2VjX2luZm9bXSA9IHsKQEAgLTIzNiw2ICsyNDAsODcgQEAKIAkJCShwaHlkZXYtPnBvcnQgPT0gUE9SVF9GSUJSRSkgPyAiLCBmaWJlciBtb2RlIiA6ICIiKTsKIH0KIAorI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fTk1HX0VUU0VDMTI5CisvKgorICogV2hlbiBNQUNDRkcxW1J4X0VOXSBpcyBlbmFibGVkIGR1cmluZyBzeXN0ZW0gYm9vdCBhcyBwYXJ0CisgKiBvZiB0aGUgZVRTRUMgcG9ydCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwKKyAqIHRoZSBlVFNFQyBSeCBsb2dpYyBtYXkgbm90IGJlIHByb3Blcmx5IGluaXRpYWxpemVkLgorICovCit2b2lkIHJlZHVuZGFudF9pbml0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRzZWNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+cHJpdjsKKwl0c2VjX3QgKnJlZ3MgPSBwcml2LT5yZWdzOworCXVpbnQgdCwgY291bnQgPSAwOworCWludCBmYWlsID0gMTsKKwlzdGF0aWMgY29uc3QgdTggcGt0W10gPSB7CisJCTB4MDAsIDB4MWUsIDB4NGYsIDB4MTIsIDB4Y2IsIDB4MmMsIDB4MDAsIDB4MjUsCisJCTB4NjQsIDB4YmIsIDB4ZDEsIDB4YWIsIDB4MDgsIDB4MDAsIDB4NDUsIDB4MDAsCisJCTB4MDAsIDB4NWMsIDB4ZGQsIDB4MjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsCisJCTB4MWYsIDB4NzEsIDB4MGEsIDB4YzEsIDB4MTQsIDB4MjIsIDB4MGEsIDB4YzEsCisJCTB4MTQsIDB4NmEsIDB4MDgsIDB4MDAsIDB4ZWYsIDB4N2UsIDB4MDIsIDB4MDAsCisJCTB4OTQsIDB4MDUsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsCisJCTB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsCisJCTB4NmYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCisJCTB4NzcsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisJCTB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCisJCTB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCisJCTB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsCisJCTB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsIDB4NzAsCisJCTB4NzEsIDB4NzJ9OworCisJLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KKwlzZXRiaXRzX2JlMzIoJnJlZ3MtPnJjdHJsLCAweDgpOworCS8qIEVuYWJsZSBsb29wYmFjayBtb2RlICovCisJc2V0Yml0c19iZTMyKCZyZWdzLT5tYWNjZmcxLCBNQUNDRkcxX0xPT1BCQUNLKTsKKwkvKiBFbmFibGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgKi8KKwlzZXRiaXRzX2JlMzIoJnJlZ3MtPm1hY2NmZzEsIE1BQ0NGRzFfUlhfRU4gfCBNQUNDRkcxX1RYX0VOKTsKKworCS8qIFRlbGwgdGhlIERNQSBpdCBpcyBjbGVhciB0byBnbyAqLworCXNldGJpdHNfYmUzMigmcmVncy0+ZG1hY3RybCwgRE1BQ1RSTF9JTklUX1NFVFRJTkdTKTsKKwlvdXRfYmUzMigmcmVncy0+dHN0YXQsIFRTVEFUX0NMRUFSX1RIQUxUKTsKKwlvdXRfYmUzMigmcmVncy0+cnN0YXQsIFJTVEFUX0NMRUFSX1JIQUxUKTsKKwljbHJiaXRzX2JlMzIoJnJlZ3MtPmRtYWN0cmwsIERNQUNUUkxfR1JTIHwgRE1BQ1RSTF9HVFMpOworCisJZG8geworCQl0c2VjX3NlbmQoZGV2LCAodm9pZCAqKXBrdCwgc2l6ZW9mKHBrdCkpOworCisJCS8qIFdhaXQgZm9yIGJ1ZmZlciB0byBiZSByZWNlaXZlZCAqLworCQlmb3IgKHQgPSAwOyBydHgucnhiZFtyeElkeF0uc3RhdHVzICYgUlhCRF9FTVBUWTsgdCsrKSB7CisJCQlpZiAodCA+PSAxMCAqIFRPVVRfTE9PUCkgeworCQkJCXByaW50ZigiJXM6IHRzZWM6IHJ4IGVycm9yXG4iLCBkZXYtPm5hbWUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFtZW1jbXAocGt0LCAodm9pZCAqKU5ldFJ4UGFja2V0c1tyeElkeF0sIHNpemVvZihwa3QpKSkKKwkJCWZhaWwgPSAwOworCisJCXJ0eC5yeGJkW3J4SWR4XS5sZW5ndGggPSAwOworCQlydHgucnhiZFtyeElkeF0uc3RhdHVzID0KKwkJICAgIFJYQkRfRU1QVFkgfCAoKChyeElkeCArIDEpID09IFBLVEJVRlNSWCkgPyBSWEJEX1dSQVAgOiAwKTsKKwkJcnhJZHggPSAocnhJZHggKyAxKSAlIFBLVEJVRlNSWDsKKworCQlpZiAoaW5fYmUzMigmcmVncy0+aWV2ZW50KSAmIElFVkVOVF9CU1kpIHsKKwkJCW91dF9iZTMyKCZyZWdzLT5pZXZlbnQsIElFVkVOVF9CU1kpOworCQkJb3V0X2JlMzIoJnJlZ3MtPnJzdGF0LCBSU1RBVF9DTEVBUl9SSEFMVCk7CisJCX0KKwkJaWYgKGZhaWwpIHsKKwkJCXByaW50ZigibG9vcGJhY2sgcmVjdiBwYWNrZXQgZXJyb3IhXG4iKTsKKwkJCWNscmJpdHNfYmUzMigmcmVncy0+bWFjY2ZnMSwgTUFDQ0ZHMV9SWF9FTik7CisJCQl1ZGVsYXkoMTAwMCk7CisJCQlzZXRiaXRzX2JlMzIoJnJlZ3MtPm1hY2NmZzEsIE1BQ0NGRzFfUlhfRU4pOworCQl9CisJfSB3aGlsZSAoKGNvdW50KysgPCA0KSAmJiAoZmFpbCA9PSAxKSk7CisKKwlpZiAoZmFpbCkKKwkJcGFuaWMoImVUU0VDIGluaXQgZmFpbCFcbiIpOworCS8qIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworCWNscmJpdHNfYmUzMigmcmVncy0+cmN0cmwsIDB4OCk7CisJLyogRGlzYWJsZSBsb29wYmFjayBtb2RlICovCisJY2xyYml0c19iZTMyKCZyZWdzLT5tYWNjZmcxLCBNQUNDRkcxX0xPT1BCQUNLKTsKK30KKyNlbmRpZgorCiAvKiBTZXQgdXAgdGhlIGJ1ZmZlcnMgYW5kIHRoZWlyIGRlc2NyaXB0b3JzLCBhbmQgYnJpbmcgdXAgdGhlCiAgKiBpbnRlcmZhY2UKICAqLwpAQCAtMjQ4LDYgKzMzMyw5IEBACiAJLyogcmVzZXQgdGhlIGluZGljZXMgdG8gemVybyAqLwogCXJ4SWR4ID0gMDsKIAl0eElkeCA9IDA7CisjaWZkZWYgQ09ORklHX1NZU19GU0xfRVJSQVRVTV9OTUdfRVRTRUMxMjkKKwl1aW50IHN2cjsKKyNlbmRpZgogCiAJLyogUG9pbnQgdG8gdGhlIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwogCW91dF9iZTMyKCZyZWdzLT50YmFzZSwgKHVuc2lnbmVkIGludCkoJnJ0eC50eGJkW3R4SWR4XSkpOwpAQCAtMjY5LDYgKzM1NywxMSBAQAogCX0KIAlydHgudHhiZFtUWF9CVUZfQ05UIC0gMV0uc3RhdHVzIHw9IFRYQkRfV1JBUDsKIAorI2lmZGVmIENPTkZJR19TWVNfRlNMX0VSUkFUVU1fTk1HX0VUU0VDMTI5CisJc3ZyID0gZ2V0X3N2cigpOworCWlmICgoU1ZSX01BSihzdnIpID09IDEpIHx8IElTX1NWUl9SRVYoc3ZyLCAyLCAwKSkKKwkJcmVkdW5kYW50X2luaXQoZGV2KTsKKyNlbmRpZgogCS8qIEVuYWJsZSBUcmFuc21pdCBhbmQgUmVjZWl2ZSAqLwogCXNldGJpdHNfYmUzMigmcmVncy0+bWFjY2ZnMSwgTUFDQ0ZHMV9SWF9FTiB8IE1BQ0NGRzFfVFhfRU4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3FlL3VlYy5jIGIvZHJpdmVycy9xZS91ZWMuYwppbmRleCAxZWNiMTM3Li4zZTQ2ZTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3FlL3VlYy5jCisrKyBiL2RyaXZlcnMvcWUvdWVjLmMKQEAgLTI2NCwxMyArMjY0LDEwIEBACiAKIHN0YXRpYyBpbnQgdWVjX3N0b3AodWVjX3ByaXZhdGVfdCAqdWVjLCBjb21tX2Rpcl9lIG1vZGUpCiB7Ci0JdWNjX2Zhc3RfcHJpdmF0ZV90CSp1Y2NmOwotCiAJaWYgKCF1ZWMgfHwgIXVlYy0+dWNjZikgewogCQlwcmludGYoIiVzOiBObyBoYW5kbGUgcGFzc2VkLlxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXVjY2YgPSB1ZWMtPnVjY2Y7CiAKIAkvKiBjaGVjayBpZiB0aGUgVUNDIG51bWJlciBpcyBpbiByYW5nZS4gKi8KIAlpZiAodWVjLT51ZWNfaW5mby0+dWZfaW5mby51Y2NfbnVtID49IFVDQ19NQVhfTlVNKSB7CkBAIC0zMjUsNyArMzIyLDYgQEAKIAkJcGh5X2ludGVyZmFjZV90IGlmX21vZGUsIGludCBzcGVlZCkKIHsKIAlwaHlfaW50ZXJmYWNlX3QJCWVuZXRfaWZfbW9kZTsKLQl1ZWNfaW5mb190CQkqdWVjX2luZm87CiAJdWVjX3QJCQkqdWVjX3JlZ3M7CiAJdTMyCQkJdXBzbXI7CiAJdTMyCQkJbWFjY2ZnMjsKQEAgLTMzNSw3ICszMzEsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl1ZWNfaW5mbyA9IHVlYy0+dWVjX2luZm87CiAJdWVjX3JlZ3MgPSB1ZWMtPnVlY19yZWdzOwogCWVuZXRfaWZfbW9kZSA9IGlmX21vZGU7CiAKQEAgLTUxNiwxMiArNTExLDEwIEBACiBzdGF0aWMgdm9pZCBhZGp1c3RfbGluayhzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KQogewogCXVlY19wcml2YXRlX3QJCSp1ZWMgPSAodWVjX3ByaXZhdGVfdCAqKWRldi0+cHJpdjsKLQl1ZWNfdAkJCSp1ZWNfcmVnczsKIAlzdHJ1Y3QgdWVjX21paV9pbmZvCSptaWlfaW5mbyA9IHVlYy0+bWlpX2luZm87CiAKIAlleHRlcm4gdm9pZCBjaGFuZ2VfcGh5X2ludGVyZmFjZV9tb2RlKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsCiAJCQkJIHBoeV9pbnRlcmZhY2VfdCBtb2RlLCBpbnQgc3BlZWQpOwotCXVlY19yZWdzID0gdWVjLT51ZWNfcmVnczsKIAogCWlmIChtaWlfaW5mby0+bGluaykgewogCQkvKiBOb3cgd2UgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGJlIGluIGZ1bGwgZHVwbGV4IG1vZGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IGExNmY1OTAuLmZhZjRmY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC01Nyw2ICs1Nyw3IEBACiBDT0JKUy0kKENPTkZJR19SVENfTVBDNTIwMCkgKz0gbXBjNXh4eC5vCiBDT0JKUy0kKENPTkZJR19SVENfTVBDOHh4KSArPSBtcGM4eHgubwogQ09CSlMtJChDT05GSUdfUlRDX01WKSArPSBtdnJ0Yy5vCitDT0JKUy0kKENPTkZJR19SVENfTVhTKSArPSBteHNydGMubwogQ09CSlMtJChDT05GSUdfUlRDX1BDRjg1NjMpICs9IHBjZjg1NjMubwogQ09CSlMtJChDT05GSUdfUlRDX1BMMDMxKSArPSBwbDAzMS5vCiBDT0JKUy0kKENPTkZJR19SVENfUFQ3QzQzMzgpICs9IHB0N2M0MzM4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL214c3J0Yy5jIGIvZHJpdmVycy9ydGMvbXhzcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlYjFhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL214c3J0Yy5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFJUQyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHJ0Yy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisKKyNkZWZpbmUJTVhTX1JUQ19NQVhfVElNRU9VVAkxMDAwMDAwCisKKy8qIFNldCB0aW1lIGluIHNlY29uZHMgc2luY2UgMTk3MC0wMS0wMSAqLworaW50IG14c19ydGNfc2V0X3RpbWUodWludDMyX3Qgc2VjcykKK3sKKwlzdHJ1Y3QgbXgyOF9ydGNfcmVncyAqcnRjX3JlZ3MgPSAoc3RydWN0IG14MjhfcnRjX3JlZ3MgKilNWFNfUlRDX0JBU0U7CisJaW50IHJldDsKKworCXdyaXRlbChzZWNzLCAmcnRjX3JlZ3MtPmh3X3J0Y19zZWNvbmRzKTsKKworCS8qCisJICogVGhlIDB4ODAgaGVyZSBtZWFucyBzZWNvbmRzIHdlcmUgY29waWVkIHRvIGFuYWxvZy4gVGhpcyBpbmZvcm1hdGlvbgorCSAqIGlzIHRha2VuIGZyb20gdGhlIGxpbnV4IGtlcm5lbCBkcml2ZXIgZm9yIHRoZSBTVE1QMzd4eCBSVEMgc2luY2UKKwkgKiBkb2N1bWVudGF0aW9uIGRvZXNuJ3QgbWVudGlvbiBpdC4KKwkgKi8KKwlyZXQgPSBteDI4X3dhaXRfbWFza19jbHIoJnJ0Y19yZWdzLT5od19ydGNfc3RhdF9yZWcsCisJCTB4ODAgPDwgUlRDX1NUQVRfU1RBTEVfUkVHU19PRkZTRVQsIE1YU19SVENfTUFYX1RJTUVPVVQpOworCisJaWYgKHJldCkKKwkJcHJpbnRmKCJNWFMgUlRDOiBUaW1lb3V0IHdhaXRpbmcgZm9yIHVwZGF0ZVxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcnRjX2dldChzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJc3RydWN0IG14MjhfcnRjX3JlZ3MgKnJ0Y19yZWdzID0gKHN0cnVjdCBteDI4X3J0Y19yZWdzICopTVhTX1JUQ19CQVNFOworCXVpbnQzMl90IHNlY3M7CisKKwlzZWNzID0gcmVhZGwoJnJ0Y19yZWdzLT5od19ydGNfc2Vjb25kcyk7CisJdG9fdG0oc2VjcywgdGltZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0Y19zZXQoc3RydWN0IHJ0Y190aW1lICp0aW1lKQoreworCXVpbnQzMl90IHNlY3M7CisKKwlzZWNzID0gbWt0aW1lKHRpbWUtPnRtX3llYXIsIHRpbWUtPnRtX21vbiwgdGltZS0+dG1fbWRheSwKKwkJdGltZS0+dG1faG91ciwgdGltZS0+dG1fbWluLCB0aW1lLT50bV9zZWMpOworCisJcmV0dXJuIG14c19ydGNfc2V0X3RpbWUoc2Vjcyk7Cit9CisKK3ZvaWQgcnRjX3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IG14MjhfcnRjX3JlZ3MgKnJ0Y19yZWdzID0gKHN0cnVjdCBteDI4X3J0Y19yZWdzICopTVhTX1JUQ19CQVNFOworCWludCByZXQ7CisKKwkvKiBTZXQgdGltZSB0byAxOTcwLTAxLTAxICovCisJbXhzX3J0Y19zZXRfdGltZSgwKTsKKworCS8qIFJlc2V0IHRoZSBSVEMgYmxvY2sgKi8KKwlyZXQgPSBteDI4X3Jlc2V0X2Jsb2NrKCZydGNfcmVncy0+aHdfcnRjX2N0cmxfcmVnKTsKKwlpZiAocmV0KQorCQlwcmludGYoIk1YUyBSVEM6IEJsb2NrIHJlc2V0IHRpbWVvdXRcbiIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvczNjMjR4MF9ydGMuYyBiL2RyaXZlcnMvcnRjL3MzYzI0eDBfcnRjLmMKaW5kZXggOTY2NzkzOS4uYzE2ZmYyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvczNjMjR4MF9ydGMuYworKysgYi9kcml2ZXJzL3J0Yy9zM2MyNHgwX3J0Yy5jCkBAIC0zNCw4ICszNCw3IEBACiAKICNpbmNsdWRlIDxydGMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLQotLyojZGVmaW5lCURFQlVHKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiB0eXBlZGVmIGVudW0gewogCVJUQ19FTkFCTEUsCkBAIC02NCw3ICs2Myw4IEBACiB7CiAJc3RydWN0IHMzYzI0eDBfcnRjICpydGMgPSBzM2MyNHgwX2dldF9iYXNlX3J0YygpOwogCXVjaGFyIHNlYywgbWluLCBob3VyLCBtZGF5LCB3ZGF5LCBtb24sIHllYXI7Ci0JdWNoYXIgYV9zZWMsIGFfbWluLCBhX2hvdXIsIGFfZGF0ZSwgYV9tb24sIGFfeWVhciwgYV9hcm1lZDsKKwlfX21heWJlX3VudXNlZCB1Y2hhciBhX3NlYywgYV9taW4sIGFfaG91ciwgYV9kYXRlLAorCQkJICAgICBhX21vbiwgYV95ZWFyLCBhX2FybWVkOwogCiAJLyogZW5hYmxlIGFjY2VzcyB0byBSVEMgcmVnaXN0ZXJzICovCiAJU2V0UlRDX0FjY2VzcyhSVENfRU5BQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9weGEuYwppbmRleCA2ODQ2OWE0Li44NGJiMTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfcHhhLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3B4YS5jCkBAIC0xLDQgKzEsNiBAQAogLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPHdkQGRlbnguZGU+CiAgKgpAQCAtMzIsMTQ4ICszNCwxNjEgQEAKICNpbmNsdWRlIDx3YXRjaGRvZy5oPgogI2luY2x1ZGUgPHNlcmlhbC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy11YXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCi0jZGVmaW5lIEZGVUFSVF9JTkRFWAkwCi0jZGVmaW5lIEJUVUFSVF9JTkRFWAkxCi0jZGVmaW5lIFNUVUFSVF9JTkRFWAkyCisvKgorICogVGhlIG51bWJlcmluZyBzY2hlbWUgZGlmZmVycyBoZXJlIGZvciBQWEEyNXgsIFBYQTI3eCBhbmQgUFhBM3h4IHNvIHdlIGNhbgorICogZWFzaWx5IGhhbmRsZSBlbmFibGluZyBvZiBjbG9jay4KKyAqLworI2lmZGVmCUNPTkZJR19DUFVfTU9OQUhBTlMKKyNkZWZpbmUJVUFSVF9DTEtfQkFTRQlDS0VOQV8yMV9CVFVBUlQKKyNkZWZpbmUJVUFSVF9DTEtfUkVHCUNLRU5BCisjZGVmaW5lCUJUVUFSVF9JTkRFWAkwCisjZGVmaW5lCUZGVUFSVF9JTkRFWAkxCisjZGVmaW5lCVNUVUFSVF9JTkRFWAkyCisjZWxpZglDT05GSUdfUFhBMjUwCisjZGVmaW5lCVVBUlRfQ0xLX0JBU0UJKDEgPDwgNCkJLyogSFdVQVJUICovCisjZGVmaW5lCVVBUlRfQ0xLX1JFRwlDS0VOCisjZGVmaW5lCUhXVUFSVF9JTkRFWAkwCisjZGVmaW5lCVNUVUFSVF9JTkRFWAkxCisjZGVmaW5lCUZGVUFSVF9JTkRFWAkyCisjZGVmaW5lCUJUVUFSVF9JTkRFWAkzCisjZWxzZQkvKiBQWEEyN3ggKi8KKyNkZWZpbmUJVUFSVF9DTEtfQkFTRQlDS0VONV9TVFVBUlQKKyNkZWZpbmUJVUFSVF9DTEtfUkVHCUNLRU4KKyNkZWZpbmUJU1RVQVJUX0lOREVYCTAKKyNkZWZpbmUJRkZVQVJUX0lOREVYCTEKKyNkZWZpbmUJQlRVQVJUX0lOREVYCTIKKyNlbmRpZgorCisvKgorICogT25seSBQWEEyNTAgaGFzIEhXVUFSVCwgdG8gYXZvaWQgcG9sdXRpbmcgdGhlIGNvZGUgd2l0aCBtb3JlIG1hY3JvcywKKyAqIGFydGlmaWNpYWxseSBpbnRyb2R1Y2UgdGhpcy4KKyAqLworI2lmbmRlZglDT05GSUdfUFhBMjUwCisjZGVmaW5lCUhXVUFSVF9JTkRFWAkweGZmCisjZW5kaWYKIAogI2lmbmRlZiBDT05GSUdfU0VSSUFMX01VTFRJCi0jaWYgZGVmaW5lZCAoQ09ORklHX0ZGVUFSVCkKKyNpZiBkZWZpbmVkKENPTkZJR19GRlVBUlQpCiAjZGVmaW5lIFVBUlRfSU5ERVgJRkZVQVJUX0lOREVYCi0jZWxpZiBkZWZpbmVkIChDT05GSUdfQlRVQVJUKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQlRVQVJUKQogI2RlZmluZSBVQVJUX0lOREVYCUJUVUFSVF9JTkRFWAotI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NUVUFSVCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NUVUFSVCkKICNkZWZpbmUgVUFSVF9JTkRFWAlTVFVBUlRfSU5ERVgKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hXVUFSVCkKKyNkZWZpbmUgVUFSVF9JTkRFWAlIV1VBUlRfSU5ERVgKICNlbHNlCi0jZXJyb3IgIkJhZDogeW91IGRpZG4ndCBjb25maWd1cmUgc2VyaWFsIC4uLiIKKyNlcnJvciAiUGxlYXNlIHNlbGVjdCBDT05GSUdfKEZGfEJUfFNUfEhXKVVBUlQgaW4gYm9hcmQgY29uZmlnIGZpbGUuIgogI2VuZGlmCiAjZW5kaWYKIAotdm9pZCBweGFfc2V0YnJnX2RldiAodW5zaWduZWQgaW50IHVhcnRfaW5kZXgpCit1aW50MzJfdCBweGFfdWFydF9nZXRfYmF1ZF9kaXZpZGVyKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHF1b3QgPSAwOwotCiAJaWYgKGdkLT5iYXVkcmF0ZSA9PSAxMjAwKQotCQlxdW90ID0gNzY4OworCQlyZXR1cm4gNzY4OwogCWVsc2UgaWYgKGdkLT5iYXVkcmF0ZSA9PSA5NjAwKQotCQlxdW90ID0gOTY7CisJCXJldHVybiA5NjsKIAllbHNlIGlmIChnZC0+YmF1ZHJhdGUgPT0gMTkyMDApCi0JCXF1b3QgPSA0ODsKKwkJcmV0dXJuIDQ4OwogCWVsc2UgaWYgKGdkLT5iYXVkcmF0ZSA9PSAzODQwMCkKLQkJcXVvdCA9IDI0OworCQlyZXR1cm4gMjQ7CiAJZWxzZSBpZiAoZ2QtPmJhdWRyYXRlID09IDU3NjAwKQotCQlxdW90ID0gMTY7CisJCXJldHVybiAxNjsKIAllbHNlIGlmIChnZC0+YmF1ZHJhdGUgPT0gMTE1MjAwKQotCQlxdW90ID0gODsKLQllbHNlCi0JCWhhbmcgKCk7CisJCXJldHVybiA4OworCWVsc2UJLyogVW5zdXBwb3J0ZWQgYmF1ZHJhdGUgKi8KKwkJcmV0dXJuIDA7Cit9CiAKK3N0cnVjdCBweGFfdWFydF9yZWdzICpweGFfdWFydF9pbmRleF90b19yZWdzKHVpbnQzMl90IHVhcnRfaW5kZXgpCit7CiAJc3dpdGNoICh1YXJ0X2luZGV4KSB7Ci0JCWNhc2UgRkZVQVJUX0lOREVYOgotI2lmZGVmIENPTkZJR19DUFVfTU9OQUhBTlMKLQkJCXdyaXRlbChyZWFkbChDS0VOQSkgfCBDS0VOQV8yMl9GRlVBUlQsIENLRU5BKTsKLSNlbHNlCi0JCQl3cml0ZWwocmVhZGwoQ0tFTikgfCBDS0VONl9GRlVBUlQsIENLRU4pOwotI2VuZGlmIC8qIENPTkZJR19DUFVfTU9OQUhBTlMgKi8KLQotCQkJd3JpdGVsKDAsIEZGSUVSKTsJLyogRGlzYWJsZSBmb3Igbm93ICovCi0JCQl3cml0ZWwoMCwgRkZGQ1IpOwkvKiBObyBmaWZvcyBlbmFibGVkICovCi0KLQkJCS8qIHNldCBiYXVkIHJhdGUgKi8KLQkJCXdyaXRlbChMQ1JfV0xTMCB8IExDUl9XTFMxIHwgTENSX0RMQUIsIEZGTENSKTsKLQkJCXdyaXRlbChxdW90ICYgMHhmZiwgRkZETEwpOwotCQkJd3JpdGVsKHF1b3QgPj4gOCwgRkZETEgpOwotCQkJd3JpdGVsKExDUl9XTFMwIHwgTENSX1dMUzEsIEZGTENSKTsKLQotCQkJd3JpdGVsKElFUl9VVUUsIEZGSUVSKTsJLyogRW5hYmxlIEZGVUFSVCAqLwotCQlicmVhazsKLQotCQljYXNlIEJUVUFSVF9JTkRFWDoKLSNpZmRlZiBDT05GSUdfQ1BVX01PTkFIQU5TCi0JCQl3cml0ZWwocmVhZGwoQ0tFTkEpIHwgQ0tFTkFfMjFfQlRVQVJULCBDS0VOQSk7Ci0jZWxzZQotCQkJd3JpdGVsKHJlYWRsKENLRU4pIHwgQ0tFTjdfQlRVQVJULCBDS0VOKTsKLSNlbmRpZiAvKiAgQ09ORklHX0NQVV9NT05BSEFOUyAqLwotCi0JCQl3cml0ZWwoMCwgQlRJRVIpOwotCQkJd3JpdGVsKDAsIEJURkNSKTsKLQotCQkJLyogc2V0IGJhdWQgcmF0ZSAqLwotCQkJd3JpdGVsKExDUl9ETEFCLCBCVExDUik7Ci0JCQl3cml0ZWwocXVvdCAmIDB4ZmYsIEJURExMKTsKLQkJCXdyaXRlbChxdW90ID4+IDgsIEJURExIKTsKLQkJCXdyaXRlbChMQ1JfV0xTMCB8IExDUl9XTFMxLCBCVExDUik7Ci0KLQkJCXdyaXRlbChJRVJfVVVFLCBCVElFUik7CS8qIEVuYWJsZSBCRlVBUlQgKi8KLQotCQlicmVhazsKLQotCQljYXNlIFNUVUFSVF9JTkRFWDoKLSNpZmRlZiBDT05GSUdfQ1BVX01PTkFIQU5TCi0JCQl3cml0ZWwocmVhZGwoQ0tFTkEpIHwgQ0tFTkFfMjNfU1RVQVJULCBDS0VOQSk7Ci0jZWxzZQotCQkJd3JpdGVsKHJlYWRsKENLRU4pIHwgQ0tFTjVfU1RVQVJULCBDS0VOKTsKLSNlbmRpZiAvKiBDT05GSUdfQ1BVX01PTkFIQU5TICovCi0KLQkJCXdyaXRlbCgwLCBTVElFUik7Ci0JCQl3cml0ZWwoMCwgU1RGQ1IpOwotCi0JCQkvKiBzZXQgYmF1ZCByYXRlICovCi0JCQl3cml0ZWwoTENSX0RMQUIsIFNUTENSKTsKLQkJCXdyaXRlbChxdW90ICYgMHhmZiwgU1RETEwpOwotCQkJd3JpdGVsKHF1b3QgPj4gOCwgU1RETEgpOwotCQkJd3JpdGVsKExDUl9XTFMwIHwgTENSX1dMUzEsIFNUTENSKTsKLQotCQkJd3JpdGVsKElFUl9VVUUsIFNUSUVSKTsJLyogRW5hYmxlIFNUVUFSVCAqLwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWhhbmcoKTsKKwljYXNlIEZGVUFSVF9JTkRFWDogcmV0dXJuIChzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqKUZGVUFSVF9CQVNFOworCWNhc2UgQlRVQVJUX0lOREVYOiByZXR1cm4gKHN0cnVjdCBweGFfdWFydF9yZWdzICopQlRVQVJUX0JBU0U7CisJY2FzZSBTVFVBUlRfSU5ERVg6IHJldHVybiAoc3RydWN0IHB4YV91YXJ0X3JlZ3MgKilTVFVBUlRfQkFTRTsKKwljYXNlIEhXVUFSVF9JTkRFWDogcmV0dXJuIChzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqKUhXVUFSVF9CQVNFOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOwogCX0KIH0KIAordm9pZCBweGFfdWFydF90b2dnbGVfY2xvY2sodWludDMyX3QgdWFydF9pbmRleCwgaW50IGVuYWJsZSkKK3sKKwl1aW50MzJfdCBjbGtfcmVnLCBjbGtfb2Zmc2V0LCByZWc7CisKKwljbGtfcmVnID0gVUFSVF9DTEtfUkVHOworCWNsa19vZmZzZXQgPSBVQVJUX0NMS19CQVNFIDw8IHVhcnRfaW5kZXg7CisKKwlyZWcgPSByZWFkbChjbGtfcmVnKTsKKworCWlmIChlbmFibGUpCisJCXJlZyB8PSBjbGtfb2Zmc2V0OworCWVsc2UKKwkJcmVnICY9IH5jbGtfb2Zmc2V0OworCisJd3JpdGVsKHJlZywgY2xrX3JlZyk7Cit9CisKKy8qCisgKiBFbmFibGUgY2xvY2sgYW5kIHNldCBiYXVkIHJhdGUsIHBhcml0eSBldGMuCisgKi8KK3ZvaWQgcHhhX3NldGJyZ19kZXYodWludDMyX3QgdWFydF9pbmRleCkKK3sKKwl1aW50MzJfdCBkaXZpZGVyID0gMDsKKwlzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqdWFydF9yZWdzOworCisJZGl2aWRlciA9IHB4YV91YXJ0X2dldF9iYXVkX2RpdmlkZXIoKTsKKwlpZiAoIWRpdmlkZXIpCisJCWhhbmcoKTsKKworCXVhcnRfcmVncyA9IHB4YV91YXJ0X2luZGV4X3RvX3JlZ3ModWFydF9pbmRleCk7CisJaWYgKCF1YXJ0X3JlZ3MpCisJCWhhbmcoKTsKKworCXB4YV91YXJ0X3RvZ2dsZV9jbG9jayh1YXJ0X2luZGV4LCAxKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgRklGT3MgKi8KKwl3cml0ZWwoMCwgJnVhcnRfcmVncy0+aWVyKTsKKwl3cml0ZWwoMCwgJnVhcnRfcmVncy0+ZmNyKTsKKworCS8qIFNldCBiYXVkIHJhdGUgKi8KKwl3cml0ZWwoTENSX1dMUzAgfCBMQ1JfV0xTMSB8IExDUl9ETEFCLCAmdWFydF9yZWdzLT5sY3IpOworCXdyaXRlbChkaXZpZGVyICYgMHhmZiwgJnVhcnRfcmVncy0+ZGxsKTsKKwl3cml0ZWwoZGl2aWRlciA+PiA4LCAmdWFydF9yZWdzLT5kbGgpOworCXdyaXRlbChMQ1JfV0xTMCB8IExDUl9XTFMxLCAmdWFydF9yZWdzLT5sY3IpOworCisJLyogRW5hYmxlIFVBUlQgKi8KKwl3cml0ZWwoSUVSX1VVRSwgJnVhcnRfcmVncy0+aWVyKTsKK30KIAogLyoKICAqIEluaXRpYWxpc2UgdGhlIHNlcmlhbCBwb3J0IHdpdGggdGhlIGdpdmVuIGJhdWRyYXRlLiBUaGUgc2V0dGluZ3MKICAqIGFyZSBhbHdheXMgOCBkYXRhIGJpdHMsIG5vIHBhcml0eSwgMSBzdG9wIGJpdCwgbm8gc3RhcnQgYml0cy4KLSAqCiAgKi8KLWludCBweGFfaW5pdF9kZXYgKHVuc2lnbmVkIGludCB1YXJ0X2luZGV4KQoraW50IHB4YV9pbml0X2Rldih1bnNpZ25lZCBpbnQgdWFydF9pbmRleCkKIHsKIAlweGFfc2V0YnJnX2RldiAodWFydF9pbmRleCk7Ci0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCi0KIC8qCiAgKiBPdXRwdXQgYSBzaW5nbGUgYnl0ZSB0byB0aGUgc2VyaWFsIHBvcnQuCiAgKi8KLXZvaWQgcHhhX3B1dGNfZGV2ICh1bnNpZ25lZCBpbnQgdWFydF9pbmRleCxjb25zdCBjaGFyIGMpCit2b2lkIHB4YV9wdXRjX2Rldih1bnNpZ25lZCBpbnQgdWFydF9pbmRleCwgY29uc3QgY2hhciBjKQogewotCXN3aXRjaCAodWFydF9pbmRleCkgewotCQljYXNlIEZGVUFSVF9JTkRFWDoKLQkJLyogd2FpdCBmb3Igcm9vbSBpbiB0aGUgdHggRklGTyBvbiBGRlVBUlQgKi8KLQkJCXdoaWxlICgocmVhZGwoRkZMU1IpICYgTFNSX1RFTVQpID09IDApCi0JCQkJV0FUQ0hET0dfUkVTRVQgKCk7CS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KLQkJCXdyaXRlbChjLCBGRlRIUik7Ci0JCQlicmVhazsKKwlzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqdWFydF9yZWdzOwogCi0JCWNhc2UgQlRVQVJUX0lOREVYOgotCQkJd2hpbGUgKChyZWFkbChCVExTUikgJiBMU1JfVEVNVCkgPT0gMCkKLQkJCQlXQVRDSERPR19SRVNFVCAoKTsJLyogUmVzZXQgSFcgV2F0Y2hkb2csIGlmIG5lZWRlZCAqLwotCQkJd3JpdGVsKGMsIEJUVEhSKTsKLQkJCWJyZWFrOworCXVhcnRfcmVncyA9IHB4YV91YXJ0X2luZGV4X3RvX3JlZ3ModWFydF9pbmRleCk7CisJaWYgKCF1YXJ0X3JlZ3MpCisJCWhhbmcoKTsKIAotCQljYXNlIFNUVUFSVF9JTkRFWDoKLQkJCXdoaWxlICgocmVhZGwoU1RMU1IpICYgTFNSX1RFTVQpID09IDApCi0JCQkJV0FUQ0hET0dfUkVTRVQgKCk7CS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KLQkJCXdyaXRlbChjLCBTVFRIUik7Ci0JCQlicmVhazsKLQl9CisJd2hpbGUgKCEocmVhZGwoJnVhcnRfcmVncy0+bHNyKSAmIExTUl9URU1UKSkKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKwl3cml0ZWwoYywgJnVhcnRfcmVncy0+dGhyKTsKIAogCS8qIElmIFxuLCBhbHNvIGRvIFxyICovCiAJaWYgKGMgPT0gJ1xuJykKQEAgLTE4NSwxNyArMjAwLDE1IEBACiAgKiBvdGhlcndpc2UuIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIHN1Y2Nlc2Z1bGwsIHRoZSBjaGFyYWN0ZXIgcmVhZCBpcwogICogd3JpdHRlbiBpbnRvIGl0cyBhcmd1bWVudCBjLgogICovCi1pbnQgcHhhX3RzdGNfZGV2ICh1bnNpZ25lZCBpbnQgdWFydF9pbmRleCkKK2ludCBweGFfdHN0Y19kZXYodW5zaWduZWQgaW50IHVhcnRfaW5kZXgpCiB7Ci0Jc3dpdGNoICh1YXJ0X2luZGV4KSB7Ci0JCWNhc2UgRkZVQVJUX0lOREVYOgotCQkJcmV0dXJuIHJlYWRsKEZGTFNSKSAmIExTUl9EUjsKLQkJY2FzZSBCVFVBUlRfSU5ERVg6Ci0JCQlyZXR1cm4gcmVhZGwoQlRMU1IpICYgTFNSX0RSOwotCQljYXNlIFNUVUFSVF9JTkRFWDoKLQkJCXJldHVybiByZWFkbChTVExTUikgJiBMU1JfRFI7Ci0JfQotCXJldHVybiAtMTsKKwlzdHJ1Y3QgcHhhX3VhcnRfcmVncyAqdWFydF9yZWdzOworCisJdWFydF9yZWdzID0gcHhhX3VhcnRfaW5kZXhfdG9fcmVncyh1YXJ0X2luZGV4KTsKKwlpZiAoIXVhcnRfcmVncykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHJlYWRsKCZ1YXJ0X3JlZ3MtPmxzcikgJiBMU1JfRFI7CiB9CiAKIC8qCkBAIC0yMDMsMTg3ICsyMTYsODYgQEAKICAqIG90aGVyd2lzZS4gV2hlbiB0aGUgZnVuY3Rpb24gaXMgc3VjY2VzZnVsbCwgdGhlIGNoYXJhY3RlciByZWFkIGlzCiAgKiB3cml0dGVuIGludG8gaXRzIGFyZ3VtZW50IGMuCiAgKi8KLWludCBweGFfZ2V0Y19kZXYgKHVuc2lnbmVkIGludCB1YXJ0X2luZGV4KQoraW50IHB4YV9nZXRjX2Rldih1bnNpZ25lZCBpbnQgdWFydF9pbmRleCkKIHsKLQlzd2l0Y2ggKHVhcnRfaW5kZXgpIHsKLQkJY2FzZSBGRlVBUlRfSU5ERVg6Ci0JCQl3aGlsZSAoIShyZWFkbChGRkxTUikgJiBMU1JfRFIpKQotCQkJCS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KLQkJCQlXQVRDSERPR19SRVNFVCgpOwotCQkJcmV0dXJuIChjaGFyKSByZWFkbChGRlJCUikgJiAweGZmOworCXN0cnVjdCBweGFfdWFydF9yZWdzICp1YXJ0X3JlZ3M7CiAKLQkJY2FzZSBCVFVBUlRfSU5ERVg6Ci0JCQl3aGlsZSAoIShyZWFkbChCVExTUikgJiBMU1JfRFIpKQotCQkJCS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KLQkJCQlXQVRDSERPR19SRVNFVCgpOwotCQkJcmV0dXJuIChjaGFyKSByZWFkbChCVFJCUikgJiAweGZmOwotCQljYXNlIFNUVUFSVF9JTkRFWDoKLQkJCXdoaWxlICghKHJlYWRsKFNUTFNSKSAmIExTUl9EUikpCi0JCQkJLyogUmVzZXQgSFcgV2F0Y2hkb2csIGlmIG5lZWRlZCAqLwotCQkJCVdBVENIRE9HX1JFU0VUKCk7Ci0JCQlyZXR1cm4gKGNoYXIpIHJlYWRsKFNUUkJSKSAmIDB4ZmY7Ci0JfQotCXJldHVybiAtMTsKKwl1YXJ0X3JlZ3MgPSBweGFfdWFydF9pbmRleF90b19yZWdzKHVhcnRfaW5kZXgpOworCWlmICghdWFydF9yZWdzKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoIShyZWFkbCgmdWFydF9yZWdzLT5sc3IpICYgTFNSX0RSKSkKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKwlyZXR1cm4gcmVhZGwoJnVhcnRfcmVncy0+cmJyKSAmIDB4ZmY7CiB9CiAKLXZvaWQKLXB4YV9wdXRzX2RldiAodW5zaWduZWQgaW50IHVhcnRfaW5kZXgsY29uc3QgY2hhciAqcykKK3ZvaWQgcHhhX3B1dHNfZGV2KHVuc2lnbmVkIGludCB1YXJ0X2luZGV4LCBjb25zdCBjaGFyICpzKQogewotCXdoaWxlICgqcykgewotCQlweGFfcHV0Y19kZXYgKHVhcnRfaW5kZXgsKnMrKyk7Ci0JfQorCXdoaWxlICgqcykKKwkJcHhhX3B1dGNfZGV2KHVhcnRfaW5kZXgsICpzKyspOwogfQogCi0jaWYgZGVmaW5lZCAoQ09ORklHX0ZGVUFSVCkKLXN0YXRpYyBpbnQgZmZ1YXJ0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcHhhX2luaXRfZGV2KEZGVUFSVF9JTkRFWCk7Ci19CisjZGVmaW5lCXB4YV91YXJ0KHVhcnQsIFVBUlQpCQkJCQkJXAorCWludCB1YXJ0IyNfaW5pdCh2b2lkKQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfaW5pdF9kZXYoVUFSVCMjX0lOREVYKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXZvaWQgdWFydCMjX3NldGJyZyh2b2lkKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJcmV0dXJuIHB4YV9zZXRicmdfZGV2KFVBUlQjI19JTkRFWCk7CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwl2b2lkIHVhcnQjI19wdXRjKGNvbnN0IGNoYXIgYykJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfcHV0Y19kZXYoVUFSVCMjX0lOREVYLCBjKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXZvaWQgdWFydCMjX3B1dHMoY29uc3QgY2hhciAqcykJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfcHV0c19kZXYoVUFSVCMjX0lOREVYLCBzKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWludCB1YXJ0IyNfZ2V0Yyh2b2lkKQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfZ2V0Y19kZXYoVUFSVCMjX0lOREVYKTsJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWludCB1YXJ0IyNfdHN0Yyh2b2lkKQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXJldHVybiBweGFfdHN0Y19kZXYoVUFSVCMjX0lOREVYKTsJCQlcCisJfQkJCQkJCQkJXAogCi1zdGF0aWMgdm9pZCBmZnVhcnRfc2V0YnJnKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV9zZXRicmdfZGV2KEZGVUFSVF9JTkRFWCk7Ci19CisjZGVmaW5lCXB4YV91YXJ0X2Rlc2ModWFydCkJCQkJCQlcCisJc3RydWN0IHNlcmlhbF9kZXZpY2Ugc2VyaWFsXyMjdWFydCMjX2RldmljZSA9CQkJXAorCXsJCQkJCQkJCVwKKwkJInNlcmlhbF8iI3VhcnQsCQkJCQkJXAorCQl1YXJ0IyNfaW5pdCwJCQkJCQlcCisJCU5VTEwsCQkJCQkJCVwKKwkJdWFydCMjX3NldGJyZywJCQkJCQlcCisJCXVhcnQjI19nZXRjLAkJCQkJCVwKKwkJdWFydCMjX3RzdGMsCQkJCQkJXAorCQl1YXJ0IyNfcHV0YywJCQkJCQlcCisJCXVhcnQjI19wdXRzLAkJCQkJCVwKKwl9OwogCi1zdGF0aWMgdm9pZCBmZnVhcnRfcHV0Yyhjb25zdCBjaGFyIGMpCi17Ci0JcmV0dXJuIHB4YV9wdXRjX2RldihGRlVBUlRfSU5ERVgsYyk7Ci19CisjZGVmaW5lCXB4YV91YXJ0X211bHRpKHVhcnQsIFVBUlQpCQkJCQlcCisJcHhhX3VhcnQodWFydCwgVUFSVCkJCQkJCQlcCisJcHhhX3VhcnRfZGVzYyh1YXJ0KQogCi1zdGF0aWMgdm9pZCBmZnVhcnRfcHV0cyhjb25zdCBjaGFyICpzKQotewotCXJldHVybiBweGFfcHV0c19kZXYoRkZVQVJUX0lOREVYLHMpOwotfQotCi1zdGF0aWMgaW50IGZmdWFydF9nZXRjKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV9nZXRjX2RldihGRlVBUlRfSU5ERVgpOwotfQotCi1zdGF0aWMgaW50IGZmdWFydF90c3RjKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV90c3RjX2RldihGRlVBUlRfSU5ERVgpOwotfQotCi1zdHJ1Y3Qgc2VyaWFsX2RldmljZSBzZXJpYWxfZmZ1YXJ0X2RldmljZSA9Ci17Ci0JInNlcmlhbF9mZnVhcnQiLAotCWZmdWFydF9pbml0LAotCU5VTEwsCi0JZmZ1YXJ0X3NldGJyZywKLQlmZnVhcnRfZ2V0YywKLQlmZnVhcnRfdHN0YywKLQlmZnVhcnRfcHV0YywKLQlmZnVhcnRfcHV0cywKLX07CisjaWYgZGVmaW5lZChDT05GSUdfSFdVQVJUKQorCXB4YV91YXJ0X211bHRpKGh3dWFydCwgSFdVQVJUKQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1RVQVJUKQorCXB4YV91YXJ0X211bHRpKHN0dWFydCwgU1RVQVJUKQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkZVQVJUKQorCXB4YV91YXJ0X211bHRpKGZmdWFydCwgRkZVQVJUKQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQlRVQVJUKQorCXB4YV91YXJ0X211bHRpKGJ0dWFydCwgQlRVQVJUKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChDT05GSUdfQlRVQVJUKQotc3RhdGljIGludCBidHVhcnRfaW5pdCh2b2lkKQotewotCXJldHVybiBweGFfaW5pdF9kZXYoQlRVQVJUX0lOREVYKTsKLX0KLQotc3RhdGljIHZvaWQgYnR1YXJ0X3NldGJyZyh2b2lkKQotewotCXJldHVybiBweGFfc2V0YnJnX2RldihCVFVBUlRfSU5ERVgpOwotfQotCi1zdGF0aWMgdm9pZCBidHVhcnRfcHV0Yyhjb25zdCBjaGFyIGMpCi17Ci0JcmV0dXJuIHB4YV9wdXRjX2RldihCVFVBUlRfSU5ERVgsYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ0dWFydF9wdXRzKGNvbnN0IGNoYXIgKnMpCi17Ci0JcmV0dXJuIHB4YV9wdXRzX2RldihCVFVBUlRfSU5ERVgscyk7Ci19Ci0KLXN0YXRpYyBpbnQgYnR1YXJ0X2dldGModm9pZCkKLXsKLQlyZXR1cm4gcHhhX2dldGNfZGV2KEJUVUFSVF9JTkRFWCk7Ci19Ci0KLXN0YXRpYyBpbnQgYnR1YXJ0X3RzdGModm9pZCkKLXsKLQlyZXR1cm4gcHhhX3RzdGNfZGV2KEJUVUFSVF9JTkRFWCk7Ci19Ci0KLXN0cnVjdCBzZXJpYWxfZGV2aWNlIHNlcmlhbF9idHVhcnRfZGV2aWNlID0KLXsKLQkic2VyaWFsX2J0dWFydCIsCi0JYnR1YXJ0X2luaXQsCi0JTlVMTCwKLQlidHVhcnRfc2V0YnJnLAotCWJ0dWFydF9nZXRjLAotCWJ0dWFydF90c3RjLAotCWJ0dWFydF9wdXRjLAotCWJ0dWFydF9wdXRzLAotfTsKKyNpZm5kZWYJQ09ORklHX1NFUklBTF9NVUxUSQorCXB4YV91YXJ0KHNlcmlhbCwgVUFSVCkKICNlbmRpZgotCi0jaWYgZGVmaW5lZCAoQ09ORklHX1NUVUFSVCkKLXN0YXRpYyBpbnQgc3R1YXJ0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcHhhX2luaXRfZGV2KFNUVUFSVF9JTkRFWCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0dWFydF9zZXRicmcodm9pZCkKLXsKLQlyZXR1cm4gcHhhX3NldGJyZ19kZXYoU1RVQVJUX0lOREVYKTsKLX0KLQotc3RhdGljIHZvaWQgc3R1YXJ0X3B1dGMoY29uc3QgY2hhciBjKQotewotCXJldHVybiBweGFfcHV0Y19kZXYoU1RVQVJUX0lOREVYLGMpOwotfQotCi1zdGF0aWMgdm9pZCBzdHVhcnRfcHV0cyhjb25zdCBjaGFyICpzKQotewotCXJldHVybiBweGFfcHV0c19kZXYoU1RVQVJUX0lOREVYLHMpOwotfQotCi1zdGF0aWMgaW50IHN0dWFydF9nZXRjKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV9nZXRjX2RldihTVFVBUlRfSU5ERVgpOwotfQotCi1zdGF0aWMgaW50IHN0dWFydF90c3RjKHZvaWQpCi17Ci0JcmV0dXJuIHB4YV90c3RjX2RldihTVFVBUlRfSU5ERVgpOwotfQotCi1zdHJ1Y3Qgc2VyaWFsX2RldmljZSBzZXJpYWxfc3R1YXJ0X2RldmljZSA9Ci17Ci0JInNlcmlhbF9zdHVhcnQiLAotCXN0dWFydF9pbml0LAotCU5VTEwsCi0Jc3R1YXJ0X3NldGJyZywKLQlzdHVhcnRfZ2V0YywKLQlzdHVhcnRfdHN0YywKLQlzdHVhcnRfcHV0YywKLQlzdHVhcnRfcHV0cywKLX07Ci0jZW5kaWYKLQotCi0jaWZuZGVmIENPTkZJR19TRVJJQUxfTVVMVEkKLWlubGluZSBpbnQgc2VyaWFsX2luaXQodm9pZCkgewotCXJldHVybiAocHhhX2luaXRfZGV2KFVBUlRfSU5ERVgpKTsKLX0KLXZvaWQgc2VyaWFsX3NldGJyZyh2b2lkKSB7Ci0JcHhhX3NldGJyZ19kZXYoVUFSVF9JTkRFWCk7Ci19Ci1pbnQgc2VyaWFsX2dldGModm9pZCkgewotCXJldHVybihweGFfZ2V0Y19kZXYoVUFSVF9JTkRFWCkpOwotfQotaW50IHNlcmlhbF90c3RjKHZvaWQpIHsKLQlyZXR1cm4ocHhhX3RzdGNfZGV2KFVBUlRfSU5ERVgpKTsKLX0KLXZvaWQgc2VyaWFsX3B1dGMoY29uc3QgY2hhciBjKSB7Ci0JcHhhX3B1dGNfZGV2KFVBUlRfSU5ERVgsYyk7Ci19Ci12b2lkIHNlcmlhbF9wdXRzKGNvbnN0IGNoYXIgKnMpIHsKLQlweGFfcHV0c19kZXYoVUFSVF9JTkRFWCxzKTsKLX0KLSNlbmRpZgkvKiBDT05GSUdfU0VSSUFMX01VTFRJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IDg0YWQ2ZmEuLjZmMzg5ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0zNyw2ICszNyw3IEBACiBDT0JKUy0kKENPTkZJR19NUEM1MlhYX1NQSSkgKz0gbXBjNTJ4eF9zcGkubwogQ09CSlMtJChDT05GSUdfTVBDOFhYWF9TUEkpICs9IG1wYzh4eHhfc3BpLm8KIENPQkpTLSQoQ09ORklHX01YQ19TUEkpICs9IG14Y19zcGkubworQ09CSlMtJChDT05GSUdfTVhTX1NQSSkgKz0gbXhzX3NwaS5vCiBDT0JKUy0kKENPTkZJR19PQ19USU5ZX1NQSSkgKz0gb2NfdGlueV9zcGkubwogQ09CSlMtJChDT05GSUdfT01BUDNfU1BJKSArPSBvbWFwM19zcGkubwogQ09CSlMtJChDT05GSUdfU09GVF9TUEkpICs9IHNvZnRfc3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKaW5kZXggMzNlMzhiNi4uODNlZjhlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKQEAgLTEzNiwxMyArMTM2LDExIEBACiAJdW5zaWduZWQgaW50CWxlbl90eDsKIAl1bnNpZ25lZCBpbnQJbGVuX3J4OwogCXVuc2lnbmVkIGludAlsZW47Ci0JaW50CQlyZXQ7CiAJdTMyCQlzdGF0dXM7CiAJY29uc3QgdTgJKnR4cCA9IGRvdXQ7CiAJdTgJCSpyeHAgPSBkaW47CiAJdTgJCXZhbHVlOwogCi0JcmV0ID0gMDsKIAlpZiAoYml0bGVuID09IDApCiAJCS8qIEZpbmlzaCBhbnkgcHJldmlvdXNseSBzdWJtaXR0ZWQgdHJhbnNmZXJzICovCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXhzX3NwaS5jIGIvZHJpdmVycy9zcGkvbXhzX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMjdmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9teHNfc3BpLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFNQSSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIG9uIGJlaGFsZiBvZiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBOT1RFOiBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIHRoZSBTUEktY29udHJvbGxlciBjaGlwc2VsZWN0cywKKyAqICAgICAgIEdQSU8gZHJpdmVuIGNoaXBzZWxlY3RzIGFyZSBub3Qgc3VwcG9ydGVkLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzcGkuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lteC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3lzX3Byb3RvLmg+CisKKyNkZWZpbmUJTVhTX1NQSV9NQVhfVElNRU9VVAkxMDAwMDAwCisjZGVmaW5lCU1YU19TUElfUE9SVF9PRkZTRVQJMHgyMDAwCisKK3N0cnVjdCBteHNfc3BpX3NsYXZlIHsKKwlzdHJ1Y3Qgc3BpX3NsYXZlCXNsYXZlOworCXVpbnQzMl90CQltYXhfa2h6OworCXVpbnQzMl90CQltb2RlOworCXN0cnVjdCBteDI4X3NzcF9yZWdzCSpyZWdzOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXhzX3NwaV9zbGF2ZSAqdG9fbXhzX3NsYXZlKHN0cnVjdCBzcGlfc2xhdmUgKnNsYXZlKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2xhdmUsIHN0cnVjdCBteHNfc3BpX3NsYXZlLCBzbGF2ZSk7Cit9CisKK3ZvaWQgc3BpX2luaXQodm9pZCkKK3sKK30KKworc3RydWN0IHNwaV9zbGF2ZSAqc3BpX3NldHVwX3NsYXZlKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBjcywKKwkJCQkgIHVuc2lnbmVkIGludCBtYXhfaHosIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCBteHNfc3BpX3NsYXZlICpteHNfc2xhdmU7CisJdWludDMyX3QgYWRkcjsKKworCWlmIChidXMgPiAzKSB7CisJCXByaW50ZigiTVhTIFNQSTogTWF4IGJ1cyBudW1iZXIgaXMgM1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCW14c19zbGF2ZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG14c19zcGlfc2xhdmUpKTsKKwlpZiAoIW14c19zbGF2ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhZGRyID0gTVhTX1NTUDBfQkFTRSArIChidXMgKiBNWFNfU1BJX1BPUlRfT0ZGU0VUKTsKKworCW14c19zbGF2ZS0+c2xhdmUuYnVzID0gYnVzOworCW14c19zbGF2ZS0+c2xhdmUuY3MgPSBjczsKKwlteHNfc2xhdmUtPm1heF9raHogPSBtYXhfaHogLyAxMDAwOworCW14c19zbGF2ZS0+bW9kZSA9IG1vZGU7CisJbXhzX3NsYXZlLT5yZWdzID0gKHN0cnVjdCBteDI4X3NzcF9yZWdzICopYWRkcjsKKworCXJldHVybiAmbXhzX3NsYXZlLT5zbGF2ZTsKK30KKwordm9pZCBzcGlfZnJlZV9zbGF2ZShzdHJ1Y3Qgc3BpX3NsYXZlICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgbXhzX3NwaV9zbGF2ZSAqbXhzX3NsYXZlID0gdG9fbXhzX3NsYXZlKHNsYXZlKTsKKwlmcmVlKG14c19zbGF2ZSk7Cit9CisKK2ludCBzcGlfY2xhaW1fYnVzKHN0cnVjdCBzcGlfc2xhdmUgKnNsYXZlKQoreworCXN0cnVjdCBteHNfc3BpX3NsYXZlICpteHNfc2xhdmUgPSB0b19teHNfc2xhdmUoc2xhdmUpOworCXN0cnVjdCBteDI4X3NzcF9yZWdzICpzc3BfcmVncyA9IG14c19zbGF2ZS0+cmVnczsKKwl1aW50MzJfdCByZWcgPSAwOworCisJbXgyOF9yZXNldF9ibG9jaygmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9yZWcpOworCisJd3JpdGVsKFNTUF9DVFJMMF9CVVNfV0lEVEhfT05FX0JJVCwgJnNzcF9yZWdzLT5od19zc3BfY3RybDApOworCisJcmVnID0gU1NQX0NUUkwxX1NTUF9NT0RFX1NQSSB8IFNTUF9DVFJMMV9XT1JEX0xFTkdUSF9FSUdIVF9CSVRTOworCXJlZyB8PSAobXhzX3NsYXZlLT5tb2RlICYgU1BJX0NQT0wpID8gU1NQX0NUUkwxX1BPTEFSSVRZIDogMDsKKwlyZWcgfD0gKG14c19zbGF2ZS0+bW9kZSAmIFNQSV9DUEhBKSA/IFNTUF9DVFJMMV9QSEFTRSA6IDA7CisJd3JpdGVsKHJlZywgJnNzcF9yZWdzLT5od19zc3BfY3RybDEpOworCisJd3JpdGVsKDAsICZzc3BfcmVncy0+aHdfc3NwX2NtZDApOworCisJbXgyOF9zZXRfc3NwX2J1c2Nsb2NrKHNsYXZlLT5idXMsIG14c19zbGF2ZS0+bWF4X2toeik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzcGlfcmVsZWFzZV9idXMoc3RydWN0IHNwaV9zbGF2ZSAqc2xhdmUpCit7Cit9CisKK3N0YXRpYyB2b2lkIG14c19zcGlfc3RhcnRfeGZlcihzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqc3NwX3JlZ3MpCit7CisJd3JpdGVsKFNTUF9DVFJMMF9MT0NLX0NTLCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9zZXQpOworCXdyaXRlbChTU1BfQ1RSTDBfSUdOT1JFX0NSQywgJnNzcF9yZWdzLT5od19zc3BfY3RybDBfY2xyKTsKK30KKworc3RhdGljIHZvaWQgbXhzX3NwaV9lbmRfeGZlcihzdHJ1Y3QgbXgyOF9zc3BfcmVncyAqc3NwX3JlZ3MpCit7CisJd3JpdGVsKFNTUF9DVFJMMF9MT0NLX0NTLCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9jbHIpOworCXdyaXRlbChTU1BfQ1RSTDBfSUdOT1JFX0NSQywgJnNzcF9yZWdzLT5od19zc3BfY3RybDBfc2V0KTsKK30KKworaW50IHNwaV94ZmVyKHN0cnVjdCBzcGlfc2xhdmUgKnNsYXZlLCB1bnNpZ25lZCBpbnQgYml0bGVuLAorCQljb25zdCB2b2lkICpkb3V0LCB2b2lkICpkaW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IG14c19zcGlfc2xhdmUgKm14c19zbGF2ZSA9IHRvX214c19zbGF2ZShzbGF2ZSk7CisJc3RydWN0IG14Mjhfc3NwX3JlZ3MgKnNzcF9yZWdzID0gbXhzX3NsYXZlLT5yZWdzOworCWludCBsZW4gPSBiaXRsZW4gLyA4OworCWNvbnN0IGNoYXIgKnR4ID0gZG91dDsKKwljaGFyICpyeCA9IGRpbjsKKworCWlmIChiaXRsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXJ4ICYmICF0eCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmxhZ3MgJiBTUElfWEZFUl9CRUdJTikKKwkJbXhzX3NwaV9zdGFydF94ZmVyKHNzcF9yZWdzKTsKKworCXdoaWxlIChsZW4tLSkgeworCQkvKiBXZSB0cmFuc2ZlciAxIGJ5dGUgKi8KKwkJd3JpdGVsKDEsICZzc3BfcmVncy0+aHdfc3NwX3hmZXJfc2l6ZSk7CisKKwkJaWYgKChmbGFncyAmIFNQSV9YRkVSX0VORCkgJiYgIWxlbikKKwkJCW14c19zcGlfZW5kX3hmZXIoc3NwX3JlZ3MpOworCisJCWlmICh0eCkKKwkJCXdyaXRlbChTU1BfQ1RSTDBfUkVBRCwgJnNzcF9yZWdzLT5od19zc3BfY3RybDBfY2xyKTsKKwkJZWxzZQorCQkJd3JpdGVsKFNTUF9DVFJMMF9SRUFELCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9zZXQpOworCisJCXdyaXRlbChTU1BfQ1RSTDBfUlVOLCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9zZXQpOworCisJCWlmIChteDI4X3dhaXRfbWFza19zZXQoJnNzcF9yZWdzLT5od19zc3BfY3RybDBfcmVnLAorCQkJU1NQX0NUUkwwX1JVTiwgTVhTX1NQSV9NQVhfVElNRU9VVCkpIHsKKwkJCXByaW50ZigiTVhTIFNQSTogVGltZW91dCB3YWl0aW5nIGZvciBzdGFydFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAodHgpCisJCQl3cml0ZWwoKnR4KyssICZzc3BfcmVncy0+aHdfc3NwX2RhdGEpOworCisJCXdyaXRlbChTU1BfQ1RSTDBfREFUQV9YRkVSLCAmc3NwX3JlZ3MtPmh3X3NzcF9jdHJsMF9zZXQpOworCisJCWlmIChyeCkgeworCQkJaWYgKG14Mjhfd2FpdF9tYXNrX2Nscigmc3NwX3JlZ3MtPmh3X3NzcF9zdGF0dXNfcmVnLAorCQkJCVNTUF9TVEFUVVNfRklGT19FTVBUWSwgTVhTX1NQSV9NQVhfVElNRU9VVCkpIHsKKwkJCQlwcmludGYoIk1YUyBTUEk6IFRpbWVvdXQgd2FpdGluZyBmb3IgZGF0YVxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQkqcnggPSByZWFkbCgmc3NwX3JlZ3MtPmh3X3NzcF9kYXRhKTsKKwkJCXJ4Kys7CisJCX0KKworCQlpZiAobXgyOF93YWl0X21hc2tfY2xyKCZzc3BfcmVncy0+aHdfc3NwX2N0cmwwX3JlZywKKwkJCVNTUF9DVFJMMF9SVU4sIE1YU19TUElfTUFYX1RJTUVPVVQpKSB7CisJCQlwcmludGYoIk1YUyBTUEk6IFRpbWVvdXQgd2FpdGluZyBmb3IgZmluaXNoXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKaW5kZXggNTFiMjQ5NC4uMDlhYmI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC00MSw2ICs0MSw3IEBACiBDT0JKUy0kKENPTkZJR19VU0JfRUhDSV9GU0wpICs9IGVoY2ktZnNsLm8KIGVuZGlmCiBDT0JKUy0kKENPTkZJR19VU0JfRUhDSV9NWEMpICs9IGVoY2ktbXhjLm8KK0NPQkpTLSQoQ09ORklHX1VTQl9FSENJX01YUykgKz0gZWhjaS1teHMubwogQ09CSlMtJChDT05GSUdfVVNCX0VIQ0lfUFBDNFhYKSArPSBlaGNpLXBwYzR4eC5vCiBDT0JKUy0kKENPTkZJR19VU0JfRUhDSV9JWFA0WFgpICs9IGVoY2ktaXhwLm8KIENPQkpTLSQoQ09ORklHX1VTQl9FSENJX0tJUktXT09EKSArPSBlaGNpLWtpcmt3b29kLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCA1YTY1ZDkyLi5iMmQyOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC00MCwxMSArNDAsMTMgQEAKIGludCBlaGNpX2hjZF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHVzYl9laGNpICplaGNpOwotCWNoYXIgdXNiX3BoeVs1XTsKIAljb25zdCBjaGFyICpwaHlfdHlwZSA9IE5VTEw7CiAJc2l6ZV90IGxlbjsKKyNpZmRlZiBDT05GSUdfU1lTX0ZTTF9VU0JfSU5URVJOQUxfVVRNSV9QSFkKKwljaGFyIHVzYl9waHlbNV07CiAKIAl1c2JfcGh5WzBdID0gJ1wwJzsKKyNlbmRpZgogCiAJZWhjaSA9IChzdHJ1Y3QgdXNiX2VoY2kgKilDT05GSUdfU1lTX0ZTTF9VU0JfQUREUjsKIAloY2NyID0gKHN0cnVjdCBlaGNpX2hjY3IgKikoKHVpbnQzMl90KSZlaGNpLT5jYXBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14cy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW14cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTVmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhzLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBGcmVlc2NhbGUgaS5NWDI4IFVTQiBIb3N0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWJhc2UuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsa2N0cmwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXVzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtdXNicGh5Lmg+CisKKyNpbmNsdWRlICJlaGNpLWNvcmUuaCIKKyNpbmNsdWRlICJlaGNpLmgiCisKKyNpZgkoQ09ORklHX0VIQ0lfTVhTX1BPUlQgIT0gMCkgJiYgKENPTkZJR19FSENJX01YU19QT1JUICE9IDEpCisjZXJyb3IJIk1YUyBFSENJOiBJbnZhbGlkIHBvcnQgc2VsZWN0ZWQhIgorI2VuZGlmCisKKyNpZm5kZWYJQ09ORklHX0VIQ0lfTVhTX1BPUlQKKyNlcnJvcgkiTVhTIEVIQ0k6IFBsZWFzZSBkZWZpbmUgY29ycmVjdCBwb3J0IHVzaW5nIENPTkZJR19FSENJX01YU19QT1JUISIKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGVoY2lfbXhzIHsKKwlzdHJ1Y3QgbXgyOF91c2JfcmVncwkqdXNiX3JlZ3M7CisJc3RydWN0IG14MjhfdXNicGh5X3JlZ3MJKnBoeV9yZWdzOworfSBlaGNpX214czsKKworaW50IG14c19laGNpX2dldF9wb3J0KHN0cnVjdCBlaGNpX214cyAqbXhzX3VzYiwgaW50IHBvcnQpCit7CisJdWludDMyX3QgdXNiX2Jhc2UsIHBoeV9iYXNlOworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJdXNiX2Jhc2UgPSBNWFNfVVNCQ1RSTDBfQkFTRTsKKwkJcGh5X2Jhc2UgPSBNWFNfVVNCUEhZMF9CQVNFOworCQlicmVhazsKKwljYXNlIDE6CisJCXVzYl9iYXNlID0gTVhTX1VTQkNUUkwxX0JBU0U7CisJCXBoeV9iYXNlID0gTVhTX1VTQlBIWTFfQkFTRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJDT05GSUdfRUhDSV9NWFNfUE9SVCAocG9ydCA9ICVkKVxuIiwgcG9ydCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlteHNfdXNiLT51c2JfcmVncyA9IChzdHJ1Y3QgbXgyOF91c2JfcmVncyAqKXVzYl9iYXNlOworCW14c191c2ItPnBoeV9yZWdzID0gKHN0cnVjdCBteDI4X3VzYnBoeV9yZWdzICopcGh5X2Jhc2U7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgRElHQ1RMIHJlZ2lzdGVyIHVuZ2F0ZXMgY2xvY2sgdG8gVVNCICovCisjZGVmaW5lCUhXX0RJR0NUTF9DVFJMCQkJMHg4MDAxYzAwMAorI2RlZmluZQlIV19ESUdDVExfQ1RSTF9VU0IwX0NMS0dBVEUJKDEgPDwgMikKKyNkZWZpbmUJSFdfRElHQ1RMX0NUUkxfVVNCMV9DTEtHQVRFCSgxIDw8IDE2KQorCitpbnQgZWhjaV9oY2RfaW5pdCh2b2lkKQoreworCisJaW50IHJldDsKKwl1aW50MzJfdCB1c2JfYmFzZSwgY2FwX2Jhc2U7CisJc3RydWN0IG14MjhfcmVnaXN0ZXIgKmRpZ2N0bF9jdHJsID0KKwkJKHN0cnVjdCBteDI4X3JlZ2lzdGVyICopSFdfRElHQ1RMX0NUUkw7CisJc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICpjbGtjdHJsX3JlZ3MgPQorCQkoc3RydWN0IG14MjhfY2xrY3RybF9yZWdzICopTVhTX0NMS0NUUkxfQkFTRTsKKworCXJldCA9IG14c19laGNpX2dldF9wb3J0KCZlaGNpX214cywgQ09ORklHX0VIQ0lfTVhTX1BPUlQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBSZXNldCB0aGUgUEhZIGJsb2NrICovCisJd3JpdGVsKFVTQlBIWV9DVFJMX1NGVFJTVCwgJmVoY2lfbXhzLnBoeV9yZWdzLT5od191c2JwaHlfY3RybF9zZXQpOworCXVkZWxheSgxMCk7CisJd3JpdGVsKFVTQlBIWV9DVFJMX1NGVFJTVCB8IFVTQlBIWV9DVFJMX0NMS0dBVEUsCisJCSZlaGNpX214cy5waHlfcmVncy0+aHdfdXNicGh5X2N0cmxfY2xyKTsKKworCS8qIEVuYWJsZSBVU0IgY2xvY2sgKi8KKwl3cml0ZWwoQ0xLQ1RSTF9QTEwwQ1RSTDBfRU5fVVNCX0NMS1MgfCBDTEtDVFJMX1BMTDBDVFJMMF9QT1dFUiwKKwkJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfcGxsMGN0cmwwX3NldCk7CisJd3JpdGVsKENMS0NUUkxfUExMMUNUUkwwX0VOX1VTQl9DTEtTIHwgQ0xLQ1RSTF9QTEwxQ1RSTDBfUE9XRVIsCisJCQkmY2xrY3RybF9yZWdzLT5od19jbGtjdHJsX3BsbDFjdHJsMF9zZXQpOworCisJd3JpdGVsKEhXX0RJR0NUTF9DVFJMX1VTQjBfQ0xLR0FURSB8IEhXX0RJR0NUTF9DVFJMX1VTQjFfQ0xLR0FURSwKKwkJJmRpZ2N0bF9jdHJsLT5yZWdfY2xyKTsKKworCS8qIFN0YXJ0IFVTQiBQSFkgKi8KKwl3cml0ZWwoMCwgJmVoY2lfbXhzLnBoeV9yZWdzLT5od191c2JwaHlfcHdkKTsKKworCS8qIEVuYWJsZSBVVE1JKyBMZXZlbCAyIGFuZCBMZXZlbCAzIGNvbXBhdGliaWxpdHkgKi8KKwl3cml0ZWwoVVNCUEhZX0NUUkxfRU5VVE1JTEVWRUwzIHwgVVNCUEhZX0NUUkxfRU5VVE1JTEVWRUwyIHwgMSwKKwkJJmVoY2lfbXhzLnBoeV9yZWdzLT5od191c2JwaHlfY3RybF9zZXQpOworCisJdXNiX2Jhc2UgPSAoKHVpbnQzMl90KWVoY2lfbXhzLnVzYl9yZWdzKSArIDB4MTAwOworCWhjY3IgPSAoc3RydWN0IGVoY2lfaGNjciAqKXVzYl9iYXNlOworCisJY2FwX2Jhc2UgPSBlaGNpX3JlYWRsKCZoY2NyLT5jcl9jYXBiYXNlKTsKKwloY29yID0gKHN0cnVjdCBlaGNpX2hjb3IgKikodXNiX2Jhc2UgKyBIQ19MRU5HVEgoY2FwX2Jhc2UpKTsKKworCXJldHVybiAwOworfQorCitpbnQgZWhjaV9oY2Rfc3RvcCh2b2lkKQoreworCWludCByZXQ7CisJdWludDMyX3QgdG1wOworCXN0cnVjdCBteDI4X3JlZ2lzdGVyICpkaWdjdGxfY3RybCA9CisJCShzdHJ1Y3QgbXgyOF9yZWdpc3RlciAqKUhXX0RJR0NUTF9DVFJMOworCXN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqY2xrY3RybF9yZWdzID0KKwkJKHN0cnVjdCBteDI4X2Nsa2N0cmxfcmVncyAqKU1YU19DTEtDVFJMX0JBU0U7CisKKwlyZXQgPSBteHNfZWhjaV9nZXRfcG9ydCgmZWhjaV9teHMsIENPTkZJR19FSENJX01YU19QT1JUKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU3RvcCB0aGUgVVNCIHBvcnQgKi8KKwl0bXAgPSBlaGNpX3JlYWRsKCZoY29yLT5vcl91c2JjbWQpOworCXRtcCAmPSB+Q01EX1JVTjsKKwllaGNpX3dyaXRlbCh0bXAsICZoY29yLT5vcl91c2JjbWQpOworCisJLyogRGlzYWJsZSB0aGUgUEhZICovCisJdG1wID0gVVNCUEhZX1BXRF9SWFBXRFJYIHwgVVNCUEhZX1BXRF9SWFBXRERJRkYgfAorCQlVU0JQSFlfUFdEX1JYUFdEMVBUMSB8IFVTQlBIWV9QV0RfUlhQV0RFTlYgfAorCQlVU0JQSFlfUFdEX1RYUFdEVjJJIHwgVVNCUEhZX1BXRF9UWFBXRElCSUFTIHwKKwkJVVNCUEhZX1BXRF9UWFBXREZTOworCXdyaXRlbCh0bXAsICZlaGNpX214cy5waHlfcmVncy0+aHdfdXNicGh5X3B3ZCk7CisKKwkvKiBEaXNhYmxlIFVTQiBjbG9jayAqLworCXdyaXRlbChDTEtDVFJMX1BMTDBDVFJMMF9FTl9VU0JfQ0xLUywKKwkJCSZjbGtjdHJsX3JlZ3MtPmh3X2Nsa2N0cmxfcGxsMGN0cmwwX2Nscik7CisJd3JpdGVsKENMS0NUUkxfUExMMUNUUkwwX0VOX1VTQl9DTEtTLAorCQkJJmNsa2N0cmxfcmVncy0+aHdfY2xrY3RybF9wbGwxY3RybDBfY2xyKTsKKworCS8qIEdhdGUgb2ZmIHRoZSBVU0IgY2xvY2sgKi8KKwl3cml0ZWwoSFdfRElHQ1RMX0NUUkxfVVNCMF9DTEtHQVRFIHwgSFdfRElHQ1RMX0NUUkxfVVNCMV9DTEtHQVRFLAorCQkmZGlnY3RsX2N0cmwtPnJlZ19zZXQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2J1c192Y3hrLmMgYi9kcml2ZXJzL3ZpZGVvL2J1c192Y3hrLmMKaW5kZXggN2FlY2I5Mi4uOWM0NzE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9idXNfdmN4ay5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYnVzX3ZjeGsuYwpAQCAtMzkzLDcgKzM5Myw2IEBACiAJdW5zaWduZWQgbG9uZyB3aWR0aDsKIAl1bnNpZ25lZCBsb25nIGhlaWdodDsKIAl1bnNpZ25lZCBsb25nIGJwcDsKLQl1bnNpZ25lZCBsb25nIGNvbXByZXNzaW9uOwogCiAJdW5zaWduZWQgbG9uZyBsdzsKIApAQCAtNDA0LDcgKzQwMyw2IEBACiAJYm1wID0gKGJtcF9pbWFnZV90ICopIGFkZHI7CiAJaWYgKChibXAtPmhlYWRlci5zaWduYXR1cmVbMF0gPT0gJ0InKSAmJgogCSAgICAoYm1wLT5oZWFkZXIuc2lnbmF0dXJlWzFdID09ICdNJykpIHsKLQkJY29tcHJlc3Npb24gID0gbGUzMl90b19jcHUoYm1wLT5oZWFkZXIuY29tcHJlc3Npb24pOwogCQl3aWR0aCAgICAgICAgPSBsZTMyX3RvX2NwdShibXAtPmhlYWRlci53aWR0aCk7CiAJCWhlaWdodCAgICAgICA9IGxlMzJfdG9fY3B1KGJtcC0+aGVhZGVyLmhlaWdodCk7CiAJCWJwcCAgICAgICAgICA9IGxlMTZfdG9fY3B1KGJtcC0+aGVhZGVyLmJpdF9jb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NmYl9jb25zb2xlLmMgYi9kcml2ZXJzL3ZpZGVvL2NmYl9jb25zb2xlLmMKaW5kZXggNTYxODgzYS4uMzJlODkwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jZmJfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2ZiX2NvbnNvbGUuYwpAQCAtMjAzLDYgKzIwMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxzdGRpb19kZXYuaD4KICNpbmNsdWRlIDx2aWRlb19mb250Lmg+CisjaW5jbHVkZSA8dmlkZW9fZm9udF9kYXRhLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19DTURfREFURSkKICNpbmNsdWRlIDxydGMuaD4KQEAgLTI4Niw2ICsyODcsNyBAQAogI2lmZGVmCUNPTkZJR19WSURFT19MT0dPCiAjaWZkZWYJQ09ORklHX1ZJREVPX0JNUF9MT0dPCiAjaW5jbHVkZSA8Ym1wX2xvZ28uaD4KKyNpbmNsdWRlIDxibXBfbG9nb19kYXRhLmg+CiAjZGVmaW5lIFZJREVPX0xPR09fV0lEVEgJQk1QX0xPR09fV0lEVEgKICNkZWZpbmUgVklERU9fTE9HT19IRUlHSFQJQk1QX0xPR09fSEVJR0hUCiAjZGVmaW5lIFZJREVPX0xPR09fTFVUX09GRlNFVAlCTVBfTE9HT19PRkZTRVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY3Q2OTAwMC5jIGIvZHJpdmVycy92aWRlby9jdDY5MDAwLmMKaW5kZXggM2RiNjE0ZC4uMGVkNWY0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jdDY5MDAwLmMKKysrIGIvZHJpdmVycy92aWRlby9jdDY5MDAwLmMKQEAgLTM1LDkgKzM1LDExIEBACiAjdW5kZWYgVkdBX0RFQlVHCiAjdW5kZWYgVkdBX0RVTVBfUkVHCiAjaWZkZWYgVkdBX0RFQlVHCi0jZGVmaW5lCVBSSU5URihmbXQsYXJncy4uLikJcHJpbnRmIChmbXQgLCMjYXJncykKKyN1bmRlZiBfREVCVUcKKyNkZWZpbmUgX0RFQlVHICAxCiAjZWxzZQotI2RlZmluZSBQUklOVEYoZm10LGFyZ3MuLi4pCisjdW5kZWYgX0RFQlVHCisjZGVmaW5lIF9ERUJVRyAgMAogI2VuZGlmCiAKIC8qIE1hY3JvcyAqLwpAQCAtNzQwLDcgKzc0Miw3IEBACiAJfQogCW0gKz0gcGFyYW0tPm1uX2RpZmY7CiAJbiArPSBwYXJhbS0+bW5fZGlmZjsKLQlQUklOVEYgKCJWQ08gJWQsIHBkICVkLCBtICVkIG4gJWQgdmxkICVkIFxuIiwgZnZjbywgcGQsIG0sIG4sIHZsZCk7CisJZGVidWcoIlZDTyAlZCwgcGQgJWQsIG0gJWQgbiAlZCB2bGQgJWRcbiIsIGZ2Y28sIHBkLCBtLCBuLCB2bGQpOwogCXhyX2NiID0gKCgweDcgJiBQRCkgPDwgNCkgfCAodmxkID09IHBhcmFtLT52bGRfc2V0ID8gMHgwNCA6IDApOwogCS8qIEFsbCBmb3VyIG9mIHRoZSByZWdpc3RlcnMgdXNlZCBmb3IgZG90IGNsb2NrIDIgKFhSQzggLSBYUkNCKSBtdXN0IGJlCiAJICogd3JpdHRlbiwgYW5kIGluIG9yZGVyIGZyb20gWFJDOCB0byBYUkNCLCBiZWZvcmUgdGhlIGhhcmR3YXJlIHdpbGwKQEAgLTc1MSw3ICs3NTMsNyBAQAogCWN0V3JpdGVfaSAoQ1RfWFJfTywgMHhjYSwgMCk7CS8qIGJlY2F1c2Ugb2YgYSBodyBidWcgSSBndWVzcywgYnV0IHdlIHdyaXRlICovCiAJY3RXcml0ZV9pIChDVF9YUl9PLCAweGNiLCB4cl9jYik7CS8qIDAgdG8gaXQgZm9yIHNhdmV0eSAqLwogCW5ld19waXhjbG9jayA9IFJlYWRQaXhDbGNrRnJvbVhyUmVnc0JhY2sgKHBhcmFtKTsKLQlQUklOVEYgKCJwaXhlbGNsb2NrLnNldCA9ICVkLCBwaXhlbGNsb2NrLnJlYWwgPSAlZCBcbiIsCisJZGVidWcoInBpeGVsY2xvY2suc2V0ID0gJWQsIHBpeGVsY2xvY2sucmVhbCA9ICVkXG4iLAogCQlwaXhlbGNsb2NrLCBuZXdfcGl4Y2xvY2spOwogfQogCkBAIC0xMTE5LDcgKzExMjEsNyBAQAogCQlwR0QtPmRwckJhc2UgJj0gMHhmZmZmZjAwMDsKIAkJcEdELT5kcHJCYXNlICs9IDB4MDAwMDEwMDA7CiAJfQotCVBSSU5URiAoIkN1cnNvciBTdGFydCAleCBQYXR0ZXJuIFN0YXJ0ICV4XG4iLCBwR0QtPmRwckJhc2UsCisJZGVidWcoIkN1cnNvciBTdGFydCAleCBQYXR0ZXJuIFN0YXJ0ICV4XG4iLCBwR0QtPmRwckJhc2UsCiAJCVBBVFRFUk5fQURSKTsKIAlwR0QtPnZwckJhc2UgPSBwY2lfbWVtX2Jhc2U7CS8qIER1bW15ICovCiAJcEdELT5jcHJCYXNlID0gcGNpX21lbV9iYXNlOwkvKiBEdW1teSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCmluZGV4IGJjYTlmYjUuLmEyOTgxYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKQEAgLTY4NSw3ICs2ODUsNiBAQAogdm9pZCAqdmlkZW9faHdfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhcjsKLQlpbnQgcmV0OwogCXUzMiBzaXplOwogCWNoYXIgKnA7CiAKQEAgLTczOCw3ICs3MzcsNiBAQAogCiAJaWYgKGxjZF9pbml0KHBhciwgJmxjZF9jZmcsIGxjZF9wYW5lbCkgPCAwKSB7CiAJCXByaW50ZigibGNkX2luaXQgZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBlcnJfcmVsZWFzZV9mYjsKIAl9CiAKQEAgLTc1NCw3ICs3NTIsNiBAQAogCQkodW5zaWduZWQgaW50KXBhci0+dnJhbV92aXJ0KTsKIAlpZiAoIXBhci0+dnJhbV92aXJ0KSB7CiAJCXByaW50ZigiR0xDRDogbWFsbG9jIGZvciBmcmFtZSBidWZmZXIgZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZV9mYjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZnNsX2RpdV9mYi5jIGIvZHJpdmVycy92aWRlby9mc2xfZGl1X2ZiLmMKaW5kZXggY2I0MzkwNC4uMzUwMjQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mc2xfZGl1X2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mc2xfZGl1X2ZiLmMKQEAgLTI1Miw4ICsyNTIsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBSRVNPTFVUSU9OKDgwMCwgNjAwKToKIAkJZnNsX2RpdV9tb2RlX2RiID0gJmZzbF9kaXVfbW9kZV84MDBfNjAwOworCQlicmVhazsKIAljYXNlIFJFU09MVVRJT04oMTAyNCwgNzY4KToKIAkJZnNsX2RpdV9tb2RlX2RiID0gJmZzbF9kaXVfbW9kZV8xMDI0Xzc2ODsKKwkJYnJlYWs7CiAJY2FzZSBSRVNPTFVUSU9OKDEyODAsIDEwMjQpOgogCQlmc2xfZGl1X21vZGVfZGIgPSAmZnNsX2RpdV9tb2RlXzEyODBfMTAyNDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL214M2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKaW5kZXggZjMwZGViMy4uZWI3NWM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9teDNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXgzZmIuYwpAQCAtODI0LDcgKzgyNCw3IEBACiAJY2hhciAqcGVudjsKIAl1MzIgbWVtc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHQxLCBoc3luY2gsIHZzeW5jaDsKLQlpbnQgYml0c19wZXJfcGl4ZWwsIGksIHRtcCwgdmVzYV9pZHggPSAwLCB2aWRlb21vZGU7CisJaW50IGJpdHNfcGVyX3BpeGVsLCBpLCB0bXAsIHZpZGVvbW9kZTsKIAogCXRtcCA9IDA7CiAKQEAgLTg1Nyw3ICs4NTcsNiBAQAogCQltb2RlID0gKHN0cnVjdCBjdGZiX3Jlc19tb2RlcyAqKQogCQkJCSZyZXNfbW9kZV9pbml0W3Zlc2FfbW9kZXNbaV0ucmVzaW5kZXhdOwogCQliaXRzX3Blcl9waXhlbCA9IHZlc2FfbW9kZXNbaV0uYml0c19wZXJfcGl4ZWw7Ci0JCXZlc2FfaWR4ID0gdmVzYV9tb2Rlc1tpXS5yZXNpbmRleDsKIAl9IGVsc2UgewogCQltb2RlID0gKHN0cnVjdCBjdGZiX3Jlc19tb2RlcyAqKSAmdmFyX21vZGU7CiAJCWJpdHNfcGVyX3BpeGVsID0gdmlkZW9fZ2V0X3BhcmFtcyhtb2RlLCBwZW52KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2VkMTU2eC5jIGIvZHJpdmVycy92aWRlby9zZWQxNTZ4LmMKaW5kZXggNzA3MjUwZC4uYTYxMGI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zZWQxNTZ4LmMKKysrIGIvZHJpdmVycy92aWRlby9zZWQxNTZ4LmMKQEAgLTQxLDYgKzQxLDcgQEAKIAogLyogaW5jbHVkZSB0aGUgZm9udCBkYXRhICovCiAjaW5jbHVkZSA8dmlkZW9fZm9udC5oPgorI2luY2x1ZGUgPHZpZGVvX2ZvbnRfZGF0YS5oPgogCiAjaWYgVklERU9fRk9OVF9XSURUSCAhPSA4IHx8IFZJREVPX0ZPTlRfSEVJR0hUICE9IDE2CiAjZXJyb3IgRXhwZWN0aW5nIFZJREVPX0ZPTlRfV0lEVEggPT0gOCAmJiBWSURFT19GT05UX0hFSUdIVCA9PSAxNgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvYXBpL2RlbW8uYyBiL2V4YW1wbGVzL2FwaS9kZW1vLmMKaW5kZXggNjVlNzQ5MS4uMTlkMzhmNiAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvYXBpL2RlbW8uYworKysgYi9leGFtcGxlcy9hcGkvZGVtby5jCkBAIC00OCw2ICs0OCw3IEBACiAJdWxvbmcgc3RhcnQsIG5vdzsKIAlzdHJ1Y3QgZGV2aWNlX2luZm8gKmRpOwogCWxiYXNpemVfdCBybGVuOworCXN0cnVjdCBkaXNwbGF5X2luZm8gZGlzaW5mbzsKIAogCWlmICghYXBpX3NlYXJjaF9zaWcoJnNpZykpCiAJCXJldHVybiAtMTsKQEAgLTE3Niw2ICsxNzcsMzYgQEAKIAl3aGlsZSAoKGVudiA9IHViX2Vudl9lbnVtKGVudikpICE9IE5VTEwpCiAJCXByaW50ZigiJXMgPSAlc1xuIiwgZW52LCB1Yl9lbnZfZ2V0KGVudikpOwogCisJcHJpbnRmKCJcbioqKiBEaXNwbGF5ICoqKlxuIik7CisKKwlpZiAodWJfZGlzcGxheV9nZXRfaW5mbyhESVNQTEFZX1RZUEVfTENELCAmZGlzaW5mbykpIHsKKwkJcHJpbnRmKCJMQ0QgaW5mbzogZmFpbGVkXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGYoIkxDRCBpbmZvOlxuIik7CisJCXByaW50ZigiICBwaXhlbCB3aWR0aDogICVkXG4iLCBkaXNpbmZvLnBpeGVsX3dpZHRoKTsKKwkJcHJpbnRmKCIgIHBpeGVsIGhlaWdodDogJWRcbiIsIGRpc2luZm8ucGl4ZWxfaGVpZ2h0KTsKKwkJcHJpbnRmKCIgIHNjcmVlbiByb3dzOiAgJWRcbiIsIGRpc2luZm8uc2NyZWVuX3Jvd3MpOworCQlwcmludGYoIiAgc2NyZWVuIGNvbHM6ICAlZFxuIiwgZGlzaW5mby5zY3JlZW5fY29scyk7CisJfQorCWlmICh1Yl9kaXNwbGF5X2dldF9pbmZvKERJU1BMQVlfVFlQRV9WSURFTywgJmRpc2luZm8pKSB7CisJCXByaW50ZigidmlkZW8gaW5mbzogZmFpbGVkXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGYoInZpZGVvIGluZm86XG4iKTsKKwkJcHJpbnRmKCIgIHBpeGVsIHdpZHRoOiAgJWRcbiIsIGRpc2luZm8ucGl4ZWxfd2lkdGgpOworCQlwcmludGYoIiAgcGl4ZWwgaGVpZ2h0OiAlZFxuIiwgZGlzaW5mby5waXhlbF9oZWlnaHQpOworCQlwcmludGYoIiAgc2NyZWVuIHJvd3M6ICAlZFxuIiwgZGlzaW5mby5zY3JlZW5fcm93cyk7CisJCXByaW50ZigiICBzY3JlZW4gY29sczogICVkXG4iLCBkaXNpbmZvLnNjcmVlbl9jb2xzKTsKKwl9CisKKwlwcmludGYoIioqKiBQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlICoqKlxuIik7CisJcHJpbnRmKCJnb3QgY2hhciAweCV4XG4iLCB1Yl9nZXRjKCkpOworCisJLyoKKwkgKiBUaGlzIG9ubHkgY2xlYXJzIG1lc3NhZ2VzIG9uIHNjcmVlbiwgbm90IG9uIHNlcmlhbCBwb3J0LiBJdCBpcworCSAqIGVxdWl2YWxlbnQgdG8gYSBuby1vcCBpZiBubyBkaXNwbGF5IGlzIGF2YWlsYWJsZS4KKwkgKi8KKwl1Yl9kaXNwbGF5X2NsZWFyKCk7CisKIAkvKiByZXNldCAqLwogCXByaW50ZigiXG4qKiogUmVzZXR0aW5nIGJvYXJkICoqKlxuIik7CiAJdWJfcmVzZXQoKTsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwaS9nbHVlLmMgYi9leGFtcGxlcy9hcGkvZ2x1ZS5jCmluZGV4IGVmZjZhN2UuLmQ5MDdlM2YgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL2FwaS9nbHVlLmMKKysrIGIvZXhhbXBsZXMvYXBpL2dsdWUuYwpAQCAtNDAyLDMgKzQwMiwzNCBAQAogCiAJcmV0dXJuIGVudl9uYW1lOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGRpc3BsYXkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IHViX2Rpc3BsYXlfZ2V0X2luZm8oaW50IHR5cGUsIHN0cnVjdCBkaXNwbGF5X2luZm8gKmRpKQoreworCWludCBlcnIgPSAwOworCisJaWYgKCFzeXNjYWxsKEFQSV9ESVNQTEFZX0dFVF9JTkZPLCAmZXJyLCAodWludDMyX3QpdHlwZSwgKHVpbnQzMl90KWRpKSkKKwkJcmV0dXJuIEFQSV9FU1lTQzsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCB1Yl9kaXNwbGF5X2RyYXdfYml0bWFwKHVsb25nIGJpdG1hcCwgaW50IHgsIGludCB5KQoreworCWludCBlcnIgPSAwOworCisJaWYgKCFzeXNjYWxsKEFQSV9ESVNQTEFZX0RSQVdfQklUTUFQLCAmZXJyLCBiaXRtYXAsIHgsIHkpKQorCQlyZXR1cm4gQVBJX0VTWVNDOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCB1Yl9kaXNwbGF5X2NsZWFyKHZvaWQpCit7CisJc3lzY2FsbChBUElfRElTUExBWV9DTEVBUiwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9hcGkvZ2x1ZS5oIGIvZXhhbXBsZXMvYXBpL2dsdWUuaAppbmRleCA2YmY0N2QwLi5lNDNmN2Q5IDEwMDY0NAotLS0gYS9leGFtcGxlcy9hcGkvZ2x1ZS5oCisrKyBiL2V4YW1wbGVzL2FwaS9nbHVlLmgKQEAgLTc3LDQgKzc3LDkgQEAKIGludAkJCXViX2Rldl9yZWN2KGludCBoYW5kbGUsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50ICpybGVuKTsKIHN0cnVjdCBkZXZpY2VfaW5mbyAqCXViX2Rldl9nZXQoaW50KTsKIAorLyogZGlzcGxheSAqLworaW50IHViX2Rpc3BsYXlfZ2V0X2luZm8oaW50IHR5cGUsIHN0cnVjdCBkaXNwbGF5X2luZm8gKmRpKTsKK2ludCB1Yl9kaXNwbGF5X2RyYXdfYml0bWFwKHVsb25nIGJpdG1hcCwgaW50IHgsIGludCB5KTsKK3ZvaWQgdWJfZGlzcGxheV9jbGVhcih2b2lkKTsKKwogI2VuZGlmIC8qIF9BUElfR0xVRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZnMveWFmZnMyL3lhZmZzX2d1dHMuYyBiL2ZzL3lhZmZzMi95YWZmc19ndXRzLmMKaW5kZXggYzQzMjlhZi4uZjBlZjhkYiAxMDA2NDQKLS0tIGEvZnMveWFmZnMyL3lhZmZzX2d1dHMuYworKysgYi9mcy95YWZmczIveWFmZnNfZ3V0cy5jCkBAIC04NTEsOSArODUxLDggQEAKIAlpbnQgcmV0dmFsID0gWUFGRlNfT0s7CiAJX191OCAqZGF0YSA9IHlhZmZzX0dldFRlbXBCdWZmZXIoZGV2LCBfX0xJTkVfXyk7CiAJeWFmZnNfRXh0ZW5kZWRUYWdzIHRhZ3M7Ci0JaW50IHJlc3VsdDsKIAotCXJlc3VsdCA9IHlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCBjaHVua0luTkFORCwgZGF0YSwgJnRhZ3MpOworCXlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCBjaHVua0luTkFORCwgZGF0YSwgJnRhZ3MpOwogCiAJaWYodGFncy5lY2NSZXN1bHQgPiBZQUZGU19FQ0NfUkVTVUxUX05PX0VSUk9SKQogCQlyZXR2YWwgPSBZQUZGU19GQUlMOwpAQCAtMzQ2MCw3ICszNDU5LDYgQEAKIAogCWludCBwcmV2Q2h1bmtJZDsKIAlpbnQgcmV0VmFsID0gMDsKLQlpbnQgcmVzdWx0ID0gMDsKIAogCWludCBuZXdDaHVua0lkOwogCXlhZmZzX0V4dGVuZGVkVGFncyBuZXdUYWdzOwpAQCAtMzQ4NCw3ICszNDgyLDcgQEAKIAkJcHJldkNodW5rSWQgPSBpbi0+Y2h1bmtJZDsKIAogCQlpZiAocHJldkNodW5rSWQgPj0gMCkgewotCQkJcmVzdWx0ID0geWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIHByZXZDaHVua0lkLAorCQkJeWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIHByZXZDaHVua0lkLAogCQkJCQkJCWJ1ZmZlciwgJm9sZFRhZ3MpOwogCiAJCQl5YWZmc19WZXJpZnlPYmplY3RIZWFkZXIoaW4sb2gsJm9sZFRhZ3MsMCk7CkBAIC0zNzcxLDcgKzM3NjksNiBAQAogCXlhZmZzX09iamVjdCAqdGhlT2JqOwogCWludCB1c2FnZTsKIAlpbnQgaTsKLQlpbnQgcHVzaG91dDsKIAogCWlmIChkZXYtPm5TaG9ydE9wQ2FjaGVzID4gMCkgewogCQkvKiBUcnkgZmluZCBhIG5vbi1kaXJ0eSBvbmUuLi4gKi8KQEAgLTM3OTAsNyArMzc4Nyw2IEBACiAJCQl0aGVPYmogPSBOVUxMOwogCQkJdXNhZ2UgPSAtMTsKIAkJCWNhY2hlID0gTlVMTDsKLQkJCXB1c2hvdXQgPSAtMTsKIAogCQkJZm9yIChpID0gMDsgaSA8IGRldi0+blNob3J0T3BDYWNoZXM7IGkrKykgewogCQkJCWlmIChkZXYtPnNyQ2FjaGVbaV0ub2JqZWN0ICYmCkBAIC0zODAwLDcgKzM3OTYsNiBAQAogCQkJCQl1c2FnZSA9IGRldi0+c3JDYWNoZVtpXS5sYXN0VXNlOwogCQkJCQl0aGVPYmogPSBkZXYtPnNyQ2FjaGVbaV0ub2JqZWN0OwogCQkJCQljYWNoZSA9ICZkZXYtPnNyQ2FjaGVbaV07Ci0JCQkJCXB1c2hvdXQgPSBpOwogCQkJCX0KIAkJCX0KIApAQCAtNTIzNCw3ICs1MjI5LDYgQEAKIAlpbnQgc3RhcnRJdGVyYXRvcjsKIAlpbnQgZW5kSXRlcmF0b3I7CiAJaW50IG5CbG9ja3NUb1NjYW4gPSAwOwotCWludCByZXN1bHQ7CiAKIAlpbnQgY2h1bms7CiAJaW50IGM7CkBAIC01Mzc3LDcgKzUzNzEsNyBAQAogCQkJLyogUmVhZCB0aGUgdGFncyBhbmQgZGVjaWRlIHdoYXQgdG8gZG8gKi8KIAkJCWNodW5rID0gYmxrICogZGV2LT5uQ2h1bmtzUGVyQmxvY2sgKyBjOwogCi0JCQlyZXN1bHQgPSB5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgY2h1bmssIE5VTEwsCisJCQl5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgY2h1bmssIE5VTEwsCiAJCQkJCQkJJnRhZ3MpOwogCiAJCQkvKiBMZXQncyBoYXZlIGEgZ29vZCBsb29rIGF0IHRoaXMgY2h1bmsuLi4gKi8KQEAgLTU0NzQsNyArNTQ2OCw3IEBACiAJCQkJeWFmZnNfU2V0Q2h1bmtCaXQoZGV2LCBibGssIGMpOwogCQkJCWJpLT5wYWdlc0luVXNlKys7CiAKLQkJCQlyZXN1bHQgPSB5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgY2h1bmssCisJCQkJeWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChkZXYsIGNodW5rLAogCQkJCQkJCQljaHVua0RhdGEsCiAJCQkJCQkJCU5VTEwpOwogCkBAIC01NzQ0LDggKzU3MzgsNiBAQAogCXlhZmZzX09iamVjdEhlYWRlciAqb2g7CiAJeWFmZnNfRGV2aWNlICpkZXYgPSBpbi0+bXlEZXY7CiAJeWFmZnNfRXh0ZW5kZWRUYWdzIHRhZ3M7Ci0JaW50IHJlc3VsdDsKLQlpbnQgYWxsb2NfZmFpbGVkID0gMDsKIAogCWlmKCFpbikKIAkJcmV0dXJuOwpAQCAtNTc2MCw3ICs1NzUyLDggQEAKIAkJaW4tPmxhenlMb2FkZWQgPSAwOwogCQljaHVua0RhdGEgPSB5YWZmc19HZXRUZW1wQnVmZmVyKGRldiwgX19MSU5FX18pOwogCi0JCXJlc3VsdCA9IHlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LGluLT5jaHVua0lkLGNodW5rRGF0YSwmdGFncyk7CisJCXlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LCBpbi0+Y2h1bmtJZCwKKwkJCQkJCWNodW5rRGF0YSwgJnRhZ3MpOwogCQlvaCA9ICh5YWZmc19PYmplY3RIZWFkZXIgKikgY2h1bmtEYXRhOwogCiAJCWluLT55c3RfbW9kZSA9IG9oLT55c3RfbW9kZTsKQEAgLTU3ODUsOCArNTc3OCw2IEBACiAJCWlmKGluLT52YXJpYW50VHlwZSA9PSBZQUZGU19PQkpFQ1RfVFlQRV9TWU1MSU5LKXsKIAkJCSBpbi0+dmFyaWFudC5zeW1MaW5rVmFyaWFudC5hbGlhcyA9CiAJCQkJCQkgICAgeWFmZnNfQ2xvbmVTdHJpbmcob2gtPmFsaWFzKTsKLQkJCWlmKCFpbi0+dmFyaWFudC5zeW1MaW5rVmFyaWFudC5hbGlhcykKLQkJCQlhbGxvY19mYWlsZWQgPSAxOyAvKiBOb3QgcmV0dXJuZWQgdG8gY2FsbGVyICovCiAJCX0KIAogCQl5YWZmc19SZWxlYXNlVGVtcEJ1ZmZlcihkZXYsY2h1bmtEYXRhLCBfX0xJTkVfXyk7CkBAIC01ODAzLDkgKzU3OTQsNyBAQAogCWludCBuQmxvY2tzVG9TY2FuID0gMDsKIAogCWludCBjaHVuazsKLQlpbnQgcmVzdWx0OwogCWludCBjOwotCWludCBkZWxldGVkOwogCXlhZmZzX0Jsb2NrU3RhdGUgc3RhdGU7CiAJeWFmZnNfT2JqZWN0ICpoYXJkTGlzdCA9IE5VTEw7CiAJeWFmZnNfQmxvY2tJbmZvICpiaTsKQEAgLTU5NzEsOCArNTk2MCw2IEBACiAKIAkJc3RhdGUgPSBiaS0+YmxvY2tTdGF0ZTsKIAotCQlkZWxldGVkID0gMDsKLQogCQkvKiBGb3IgZWFjaCBjaHVuayBpbiBlYWNoIGJsb2NrIHRoYXQgbmVlZHMgc2Nhbm5pbmcuLi4uICovCiAJCWZvdW5kQ2h1bmtzSW5CbG9jayA9IDA7CiAJCWZvciAoYyA9IGRldi0+bkNodW5rc1BlckJsb2NrIC0gMTsKQEAgLTU5ODUsNyArNTk3Miw3IEBACiAKIAkJCWNodW5rID0gYmxrICogZGV2LT5uQ2h1bmtzUGVyQmxvY2sgKyBjOwogCi0JCQlyZXN1bHQgPSB5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgY2h1bmssIE5VTEwsCisJCQl5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwgY2h1bmssIE5VTEwsCiAJCQkJCQkJJnRhZ3MpOwogCiAJCQkvKiBMZXQncyBoYXZlIGEgZ29vZCBsb29rIGF0IHRoaXMgY2h1bmsuLi4gKi8KQEAgLTYxMzIsNyArNjExOSw3IEBACiAJCQkJCSAqIGxpdmluZyB3aXRoIGludmFsaWQgZGF0YSB1bnRpbCBuZWVkZWQuCiAJCQkJCSAqLwogCi0JCQkJCXJlc3VsdCA9IHlhZmZzX1JlYWRDaHVua1dpdGhUYWdzRnJvbU5BTkQoZGV2LAorCQkJCQl5YWZmc19SZWFkQ2h1bmtXaXRoVGFnc0Zyb21OQU5EKGRldiwKIAkJCQkJCQkJCWNodW5rLAogCQkJCQkJCQkJY2h1bmtEYXRhLAogCQkJCQkJCQkJTlVMTCk7CkBAIC02NjU0LDcgKzY2NDEsNiBAQAogCX0KICNlbmRpZgogCWVsc2UgewotCQlpbnQgcmVzdWx0OwogCQlfX3U4ICpidWZmZXIgPSB5YWZmc19HZXRUZW1wQnVmZmVyKG9iai0+bXlEZXYsIF9fTElORV9fKTsKIAogCQl5YWZmc19PYmplY3RIZWFkZXIgKm9oID0gKHlhZmZzX09iamVjdEhlYWRlciAqKSBidWZmZXI7CkBAIC02NjYyLDcgKzY2NDgsNyBAQAogCQltZW1zZXQoYnVmZmVyLCAwLCBvYmotPm15RGV2LT5uRGF0YUJ5dGVzUGVyQ2h1bmspOwogCiAJCWlmIChvYmotPmNodW5rSWQgPj0gMCkgewotCQkJcmVzdWx0ID0geWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChvYmotPm15RGV2LAorCQkJeWFmZnNfUmVhZENodW5rV2l0aFRhZ3NGcm9tTkFORChvYmotPm15RGV2LAogCQkJCQkJCW9iai0+Y2h1bmtJZCwgYnVmZmVyLAogCQkJCQkJCU5VTEwpOwogCQl9CmRpZmYgLS1naXQgYS9mcy95YWZmczIveWFmZnNfdGFnc2NvbXBhdC5jIGIvZnMveWFmZnMyL3lhZmZzX3RhZ3Njb21wYXQuYwppbmRleCA3MGE4YThjLi5lODcyMzIzIDEwMDY0NAotLS0gYS9mcy95YWZmczIveWFmZnNfdGFnc2NvbXBhdC5jCisrKyBiL2ZzL3lhZmZzMi95YWZmc190YWdzY29tcGF0LmMKQEAgLTEzNiw5ICsxMzYsOCBAQAogfQogCiBzdGF0aWMgdm9pZCB5YWZmc19HZXRUYWdzRnJvbVNwYXJlKHlhZmZzX0RldmljZSAqIGRldiwgeWFmZnNfU3BhcmUgKiBzcGFyZVB0ciwKLQkJCQkgICB5YWZmc19UYWdzICogdGFnc1B0cikKKwkJCQkgICB5YWZmc19UYWdzVW5pb24gKnR1KQogewotCXlhZmZzX1RhZ3NVbmlvbiAqdHUgPSAoeWFmZnNfVGFnc1VuaW9uICopIHRhZ3NQdHI7CiAJaW50IHJlc3VsdDsKIAogCXR1LT5hc0J5dGVzWzBdID0gc3BhcmVQdHItPnRhZ0J5dGUwOwpAQCAtMTUwLDcgKzE0OSw3IEBACiAJdHUtPmFzQnl0ZXNbNl0gPSBzcGFyZVB0ci0+dGFnQnl0ZTY7CiAJdHUtPmFzQnl0ZXNbN10gPSBzcGFyZVB0ci0+dGFnQnl0ZTc7CiAKLQlyZXN1bHQgPSB5YWZmc19DaGVja0VDQ09uVGFncyh0YWdzUHRyKTsKKwlyZXN1bHQgPSB5YWZmc19DaGVja0VDQ09uVGFncygmdHUtPmFzVGFncyk7CiAJaWYgKHJlc3VsdCA+IDApIHsKIAkJZGV2LT50YWdzRWNjRml4ZWQrKzsKIAl9IGVsc2UgaWYgKHJlc3VsdCA8IDApIHsKQEAgLTQzNyw3ICs0MzYsNyBAQAogewogCiAJeWFmZnNfU3BhcmUgc3BhcmU7Ci0JeWFmZnNfVGFncyB0YWdzOworCXlhZmZzX1RhZ3NVbmlvbiB0YWdzOwogCXlhZmZzX0VDQ1Jlc3VsdCBlY2NSZXN1bHQ7CiAKIAlzdGF0aWMgeWFmZnNfU3BhcmUgc3BhcmVGRjsKQEAgLTQ2NywxMCArNDY2LDEwIEBACiAJCQlpZiAoZVRhZ3MtPmNodW5rVXNlZCkgewogCQkJCXlhZmZzX0dldFRhZ3NGcm9tU3BhcmUoZGV2LCAmc3BhcmUsICZ0YWdzKTsKIAotCQkJCWVUYWdzLT5vYmplY3RJZCA9IHRhZ3Mub2JqZWN0SWQ7Ci0JCQkJZVRhZ3MtPmNodW5rSWQgPSB0YWdzLmNodW5rSWQ7Ci0JCQkJZVRhZ3MtPmJ5dGVDb3VudCA9IHRhZ3MuYnl0ZUNvdW50OwotCQkJCWVUYWdzLT5zZXJpYWxOdW1iZXIgPSB0YWdzLnNlcmlhbE51bWJlcjsKKwkJCQllVGFncy0+b2JqZWN0SWQgPSB0YWdzLmFzVGFncy5vYmplY3RJZDsKKwkJCQllVGFncy0+Y2h1bmtJZCA9IHRhZ3MuYXNUYWdzLmNodW5rSWQ7CisJCQkJZVRhZ3MtPmJ5dGVDb3VudCA9IHRhZ3MuYXNUYWdzLmJ5dGVDb3VudDsKKwkJCQllVGFncy0+c2VyaWFsTnVtYmVyID0gdGFncy5hc1RhZ3Muc2VyaWFsTnVtYmVyOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvLmdpdGlnbm9yZSBiL2luY2x1ZGUvLmdpdGlnbm9yZQppbmRleCBlYzIyNGM1Li43Y2QzZTkwIDEwMDY0NAotLS0gYS9pbmNsdWRlLy5naXRpZ25vcmUKKysrIGIvaW5jbHVkZS8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNiBAQAogL2F1dG9jb25mLm1rKgogL2FzbQogL2JtcF9sb2dvLmgKKy9ibXBfbG9nb19kYXRhLmgKIC9jb25maWcuaAogL2NvbmZpZy5tawpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRlc3RlY2gvYW5kZXNfcGN1LmggYi9pbmNsdWRlL2FuZGVzdGVjaC9hbmRlc19wY3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGRiZDcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hbmRlc3RlY2gvYW5kZXNfcGN1LmgKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTEgQW5kZXMgVGVjaG5vbG9neSBDb3JwCisgKiBNYWNwYXVsIExpbiA8bWFjcGF1bEBhbmRlc3RlY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBBbmRlcyBQb3dlciBDb250cm9sIFVuaXQKKyAqLworI2lmbmRlZiBfX0FOREVTX1BDVV9ICisjZGVmaW5lIF9fQU5ERVNfUENVX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHBjcyB7CisJdW5zaWduZWQgaW50CWNyOwkJLyogUENTeCBDb25maWd1cmF0aW9uIChjbG9jayBzY2FsaW5nKSAqLworCXVuc2lnbmVkIGludAlwYXJtOwkJLyogUENTeCBQYXJhbWV0ZXIqLworCXVuc2lnbmVkIGludAlzdGF0MTsJCS8qIFBDU3ggU3RhdHVzIDEgKi8KKwl1bnNpZ25lZCBpbnQJc3RhdDI7CQkvKiBQQ1N4IFN0dXN0cyAyICovCisJdW5zaWduZWQgaW50CXBkZDsJCS8qIFBDU3ggUEREICovCit9OworCitzdHJ1Y3QgYW5kZXNfcGN1IHsKKwl1bnNpZ25lZCBpbnQJcmV2OwkJLyogMHgwMCAtIFBDVSBSZXZpc2lvbiAqLworCXVuc2lnbmVkIGludAlzcGluZm87CQkvKiAweDA0IC0gU2NyYXRjaCBQYWQgSW5mbyAqLworCXVuc2lnbmVkIGludAlyc3ZkMVsyXTsJLyogMHgwOC0weDBDOiBSZXNlcnZlZCAqLworCXVuc2lnbmVkIGludAlzb2NfaWQ7CQkvKiAweDEwIC0gU29DIElEICovCisJdW5zaWduZWQgaW50CXNvY19haGI7CS8qIDB4MTQgLSBTb0MgQUhCIGNvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJc29jX2FwYjsJLyogMHgxOCAtIFNvQyBBUEIgY29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGludAlyc3ZkMjsJCS8qIDB4MUMgKi8KKwl1bnNpZ25lZCBpbnQJZGNzcmNyMDsJLyogMHgyMCAtIERyaXZpbmcgQ2FwYWJpbGl0eQorCQkJCQkJYW5kIFNsZXcgUmF0ZSBDb250cm9sIDAgKi8KKwl1bnNpZ25lZCBpbnQJZGNzcmNyMTsJLyogMHgyNCAtIERyaXZpbmcgQ2FwYWJpbGl0eQorCQkJCQkJYW5kIFNsZXcgUmF0ZSBDb250cm9sIDEgKi8KKwl1bnNpZ25lZCBpbnQJZGNzcmNyMjsJLyogMHgyOCAtIERyaXZpbmcgQ2FwYWJpbGl0eQorCQkJCQkJYW5kIFNsZXcgUmF0ZSBDb250cm9sIDIgKi8KKwl1bnNpZ25lZCBpbnQJcnN2ZDM7CQkvKiAweDJDICovCisJdW5zaWduZWQgaW50CW1mcHNyMDsJCS8qIDB4MzAgLSBNdWx0aS1GdW5jIFBvcnQgU2V0dGluZyAwICovCisJdW5zaWduZWQgaW50CW1mcHNyMTsJCS8qIDB4MzQgLSBNdWx0aS1GdW5jIFBvcnQgU2V0dGluZyAxICovCisJdW5zaWduZWQgaW50CWRtYWVzOwkJLyogMHgzOCAtIERNQSBFbmdpbmUgU2VsZWN0aW9uICovCisJdW5zaWduZWQgaW50CXJzdmQ0OwkJLyogMHgzQyAqLworCXVuc2lnbmVkIGludAlvc2NjOwkJLyogMHg0MCAtIE9TQyBDb250cm9sICovCisJdW5zaWduZWQgaW50CXB3bWNkOwkJLyogMHg0NCAtIFBXTSBDbG9jayBkaXZpZGVyICovCisJdW5zaWduZWQgaW50CXNvY21pc2M7CS8qIDB4NDggLSBTb0MgTWlzYy4gKi8KKwl1bnNpZ25lZCBpbnQJcnN2ZDVbMTNdOwkvKiAweDRDLTB4N0M6IFJlc2VydmVkICovCisJdW5zaWduZWQgaW50CWJzbWNyOwkJLyogMHg4MCAtIEJTTSBDb250cm9ybCAqLworCXVuc2lnbmVkIGludAlic21zdDsJCS8qIDB4ODQgLSBCU00gU3RhdHVzICovCisJdW5zaWduZWQgaW50CXdlczsJCS8qIDB4ODggLSBXYWtldXAgRXZlbnQgU2Vuc2l0aXZpdHkqLworCXVuc2lnbmVkIGludAl3ZXN0OwkJLyogMHg4QyAtIFdha2V1cCBFdmVudCBTdGF0dXMgKi8KKwl1bnNpZ25lZCBpbnQJcnN0dGltaW5nOwkvKiAweDkwIC0gUmVzZXQgVGltaW5nICAqLworCXVuc2lnbmVkIGludAlpbnRyX3N0OwkvKiAweDk0IC0gUENVIEludGVycnVwdCBTdGF0dXMgKi8KKwl1bnNpZ25lZCBpbnQJcnN2ZDZbMl07CS8qIDB4OTgtMHg5QzogUmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgcGNzCXBjczE7CQkvKiAweEEwLTB4QjA6IFBDUzEgKGNsb2NrIHNjYWxpbmcpICovCisJdW5zaWduZWQgaW50CXBjc3JzdmQxWzNdOwkvKiAweEI0LTB4QkM6IFJlc2VydmVkICovCisJc3RydWN0IHBjcwlwY3MyOwkJLyogMHhDMC0weEQwOiBQQ1MyIChBSEIgY2xvY2sgZ2F0aW5nKSAqLworCXVuc2lnbmVkIGludAlwY3Nyc3ZkMlszXTsJLyogMHhENC0weERDOiBSZXNlcnZlZCAqLworCXN0cnVjdCBwY3MJcGNzMzsJCS8qIDB4RTAtMHhGMDogUENTMyAoQVBCIGNsb2NrIGdhdGluZykgKi8KKwl1bnNpZ25lZCBpbnQJcGNzcnN2ZDNbM107CS8qIDB4RjQtMHhGQzogUmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgcGNzCXBjczQ7CQkvKiAweDEwMC0weDExMDogUENTNCBtYWluIFBMTCBzY2FsaW5nICovCisJdW5zaWduZWQgaW50CXBjc3JzdmQ0WzNdOwkvKiAweDExNC0weDExQzogUmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgcGNzCXBjczU7CQkvKiAweDEyMC0weDEzMDogUENTNSBQQ0kgUExMIHNjYWxpbmcgKi8KKwl1bnNpZ25lZCBpbnQJcGNzcnN2ZDVbM107CS8qIDB4MTM0LTB4MTNDOiBSZXNlcnZlZCAqLworCXN0cnVjdCBwY3MJcGNzNjsJCS8qIDB4MTQwLTB4MTUwOiBQQ1M2IEFDOTcgUExMIHNjYWxpbmcgKi8KKwl1bnNpZ25lZCBpbnQJcGNzcnN2ZDZbM107CS8qIDB4MTU0LTB4MTVDOiBSZXNlcnZlZCAqLworCXN0cnVjdCBwY3MJcGNzNzsJCS8qIDB4MTYwLTB4MTcwOiBQQ1M3IEdNQUMgUExMIHNjYWxpbmcgKi8KKwl1bnNpZ25lZCBpbnQJcGNzcnN2ZDdbM107CS8qIDB4MTc0LTB4MTdDOiBSZXNlcnZlZCAqLworCXN0cnVjdCBwY3MJcGNzODsJCS8qIDB4MTgwLTB4MTkwOiBQQ1M4IHZvbHRhZ2Ugc2NhbGluZyAqLworCXVuc2lnbmVkIGludAlwY3Nyc3ZkOFszXTsJLyogMHgxOTQtMHgxOUM6IFJlc2VydmVkICovCisJc3RydWN0IHBjcwlwY3M5OwkJLyogMHgxQTAtMHgxQjA6IFBDUzkgcG93ZXIgY29udHJvbCAqLworCXVuc2lnbmVkIGludAlwY3Nyc3ZkOVs5M107CS8qIDB4MUI0LTB4M0ZDOiBSZXNlcnZlZCAqLworCXVuc2lnbmVkIGludAlwbXNwZG1bNDBdOwkvKiAweDQwMC0weDRmQzogUG93ZXIgTWFuYWdlcgorCQkJCQkJCVNjcmF0Y2ggUGFkIE1lbW9yeSAwICovCit9OworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogUENVIFJldmlzaW9uIFJlZ2lzdGVyIChybykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfUkVWX05VTUJFUl9QQ1MoeCkJKCgoeCkgPj4gMCkgJiAweGZmKQorI2RlZmluZSBBTkRFU19QQ1VfUkVWX1ZFUih4KQkJKCgoeCkgPj4gMTYpICYgMHhmZmZmKQorCisvKgorICogU2NyYXRjaCBQYWQgSW5mbyBSZWdpc3RlciAocm8pCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1NQSU5GT19TSVpFKHgpCSgoKHgpID4+IDApICYgMHhmZikKKyNkZWZpbmUgQU5ERVNfUENVX1NQSU5GT19PRkZTRVQoeCkJKCgoeCkgPj4gOCkgJiAweGYpCisKKy8qCisgKiBTb0MgSUQgUmVnaXN0ZXIgKHJvKQorICovCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfSURfVkVSX01JTk9SKHgpCSgoKHgpID4+IDApICYgMHhmKQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0lEX1ZFUl9NQUpPUih4KQkoKCh4KSA+PiA0KSAmIDB4ZmZmKQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0lEX0RFVklDRUlEKHgpCSgoKHgpID4+IDE2KSAmIDB4ZmZmZikKKworLyoKKyAqIFNvQyBBSEIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAocm8pCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfQUhCQyh4KQkJKCh4KSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9BUEJSRUcoeCkJCSgoeCkgPDwgMSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfQVBCKHgpCQkoKHgpIDw8IDIpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0RMTTEoeCkJCSgoeCkgPDwgMykKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfU1BJUk9NKHgpCQkoKHgpIDw8IDQpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0REUjJDKHgpCQkoKHgpIDw8IDUpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0REUjJNRU0oeCkJCSgoeCkgPDwgNikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfRE1BQyh4KQkJKCh4KSA8PCA3KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9ETE0yKHgpCQkoKHgpIDw8IDgpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0dQVSh4KQkJKCh4KSA8PCA5KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9HTUFDKHgpCQkoKHgpIDw8IDEyKQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FIQl9JREUoeCkJCSgoeCkgPDwgMTMpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX1VTQk9URyh4KQkJKCh4KSA8PCAxNCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfSU5UQyh4KQkJKCh4KSA8PCAxNSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfTFBDSU8oeCkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX0xQQ1JFRyh4KQkJKCh4KSA8PCAxNykKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfUENJSU8oeCkJCSgoeCkgPDwgMTgpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQUhCX1BDSU1FTSh4KQkJKCh4KSA8PCAxOSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfTDJDQyh4KQkJKCh4KSA8PCAyMCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfQUhCMkFIQlJFRyh4KQkJKCh4KSA8PCAyNykKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfQUhCMkFIQk1FTTAoeCkJKCh4KSA8PCAyOCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfQUhCMkFIQk1FTTEoeCkJKCh4KSA8PCAyOSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfQUhCMkFIQk1FTTIoeCkJKCh4KSA8PCAzMCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BSEJfQUhCMkFIQk1FTTMoeCkJKCh4KSA8PCAzMSkKKworLyoKKyAqIFNvQyBBUEIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAocm8pCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfQ0ZDKHgpCSgoeCkgPDwgMSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfU1NQKHgpCSgoeCkgPDwgMikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfVUFSVDEoeCkJKCh4KSA8PCAzKQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FQQl9TREMoeCkJKCh4KSA8PCA1KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FQQl9BQzk3STJTKHgpCSgoeCkgPDwgNikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfVUFSVDIoeCkJKCh4KSA8PCA4KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FQQl9QQ1UoeCkJKCh4KSA8PCAxNikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfVE1SKHgpCSgoeCkgPDwgMTcpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NfQVBCX1dEVCh4KQkoKHgpIDw8IDE4KQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FQQl9SVEMoeCkJKCh4KSA8PCAxOSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfR1BJTyh4KQkoKHgpIDw8IDIwKQorI2RlZmluZSBBTkRFU19QQ1VfU09DX0FQQl9JMkMoeCkJKCh4KSA8PCAyMikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ19BUEJfUFdNKHgpCSgoeCkgPDwgMjMpCisKKy8qCisgKiBEcml2aW5nIENhcGFiaWxpdHkgYW5kIFNsZXcgUmF0ZSBDb250cm9sIFJlZ2lzdGVyIDAgKHJ3KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IwX1RSSUFIQih4KQkoKCh4KSAmIDB4MWYpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IwX0xQQyh4KQkoKCh4KSAmIDB4ZikgPDwgOCkKKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjBfVUxQSSh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IwX0dNQUMoeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBBTkRFU19QQ1VfRENTUkNSMF9HUFUoeCkJKCgoeCkgJiAweGYpIDw8IDIwKQorCisvKgorICogRHJpdmluZyBDYXBhYmlsaXR5IGFuZCBTbGV3IFJhdGUgQ29udHJvbCBSZWdpc3RlciAxIChydykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfRENTUkNSMV9JMkMoeCkJKCgoeCkgJiAweGYpIDw8IDApCisKKy8qCisgKiBEcml2aW5nIENhcGFiaWxpdHkgYW5kIFNsZXcgUmF0ZSBDb250cm9sIFJlZ2lzdGVyIDIgKHJ3KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IyX1VBUlQxKHgpCSgoKHgpICYgMHhmKSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfRENTUkNSMl9VQVJUMih4KQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjJfQUM5Nyh4KQkoKCh4KSAmIDB4ZikgPDwgOCkKKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjJfU1BJKHgpCSgoKHgpICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjJfU0QoeCkJCSgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjJfQ0ZDKHgpCSgoKHgpICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgQU5ERVNfUENVX0RDU1JDUjJfR1BJTyh4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIEFOREVTX1BDVV9EQ1NSQ1IyX1BDVSh4KQkoKCh4KSAmIDB4ZikgPDwgMjgpCisKKy8qCisgKiBNdWx0aS1mdW5jdGlvbiBQb3J0IFNldHRpbmcgUmVnaXN0ZXIgMCAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMF9QQ0lNT0RFKHgpCQkoKHgpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjBfSURFTU9ERSh4KQkJKCh4KSA8PCAxKQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IwX01JTklfVEMwMSh4KQkJKCh4KSA8PCAyKQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IwX0FIQl9ERUJVRyh4KQkJKCh4KSA8PCAzKQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IwX0FIQl9UQVJHRVQoeCkJCSgoeCkgPDwgNCkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMF9ERUZBVUxUX0lWQih4KQkJKCgoeCkgJiAweDcpIDw8IDI4KQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IwX0RFRkFVTFRfRU5ESUFOKHgpCSgoeCkgPDwgMzEpCisKKy8qCisgKiBNdWx0aS1mdW5jdGlvbiBQb3J0IFNldHRpbmcgUmVnaXN0ZXIgMSAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9TVVNQRU5EKHgpCQkoKHgpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfUFdNMCh4KQkJKCh4KSA8PCAxKQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX1BXTTEoeCkJCSgoeCkgPDwgMikKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9BQzk3Q0xLT1VUKHgpCQkoKHgpIDw8IDMpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfUFdSRU4oeCkJCSgoeCkgPDwgNCkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9QTUUoeCkJCQkoKHgpIDw8IDUpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfSTJDKHgpCQkJKCh4KSA8PCA2KQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX1VBUlQxKHgpCQkoKHgpIDw8IDcpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfVUFSVDIoeCkJCSgoeCkgPDwgOCkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9TUEkoeCkJCQkoKHgpIDw8IDkpCisjZGVmaW5lIEFOREVTX1BDVV9NRlBTUjFfU0QoeCkJCQkoKHgpIDw8IDEwKQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX0dQVVBMTFNSQyh4KQkJKCh4KSA8PCAyNykKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9EVk9NT0RFKHgpCQkoKHgpIDw8IDI4KQorI2RlZmluZSBBTkRFU19QQ1VfTUZQU1IxX0hTTVBfRkFTVF9SRVEoeCkJKCh4KSA8PCAyOSkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9BSEJfRkFTVF9SRVEoeCkJKCh4KSA8PCAzMCkKKyNkZWZpbmUgQU5ERVNfUENVX01GUFNSMV9QTVVSX0VYVF9JTlQoeCkJKCh4KSA8PCAzMSkKKworLyoKKyAqIERNQSBFbmdpbmUgU2VsZWN0aW9uIFJlZ2lzdGVyIChydykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfRE1BRVNfQUM5N1JYKHgpCQkoKHgpIDw8IDIpCisjZGVmaW5lIEFOREVTX1BDVV9ETUFFU19BQzk3VFgoeCkJCSgoeCkgPDwgMykKKyNkZWZpbmUgQU5ERVNfUENVX0RNQUVTX1VBUlQxUlgoeCkJCSgoeCkgPDwgNCkKKyNkZWZpbmUgQU5ERVNfUENVX0RNQUVTX1VBUlQxVFgoeCkJCSgoeCkgPDwgNSkKKyNkZWZpbmUgQU5ERVNfUENVX0RNQUVTX1VBUlQyUlgoeCkJCSgoeCkgPDwgNikKKyNkZWZpbmUgQU5ERVNfUENVX0RNQUVTX1VBUlQyVFgoeCkJCSgoeCkgPDwgNykKKyNkZWZpbmUgQU5ERVNfUENVX0RNQUVTX1NERE1BKHgpCQkoKHgpIDw8IDgpCisjZGVmaW5lIEFOREVTX1BDVV9ETUFFU19DRkNETUEoeCkJCSgoeCkgPDwgOSkKKworLyoKKyAqIE9TQyBDb250cm9sIFJlZ2lzdGVyIChydykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfT1NDQ19PU0NIX09GRih4KQkoKHgpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9PU0NDX09TQ0hfU1RBQkxFKHgpCSgoeCkgPDwgMSkKKyNkZWZpbmUgQU5ERVNfUENVX09TQ0NfT1NDSF9UUkkoeCkJKCh4KSA8PCAyKQorI2RlZmluZSBBTkRFU19QQ1VfT1NDQ19PU0NIX1JBTkdFKHgpCSgoKHgpICYgMHgzKSA8PCA0KQorI2RlZmluZSBBTkRFU19QQ1VfT1NDQ19PU0NIMl9SQU5HRSh4KQkoKCh4KSAmIDB4MykgPDwgNikKKyNkZWZpbmUgQU5ERVNfUENVX09TQ0NfT1NDSDNfUkFOR0UoeCkJKCgoeCkgJiAweDMpIDw8IDgpCisKKy8qCisgKiBQV00gQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1BXTUNEX1BXTURJVih4KQkoKCh4KSAmIDB4ZikgPDwgMCkKKworLyoKKyAqIFNvQyBNaXNjLiBSZWdpc3RlciAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUlNDUFVBKHgpCQkoKHgpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1JTQ1BVQih4KQkJKCh4KSA8PCAxKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19SU1BDSSh4KQkJKCh4KSA8PCAyKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19VU0JXQUtFKHgpCQkoKHgpIDw8IDMpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX0VYTE1fV0FJVEEoeCkJCSgoKHgpICYgMHgzKSA8PCA0KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19FWExNX1dBSVRCKHgpCQkoKCh4KSAmIDB4MykgPDwgNikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfRERSUExMX0JZUEFTUyh4KQkoKCh4KSA8PCA4KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ18zMDBNSFpTRUwoeCkJCSgoKHgpIDw8IDkpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX0REUkRMTF9TUlNUKHgpCSgoKHgpIDw8IDEwKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19ERFJERFFfVEVTVCh4KQkoKCh4KSA8PCAxMSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfRERSRExMX1RFU1QoeCkJKCgoeCkgPDwgMTIpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX0dQVVBMTF9CWVBBU1MoeCkJKCgoeCkgPDwgMTMpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX0VOQ1BVQSh4KQkJKCgoeCkgPDwgMTQpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX0VOQ1BVQih4KQkJKCgoeCkgPDwgMTUpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fUFdCVE4oeCkJCSgoKHgpIDw8IDE2KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19QV09OX0dQSU8xKHgpCQkoKCh4KSA8PCAxNykKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUFdPTl9HUElPMih4KQkJKCgoeCkgPDwgMTgpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fR1BJTzMoeCkJCSgoKHgpIDw8IDE5KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19QV09OX0dQSU80KHgpCQkoKCh4KSA8PCAyMCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUFdPTl9HUElPNSh4KQkJKCgoeCkgPDwgMjEpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fV09MKHgpCQkoKCh4KSA8PCAyMikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUFdPTl9SVEMoeCkJCSgoKHgpIDw8IDIzKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19QV09OX1JUQ0FMTSh4KQkoKCh4KSA8PCAyNCkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUFdPTl9YREJHSU4oeCkJKCgoeCkgPDwgMjUpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX1BXT05fUE1FKHgpCQkoKCh4KSA8PCAyNikKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfUFdPTl9QV0ZBSUwoeCkJKCgoeCkgPDwgMjcpCisjZGVmaW5lIEFOREVTX1BDVV9TT0NNSVNDX0NQVUFfU1JTVEVEKHgpCSgoKHgpIDw8IDI4KQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19DUFVCX1NSU1RFRCh4KQkoKCh4KSA8PCAyOSkKKyNkZWZpbmUgQU5ERVNfUENVX1NPQ01JU0NfV0RfUkVTRVQoeCkJCSgoKHgpIDw8IDMwKQorI2RlZmluZSBBTkRFU19QQ1VfU09DTUlTQ19IV19SRVNFVCh4KQkJKCgoeCkgPDwgMzEpCisKKy8qCisgKiBCU00gQ29udHJvbCBSZWdpc3RlciAocncpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX0JTTUNSX0xJTkswKHgpCSgoKHgpICYgMHhmKSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfQlNNQ1JfTElOSzEoeCkJKCgoeCkgJiAweGYpIDw8IDQpCisjZGVmaW5lIEFOREVTX1BDVV9CU01DUl9TWU5DU1JDKHgpCSgoKHgpICYgMHhmKSA8PCAyNCkKKyNkZWZpbmUgQU5ERVNfUENVX0JTTUNSX0NNRCh4KQkJKCgoeCkgJiAweDcpIDw8IDI4KQorI2RlZmluZSBBTkRFU19QQ1VfQlNNQ1JfSUUoeCkJCSgoeCkgPDwgMzEpCisKKy8qCisgKiBCU00gU3RhdHVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX0JTTVNSX0NJMCh4KQkJKCgoeCkgJiAweGYpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9CU01TUl9DSTEoeCkJCSgoKHgpICYgMHhmKSA8PCA0KQorI2RlZmluZSBBTkRFU19QQ1VfQlNNU1JfU1lOQ1NSQyh4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIEFOREVTX1BDVV9CU01TUl9CU01TVCh4KQkoKCh4KSAmIDB4ZikgPDwgMjgpCisKKy8qCisgKiBXYWtldXAgRXZlbnQgU2Vuc2l0aXZpdHkgUmVnaXN0ZXIgKHJ3KQorICovCisjZGVmaW5lIEFOREVTX1BDVV9XRVNSX1BPTE9SKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IDApCisKKy8qCisgKiBXYWtldXAgRXZlbnQgU3RhdHVzIFJlZ2lzdGVyIChybykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfV0VTVF9TSUcoeCkJCSgoKHgpICYgMHhmZikgPDwgMCkKKworLyoKKyAqIFJlc2V0IFRpbWluZyBSZWdpc3RlcgorICovCisjZGVmaW5lIEFOREVTX1BDVV9SU1RUSU1JTkdfUkcwKHgpCSgoKHgpICYgMHhmZikgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX1JTVFRJTUlOR19SRzEoeCkJKCgoeCkgJiAweGZmKSA8PCA4KQorI2RlZmluZSBBTkRFU19QQ1VfUlNUVElNSU5HX1JHMih4KQkoKCh4KSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBBTkRFU19QQ1VfUlNUVElNSU5HX1JHMyh4KQkoKCh4KSAmIDB4ZmYpIDw8IDI0KQorCisvKgorICogUENVIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfSU5UUl9TVF9CU00oeCkJKCh4KSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfSU5UUl9TVF9QQ1MxKHgpCSgoeCkgPDwgMSkKKyNkZWZpbmUgQU5ERVNfUENVX0lOVFJfU1RfUENTMih4KQkoKHgpIDw8IDIpCisjZGVmaW5lIEFOREVTX1BDVV9JTlRSX1NUX1BDUzMoeCkJKCh4KSA8PCAzKQorI2RlZmluZSBBTkRFU19QQ1VfSU5UUl9TVF9QQ1M0KHgpCSgoeCkgPDwgNCkKKyNkZWZpbmUgQU5ERVNfUENVX0lOVFJfU1RfUENTNSh4KQkoKHgpIDw8IDUpCisjZGVmaW5lIEFOREVTX1BDVV9JTlRSX1NUX1BDUzYoeCkJKCh4KSA8PCA2KQorI2RlZmluZSBBTkRFU19QQ1VfSU5UUl9TVF9QQ1M3KHgpCSgoeCkgPDwgNykKKyNkZWZpbmUgQU5ERVNfUENVX0lOVFJfU1RfUENTOCh4KQkoKHgpIDw8IDgpCisjZGVmaW5lIEFOREVTX1BDVV9JTlRSX1NUX1BDUzkoeCkJKCh4KSA8PCA5KQorCisvKgorICogUENTeCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfQ1JfV0FLRVVQX0VOKHgpCSgoKHgpICYgMHhmZikgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfQ1JfTFcoeCkJCSgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfQ1JfTFMoeCkJCSgoKHgpICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfQ1JfVFlQRSh4KQkoKCh4KSA+PiAyOCkgJiAweDcpCS8qIChybykgKi8KKworLyoKKyAqIFBDU3ggUGFyYW1ldGVyIFJlZ2lzdGVyIChydykKKyAqLworI2RlZmluZSBBTkRFU19QQ1VfUENTWF9QQVJNX05FWFQoeCkJKCgoeCkgJiAweGZmZmZmZikgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfUEFSTV9TWU5DU1JDKHgpCSgoKHgpICYgMHhmKSA8PCAyNCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfUEFSTV9QQ1NDTUQoeCkJKCgoeCkgJiAweDcpIDw8IDI4KQorI2RlZmluZSBBTkRFU19QQ1VfUENTWF9QQVJNX0lFKHgpCSgoKHgpIDw8IDMxKQorCisvKgorICogUENTeCBTdGF0dXMgUmVnaXN0ZXIgMQorICovCisjZGVmaW5lIEFOREVTX1BDVV9QQ1NYX1NUQVQxX0VSUk5PKHgpCSgoKHgpICYgMHhmKSA8PCAwKQorI2RlZmluZSBBTkRFU19QQ1VfUENTWF9TVEFUMV9TVCh4KQkoKCh4KSAmIDB4NykgPDwgMjgpCisKKy8qCisgKiBQQ1N4IFN0YXR1cyBSZWdpc3RlciAyCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfU1RBVDJfQ1JOVFBBUk0oeCkJKCgoeCkgJiAweGZmZmZmZikgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDU1hfU1RBVDJfU1lOQ1NSQyh4KQkJKCgoeCkgJiAweGYpIDw8IDI0KQorCisvKgorICogUENTeCBQREQgUmVnaXN0ZXIKKyAqIFRoaXMgaXMgcmVzZXJ2ZWQgZm9yIFBDUygxLTcpCisgKi8KKyNkZWZpbmUgQU5ERVNfUENVX1BDUzhfUEREXzFCWVRFKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M4X1BERF8yQllURSh4KQkJKCgoeCkgJiAweGZmKSA8PCA4KQorI2RlZmluZSBBTkRFU19QQ1VfUENTOF9QRERfM0JZVEUoeCkJCSgoKHgpICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M4X1BERF80QllURSh4KQkJKCgoeCkgJiAweGZmKSA8PCAyNCkKKworI2RlZmluZSBBTkRFU19QQ1VfUENTOV9QRERfVElNRTEoeCkJCSgoKHgpICYgMHgzZikgPDwgMCkKKyNkZWZpbmUgQU5ERVNfUENVX1BDUzlfUEREX1RJTUUyKHgpCQkoKCh4KSAmIDB4M2YpIDw8IDYpCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M5X1BERF9USU1FMyh4KQkJKCgoeCkgJiAweDNmKSA8PCAxMikKKyNkZWZpbmUgQU5ERVNfUENVX1BDUzlfUEREX1RJTUU0KHgpCQkoKCh4KSAmIDB4M2YpIDw8IDE4KQorI2RlZmluZSBBTkRFU19QQ1VfUENTOV9QRERfVElDS1RZUEUoeCkJCSgoeCkgPDwgMjQpCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M5X1BERF9HUFVfU1JTVCh4KQkJKCh4KSA8PCAyNykKKyNkZWZpbmUgQU5ERVNfUENVX1BDUzlfUEREX1BXT0ZGVElNRSh4KQkJKCgoeCkgJiAweDMpIDw8IDI4KQorI2RlZmluZSBBTkRFU19QQ1VfUENTOV9QRERfU1VTMkRSQU0oeCkJCSgoeCkgPDwgMzApCisjZGVmaW5lIEFOREVTX1BDVV9QQ1M5X1BERF9DTFJQV09GRl9GTEFHKHgpCSgoeCkgPDwgMzEpCisKKyNlbmRpZgkvKiBfX0FOREVTX1BDVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FwaV9wdWJsaWMuaCBiL2luY2x1ZGUvYXBpX3B1YmxpYy5oCmluZGV4IDU5NDBkODEuLjQ0MjBjOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXBpX3B1YmxpYy5oCisrKyBiL2luY2x1ZGUvYXBpX3B1YmxpYy5oCkBAIC05MCw2ICs5MCw5IEBACiAJQVBJX0VOVl9FTlVNLAogCUFQSV9FTlZfR0VULAogCUFQSV9FTlZfU0VULAorCUFQSV9ESVNQTEFZX0dFVF9JTkZPLAorCUFQSV9ESVNQTEFZX0RSQVdfQklUTUFQLAorCUFQSV9ESVNQTEFZX0NMRUFSLAogCUFQSV9NQVhDQUxMCiB9OwogCkBAIC0xNTIsNCArMTU1LDE3IEBACiAJaW50CXN0YXRlOwogfTsKIAorI2RlZmluZSBESVNQTEFZX1RZUEVfTENECTB4MDAwMQorI2RlZmluZSBESVNQTEFZX1RZUEVfVklERU8JMHgwMDAyCisKK3N0cnVjdCBkaXNwbGF5X2luZm8geworCWludCB0eXBlOworCS8qIHNjcmVlbiBzaXplIGluIHBpeGVscyAqLworCWludCBwaXhlbF93aWR0aDsKKwlpbnQgcGl4ZWxfaGVpZ2h0OworCS8qIHNjcmVlbiBzaXplIGluIHJvd3MgYW5kIGNvbHVtbnMgb2YgdGV4dCAqLworCWludCBzY3JlZW5fcm93czsKKwlpbnQgc2NyZWVuX2NvbHM7Cit9OworCiAjZW5kaWYgLyogX0FQSV9QVUJMSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlnX3BoeWxpYl9hbGxfZHJpdmVycy5oIGIvaW5jbHVkZS9jb25maWdfcGh5bGliX2FsbF9kcml2ZXJzLmgKaW5kZXggOTAzYzdhNy4uMWRiN2NlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdfcGh5bGliX2FsbF9kcml2ZXJzLmgKKysrIGIvaW5jbHVkZS9jb25maWdfcGh5bGliX2FsbF9kcml2ZXJzLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgQ09ORklHX1BIWV9SRUFMVEVLCiAjZGVmaW5lIENPTkZJR19QSFlfTkFUU0VNSQogI2RlZmluZSBDT05GSUdfUEhZX0xYVAorI2RlZmluZSBDT05GSUdfUEhZX0FUSEVST1MKIAogI2lmZGVmIENPTkZJR19QSFlMSUJfMTBHCiAjZGVmaW5lIENPTkZJR19QSFlfVEVSQU5FVElDUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1MzZEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1MzZEUy5oCmluZGV4IGQ0ZTNlZjUuLjE2ZGI5OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTM2RFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODUzNkRTLmgKQEAgLTEzMSw3ICsxMzEsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JCQVIJCTB4ZmZlMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSX1BIWVNfTE9XCUNPTkZJR19TWVNfQ0NTUkJBUgogCi0jaWYgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9OQU5EKSAmJiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisjaWYgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUl9ET19OT1RfUkVMT0NBVEUKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDhDRFMuaAppbmRleCBhOTlmOGQ1Li4xYTZiYTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ4Q0RTLmgKQEAgLTQ2NCw2ICs0NjQsOCBAQAogI2RlZmluZSBDT05GSUdfVFNFQzRfTkFNRQkiZVRTRUMzIgogI3VuZGVmIENPTkZJR19NUEM4NVhYX0ZFQwogCisjZGVmaW5lIENPTkZJR19QSFlfTUFSVkVMTAorCiAjZGVmaW5lIFRTRUMxX1BIWV9BRERSCQkwCiAjZGVmaW5lIFRTRUMyX1BIWV9BRERSCQkxCiAjZGVmaW5lIFRTRUMzX1BIWV9BRERSCQkyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OU1EUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NjlNRFMuaAppbmRleCAxOWQzMjcxLi5hYjI3Yjk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OU1EUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTY5TURTLmgKQEAgLTEwOCw3ICsxMDgsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JCQVIJCTB4ZTAwMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSX1BIWVNfTE9XCUNPTkZJR19TWVNfQ0NTUkJBUgogCi0jaWYgZGVmaW5lZChDT05GSUdfUkFNQk9PVF9OQU5EKSAmJiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisjaWYgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUl9ET19OT1RfUkVMT0NBVEUKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU3MkRTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU3MkRTLmgKaW5kZXggZmZlZThmYy4uZDc5MTBlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NzJEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTcyRFMuaApAQCAtMTE1LDcgKzExNSw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUkJBUgkJMHhmZmUwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JCQVJfUEhZU19MT1cJQ09ORklHX1NZU19DQ1NSQkFSCiAKLSNpZiBkZWZpbmVkKENPTkZJR19SQU1CT09UX05BTkQpICYmICFkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKKyNpZiBkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSX0RPX05PVF9SRUxPQ0FURQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QMTAyMkRTLmggYi9pbmNsdWRlL2NvbmZpZ3MvUDEwMjJEUy5oCmluZGV4IDAwNzcwNjAuLjExNThmZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QMTAyMkRTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1AxMDIyRFMuaApAQCAtMTczLDcgKzE3Myw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKIAogI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoNTEyICogMTAyNCkKLSNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoNiAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSgxMCAqIDEwMjQgKiAxMDI0KQogCiAvKgogICogU2VyaWFsIFBvcnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QMV9QMl9SREIuaCBiL2luY2x1ZGUvY29uZmlncy9QMV9QMl9SREIuaAppbmRleCA4ODNkNDRlLi4wMGZhNzRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUDFfUDJfUkRCLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1AxX1AyX1JEQi5oCkBAIC0xNTEsNyArMTUxLDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSQkFSCQkweGZmZTAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfQ0NTUkJBUl9QSFlTX0xPVwlDT05GSUdfU1lTX0NDU1JCQVIKIAotI2lmIGRlZmluZWQoQ09ORklHX1JBTUJPT1RfTkFORCkgJiYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQorI2lmIGRlZmluZWQoQ09ORklHX05BTkRfU1BMKQogI2RlZmluZSBDT05GSUdfU1lTX0NDU1JfRE9fTk9UX1JFTE9DQVRFCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1ZDTUE5LmggYi9pbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaAppbmRleCA4YjgxMTNkLi5hMzcwYzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaApAQCAtMjksNiArMjksOSBAQAogI2lmbmRlZiBfX0NPTkZJR19ICiAjZGVmaW5lIF9fQ09ORklHX0gKIAorCisjZGVmaW5lIE1BQ0hfVFlQRV9NUExfVkNNQTkJMjI3CisKIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICogKGVhc3kgdG8gY2hhbmdlKQpAQCAtMzcsNiArNDAsNyBAQAogI2RlZmluZSBDT05GSUdfUzNDMjRYMAkJLyogaW4gYSBTQU1TVU5HIFMzQzI0eDAtdHlwZSBTb0MgKi8KICNkZWZpbmUgQ09ORklHX1MzQzI0MTAJCS8qIHNwZWNpZmljYWxseSBhIFNBTVNVTkcgUzNDMjQxMCBTb0MgKi8KICNkZWZpbmUgQ09ORklHX1ZDTUE5CQkvKiBvbiBhIE1QTCBWQ01BOSBCb2FyZCAgKi8KKyNkZWZpbmUgQ09ORklHX01BQ0hfVFlQRQlNQUNIX1RZUEVfTVBMX1ZDTUE5IC8qIE1hY2hpbmUgdHlwZSAqLwogCiAjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCTB4MAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYWRwLWFnMTAxcC5oIGIvaW5jbHVkZS9jb25maWdzL2FkcC1hZzEwMXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmM3MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2FkcC1hZzEwMXAuaApAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbmRlcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgKiBTaGF3biBMaW4sIEFuZGVzIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gPG5vYnVoaXJvQGFuZGVzdGVjaC5jb20+CisgKiBNYWNwYXVsIExpbiwgQW5kZXMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiA8bWFjcGF1bEBhbmRlc3RlY2guY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9hZzEwMS5oPgorCisvKgorICogQ1BVIGFuZCBCb2FyZCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQURQX0FHMTAxUAorCisjZGVmaW5lIENPTkZJR19VU0VfSU5URVJSVVBUCisKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisjaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKyNkZWZpbmUgQ09ORklHX01FTV9SRU1BUAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCTB4MDMyMDAwMDAKKyNlbHNlCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCTB4MDAwMDAwMDAKKyNlbmRpZgorCisvKgorICogVGltZXIKKyAqLworCisvKgorICogQWNjb3JkaW5nIHRvIHRoZSBkaXNjdXNzaW9uIGluIHUtYm9vdCBtYWlsaW5nIGxpc3QgYmVmb3JlLAorICogQ09ORklHX1NZU19IWiBhdCAxMDAwIGlzIG1hbmRhdG9yeS4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0haCQkxMDAwCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMzkwNjI1MDAKKyNkZWZpbmUgVkVSU0lPTl9DTE9DSwkJQ09ORklHX1NZU19DTEtfRlJFUQorCisvKgorICogVXNlIEV4dGVybmVsIENMT0NLIG9yIFBDTEsKKyAqLworI3VuZGVmIENPTkZJR19GVFJUQzAxMF9FWFRDTEsKKworI2lmbmRlZiBDT05GSUdfRlRSVEMwMTBfRVhUQ0xLCisjZGVmaW5lIENPTkZJR19GVFJUQzAxMF9QQ0xLCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19GVFJUQzAxMF9FWFRDTEsKKyNkZWZpbmUgVElNRVJfQ0xPQ0sJMzI3NjgJCQkvKiBDT05GSUdfRlRSVEMwMTBfRVhUQ0xLICovCisjZWxzZQorI2RlZmluZSBUSU1FUl9DTE9DSwlDT05GSUdfU1lTX0haCQkvKiBDT05GSUdfRlRSVEMwMTBfUENMSyAqLworI2VuZGlmCisKKyNkZWZpbmUgVElNRVJfTE9BRF9WQUwJMHhmZmZmZmZmZgorCisvKgorICogUmVhbCBUaW1lIENsb2NrCisgKi8KKyNkZWZpbmUgQ09ORklHX1JUQ19GVFJUQzAxMAorCisvKgorICogUmVhbCBUaW1lIENsb2NrIERpdmlkZXIKKyAqIFJUQ19ESVZfQ09VTlQJCQkoT1NDX0NMSy9PU0NfNU1IWikKKyAqLworI2RlZmluZSBPU0NfNU1IWgkJCSg1KjEwMDAwMDApCisjZGVmaW5lIE9TQ19DTEsJCQkJKDQqT1NDXzVNSFopCisjZGVmaW5lIFJUQ19ESVZfQ09VTlQJCQkoMC41KQkvKiBXaHk/PyAqLworCisvKgorICogU2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisKKy8qIEZUVUFSVCBpcyBhIGhpZ2ggc3BlZWQgTlMgMTZDNTUwQSBjb21wYXRpYmxlIFVBUlQsIGFkZHI6IDB4OTk2MDAwMDAgKi8KKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMzg0MDAKKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJCTEKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTEJCUNPTkZJR19GVFVBUlQwMTBfMDJfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJLTQKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NMSwkJKCgxODQzMjAwMCAqIDIwKSAvIDI1KQkvKiBBRzEwMVAgKi8KKworLyogdmFsaWQgYmF1ZHJhdGVzICovCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisvKgorICogRXRoZXJuZXQKKyAqLworI2RlZmluZSBDT05GSUdfRlRNQUMxMDAKKworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworLyoKKyAqIFNEIChNTUMpIGNvbnRyb2xsZXIKKyAqLworI2RlZmluZSBDT05GSUdfTU1DCisjZGVmaW5lIENPTkZJR19DTURfTU1DCisjZGVmaW5lIENPTkZJR19HRU5FUklDX01NQworI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgorI2RlZmluZSBDT05GSUdfRlRTREMwMTAKKyNkZWZpbmUgQ09ORklHX0ZUU0RDMDEwX05VTUJFUgkJMQorI2RlZmluZSBDT05GSUdfQ01EX0ZBVAorCisvKgorICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCisgKi8KKyNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KKworI2RlZmluZSBDT05GSUdfQ01EX0NBQ0hFCisjZGVmaW5lIENPTkZJR19DTURfREFURQorI2RlZmluZSBDT05GSUdfQ01EX1BJTkcKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJIk5EUzMyICMgIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKworLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJXAorCShDT05GSUdfU1lTX0NCU0laRSArIHNpemVvZihDT05GSUdfU1lTX1BST01QVCkgKyAxNikKKworLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCTE2CisKKy8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRQorCisvKgorICogU3RhY2sgc2l6ZXMKKyAqCisgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdworICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDEyOCAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICovCisvKiA1MTJrQiBpcyBzdWdnZXN0ZWQsIChDT05GSUdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KSB3YXMgbm90IGVub3VnaCAqLworI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSg1MTIgPDwgMTApCisKKy8qCisgKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CisKKy8qCisgKiBBSEIgQ29udHJvbGxlciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0ZUQUhCQzAyMFMKKworI2lmZGVmIENPTkZJR19GVEFIQkMwMjBTCisjaW5jbHVkZSA8ZmFyYWRheS9mdGFoYmMwMjBzLmg+CisKKy8qIEFkZHJlc3Mgb2YgUEhZU19TRFJBTV8wIGJlZm9yZSBtZW1vcnkgcmVtYXAgaXMgYXQgMHgoMTAwKTAwMDAwICovCisjZGVmaW5lIENPTkZJR19TWVNfRlRBSEJDMDIwU19TTEFWRV9CU1JfQkFTRQkweDEwMAorCisvKgorICogQ09ORklHX1NZU19GVEFIQkMwMjBTX1NMQVZFX0JTUl82OiB0aGlzIGRlZmluZSBpcyB1c2VkIGluIGxvd2xldmVsX2luaXQuUywKKyAqIGhlbmNlIHdlIGNhbm5vdCB1c2UgRlRBSEJDMDIwU19CU1JfU0laRSgyMDQ4KSBzaW5jZSBpdCB3aWxsIHVzZSBmZnMoKSB3cm90ZQorICogaW4gQyBsYW5ndWFnZS4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0ZUQUhCQzAyMFNfU0xBVkVfQlNSXzYgXAorCShGVEFIQkMwMjBTX1NMQVZFX0JTUl9CQVNFKENPTkZJR19TWVNfRlRBSEJDMDIwU19TTEFWRV9CU1JfQkFTRSkgfCBcCisJCQkJCUZUQUhCQzAyMFNfU0xBVkVfQlNSX1NJWkUoMHhiKSkKKyNlbmRpZgorCisvKgorICogV2F0Y2hkb2cKKyAqLworI2RlZmluZSBDT05GSUdfRlRXRFQwMTBfV0FUQ0hET0cKKworLyoKKyAqIFBNVSBQb3dlciBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfUE1VCisjZGVmaW5lIENPTkZJR19GVFBNVTAxMF9QT1dFUgorCisjaWZkZWYgQ09ORklHX0ZUUE1VMDEwX1BPV0VSCisjaW5jbHVkZSA8ZmFyYWRheS9mdHBtdTAxMC5oPgorI2RlZmluZSBDT05GSUdfU1lTX0ZUUE1VMDEwX1BETExDUjBfSENMS09VVERJUwkJMHgwRQorI2RlZmluZSBDT05GSUdfU1lTX0ZUUE1VMDEwX1NEUkFNSFRDCShGVFBNVTAxMF9TRFJBTUhUQ19FQklDVFJMX0RDU1IgIHwgXAorCQkJCQkgRlRQTVUwMTBfU0RSQU1IVENfRUJJREFUQV9EQ1NSICB8IFwKKwkJCQkJIEZUUE1VMDEwX1NEUkFNSFRDX1NEUkFNQ1NfRENTUiAgfCBcCisJCQkJCSBGVFBNVTAxMF9TRFJBTUhUQ19TRFJBTUNUTF9EQ1NSIHwgXAorCQkJCQkgRlRQTVUwMTBfU0RSQU1IVENfQ0tFX0RDU1IJIHwgXAorCQkJCQkgRlRQTVUwMTBfU0RSQU1IVENfRFFNX0RDU1IJIHwgXAorCQkJCQkgRlRQTVUwMTBfU0RSQU1IVENfU0RDTEtfRENTUikKKyNlbmRpZgorCisvKgorICogU0RSQU0gY29udHJvbGxlciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0ZUU0RNQzAyMQorCisjaWZkZWYgQ09ORklHX0ZUU0RNQzAyMQorI2luY2x1ZGUgPGZhcmFkYXkvZnRzZG1jMDIxLmg+CisKKyNkZWZpbmUgQ09ORklHX1NZU19GVFNETUMwMjFfVFAxCShGVFNETUMwMjFfVFAxX1RSQVMoMikJfAlcCisJCQkJCSBGVFNETUMwMjFfVFAxX1RSUCgxKQl8CVwKKwkJCQkJIEZUU0RNQzAyMV9UUDFfVFJDRCgxKQl8CVwKKwkJCQkJIEZUU0RNQzAyMV9UUDFfVFJGKDMpCXwJXAorCQkJCQkgRlRTRE1DMDIxX1RQMV9UV1IoMSkJfAlcCisJCQkJCSBGVFNETUMwMjFfVFAxX1RDTCgyKSkKKworI2RlZmluZSBDT05GSUdfU1lTX0ZUU0RNQzAyMV9UUDIJKEZUU0RNQzAyMV9UUDJfSU5JX1BSRUMoNCkgfAlcCisJCQkJCSBGVFNETUMwMjFfVFAyX0lOSV9SRUZUKDgpIHwJXAorCQkJCQkgRlRTRE1DMDIxX1RQMl9SRUZfSU5UVigweDE4MCkpCisKKy8qCisgKiBDT05GSUdfU1lTX0ZUU0RNQzAyMV9DUjE6IHRoaXMgZGVmaW5lIGlzIHVzZWQgaW4gbG93bGV2ZWxfaW5pdC5TLAorICogaGVuY2Ugd2UgY2Fubm90IHVzZSBGVFNETUMwMjFfQkFOS19TSVpFKDY0KSBzaW5jZSBpdCB3aWxsIHVzZSBmZnMoKSB3cm90ZSBpbgorICogQyBsYW5ndWFnZS4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0ZUU0RNQzAyMV9DUjEJKEZUU0RNQzAyMV9DUjFfRERXKDIpCSB8CVwKKwkJCQkJIEZUU0RNQzAyMV9DUjFfRFNaKDMpCSB8CVwKKwkJCQkJIEZUU0RNQzAyMV9DUjFfTUJXKDIpCSB8CVwKKwkJCQkJIEZUU0RNQzAyMV9DUjFfQk5LU0laRSg2KSkKKworI2RlZmluZSBDT05GSUdfU1lTX0ZUU0RNQzAyMV9DUjIJKEZUU0RNQzAyMV9DUjJfSVBSRUMJIHwJXAorCQkJCQkgRlRTRE1DMDIxX0NSMl9JUkVGCSB8CVwKKwkJCQkJIEZUU0RNQzAyMV9DUjJfSVNNUikKKworI2RlZmluZSBDT05GSUdfU1lTX0ZUU0RNQzAyMV9CQU5LMF9CQVNFCUNPTkZJR19TWVNfRlRBSEJDMDIwU19TTEFWRV9CU1JfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX0ZUU0RNQzAyMV9CQU5LMF9CU1IJKEZUU0RNQzAyMV9CQU5LX0VOQUJMRQkgfAlcCisJCQkJCSBDT05GSUdfU1lTX0ZUU0RNQzAyMV9CQU5LMF9CQVNFKQorCisjZW5kaWYKKworLyoKKyAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX01FTV9SRU1BUCkgfHwgZGVmaW5lZChDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUKQorI2RlZmluZSBQSFlTX1NEUkFNXzAJCTB4MDAwMDAwMDAJLyogU0RSQU0gQmFuayAjMSAqLworI2lmIGRlZmluZWQoQ09ORklHX01FTV9SRU1BUCkKKyNkZWZpbmUgUEhZU19TRFJBTV8wX0FUX0lOSVQJMHgxMDAwMDAwMAkvKiBTRFJBTSBCYW5rICMxIGJlZm9yZSByZW1hcCovCisjZW5kaWYKKyNlbHNlCS8qICFDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUICYmICFDT05GSUdfTUVNX1JFTUFQICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMAkJMHgxMDAwMDAwMAkvKiBTRFJBTSBCYW5rICMxICovCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCQkvKiB3ZSBoYXZlIDEgYmFuayBvZiBEUkFNICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMF9TSVpFCTB4MDQwMDAwMDAJLyogNjQgTUIgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX0JBU0UJCVBIWVNfU0RSQU1fMAorCisjaWZkZWYgQ09ORklHX01FTV9SRU1BUAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfQUREUgkJKENPTkZJR19TWVNfU0RSQU1fQkFTRSArIDB4QTAwMDAgLSBcCisJCQkJCUdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQorI2Vsc2UKKyNkZWZpbmUgQ09ORklHX1NZU19JTklUX1NQX0FERFIJCShDT05GSUdfU1lTX1NEUkFNX0JBU0UgKyAweDEwMDAgLSBcCisJCQkJCUdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQorI2VuZGlmIC8qIENPTkZJR19NRU1fUkVNQVAgKi8KKworLyoKKyAqIExvYWQgYWRkcmVzcyBhbmQgbWVtb3J5IHRlc3QgYXJlYSBzaG91bGQgYWdyZWUgd2l0aAorICogYXJjaC9uZHMzMi9jb25maWcubWsuIEJlIGNhcmVmdWwgbm90IHRvIG92ZXJ3cml0ZSBVLWJvb3QgaXRzZWxmLgorICovCisjZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkweDMwMDAwMAorCisvKiBtZW10ZXN0IHdvcmtzIG9uIDYzIE1CIGluIERSQU0gKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCVBIWVNfU0RSQU1fMAorI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkoUEhZU19TRFJBTV8wICsgMHgwM0YwMDAwMCkKKworLyoKKyAqIFN0YXRpYyBtZW1vcnkgY29udHJvbGxlciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0ZUU01DMDIwCisKKyNpZmRlZiBDT05GSUdfRlRTTUMwMjAKKyNpbmNsdWRlIDxmYXJhZGF5L2Z0c21jMDIwLmg+CisKKyNkZWZpbmUgQ09ORklHX1NZU19GVFNNQzAyMF9DT05GSUdTCXsJCQlcCisJeyBGVFNNQzAyMF9CQU5LMF9DT05GSUcsIEZUU01DMDIwX0JBTkswX1RJTUlORywgfSwJXAorCXsgRlRTTUMwMjBfQkFOSzFfQ09ORklHLCBGVFNNQzAyMF9CQU5LMV9USU1JTkcsIH0sCVwKK30KKworI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCS8qIEZMQVNIIGlzIG9uIEJBTksgMCAqLworI2RlZmluZSBGVFNNQzAyMF9CQU5LMF9MT1dMVl9DT05GSUcJKEZUU01DMDIwX0JBTktfRU5BQkxFCXwJXAorCQkJCQkgRlRTTUMwMjBfQkFOS19TSVpFXzMyTQl8CVwKKwkJCQkJIEZUU01DMDIwX0JBTktfTUJXXzMyKQorCisjZGVmaW5lIEZUU01DMDIwX0JBTkswX0xPV0xWX1RJTUlORwkoRlRTTUMwMjBfVFBSX1JCRQl8CVwKKwkJCQkJIEZUU01DMDIwX1RQUl9BU1QoMSkJfAlcCisJCQkJCSBGVFNNQzAyMF9UUFJfQ1RXKDEpCXwJXAorCQkJCQkgRlRTTUMwMjBfVFBSX0FUSSgxKQl8CVwKKwkJCQkJIEZUU01DMDIwX1RQUl9BVDIoMSkJfAlcCisJCQkJCSBGVFNNQzAyMF9UUFJfV1RDKDEpCXwJXAorCQkJCQkgRlRTTUMwMjBfVFBSX0FIVCgxKQl8CVwKKwkJCQkJIEZUU01DMDIwX1RQUl9UUk5BKDEpKQorI2VuZGlmCisKKy8qCisgKiBGTEFTSCBvbiBBRFBfQUcxMDFQIGlzIGNvbm5lY3RlZCB0byBCQU5LMAorICogSnVzdCBkaXNhbGJlIHRoZSBvdGhlciBCQU5LIHRvIGF2b2lkIGRldGVjdGlvbiBlcnJvci4KKyAqLworI2RlZmluZSBGVFNNQzAyMF9CQU5LMF9DT05GSUcJKEZUU01DMDIwX0JBTktfRU5BQkxFICAgICAgICAgICAgIHwJXAorCQkJCSBGVFNNQzAyMF9CQU5LX0JBU0UoUEhZU19GTEFTSF8xKSB8CVwKKwkJCQkgRlRTTUMwMjBfQkFOS19TSVpFXzMyTSAgICAgICAgICAgfAlcCisJCQkJIEZUU01DMDIwX0JBTktfTUJXXzMyKQorCisjZGVmaW5lIEZUU01DMDIwX0JBTkswX1RJTUlORwkoRlRTTUMwMjBfVFBSX0FTVCgzKSAgIHwJXAorCQkJCSBGVFNNQzAyMF9UUFJfQ1RXKDMpICAgfAlcCisJCQkJIEZUU01DMDIwX1RQUl9BVEkoMHhmKSB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX0FUMigzKSAgIHwJXAorCQkJCSBGVFNNQzAyMF9UUFJfV1RDKDMpICAgfAlcCisJCQkJIEZUU01DMDIwX1RQUl9BSFQoMykgICB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX1RSTkEoMHhmKSkKKworI2RlZmluZSBGVFNNQzAyMF9CQU5LMV9DT05GSUcJKDB4MDApCisjZGVmaW5lIEZUU01DMDIwX0JBTksxX1RJTUlORwkoMHgwMCkKKyNlbmRpZiAvKiBDT05GSUdfRlRTTUMwMjAgKi8KKworLyoKKyAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KKyAqLworLyogdXNlIENGSSBmcmFtZXdvcmsgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9DRkkKKyNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9EUklWRVIKKworI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0NGSV9XSURUSAlGTEFTSF9DRklfMTZCSVQKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCisKKy8qIHN1cHBvcnQgSkVERUMgKi8KKworLyogRG8gbm90IHVzZSBDT05GSUdfRkxBU0hfQ0ZJX0xFR0FDWSB0byBkZXRlY3Qgb24gYm9hcmQgZmxhc2ggKi8KKyNpZmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisjZGVmaW5lIFBIWVNfRkxBU0hfMQkJCTB4ODA0MDAwMDAJLyogQkFOSyAxICovCisjZWxzZQkvKiAhQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCAqLworI2lmZGVmIENPTkZJR19NRU1fUkVNQVAKKyNkZWZpbmUgUEhZU19GTEFTSF8xCQkJMHg4MDAwMDAwMAkvKiBCQU5LIDAgKi8KKyNlbHNlCisjZGVmaW5lIFBIWVNfRkxBU0hfMQkJCTB4MDAwMDAwMDAJLyogQkFOSyAwICovCisjZW5kaWYJLyogQ09ORklHX01FTV9SRU1BUCAqLworI2VuZGlmCS8qIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UJCVBIWVNfRkxBU0hfMQorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBTktTX0xJU1QJeyBQSFlTX0ZMQVNIXzEsIH0KKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJCVBIWVNfRkxBU0hfMQorCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVE8gZm9yIEZsYXNoIEVyYXNlIChtcykgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUTyBmb3IgRmxhc2ggV3JpdGUgKG1zKSAqLworCisvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworLyoKKyAqIFRoZXJlIGFyZSA0IGJhbmtzIHN1cHBvcnRlZCBmb3IgdGhpcyBDb250cm9sbGVyLAorICogYnV0IHdlIGhhdmUgb25seSAxIGJhbmsgY29ubmVjdGVkIHRvIGZsYXNoIG9uIGJvYXJkCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMQorCisvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyNkZWZpbmUgQ09ORklHX0ZMQVNIX1NFQ1RPUl9TSVpFCSgweDEwMDAwKjIqMikKKyNkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUJCUNPTkZJR19GTEFTSF9TRUNUT1JfU0laRQorI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUCTEyOAorCisvKiBlbnZpcm9ubWVudHMgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9GTEFTSAorI2RlZmluZSBDT05GSUdfRU5WX0FERFIJCQkoQ09ORklHX1NZU19NT05JVE9SX0JBU0UgKyAweDE0MDAwMCkKKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkJODE5MgorI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2NzYjIyNi5oIGIvaW5jbHVkZS9jb25maWdzL2NzYjIyNi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQ0NjliLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY29uZmlncy9jc2IyMjYuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwNiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCi0gKiBSb2JlcnQgU2Nod2ViZWwsIFBlbmd1dHJvbml4LCByLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlLgotICoKLSAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2dlbnQgQ1NCMjI2IGJvYXJkLiBGb3IgZGV0YWlscyBzZWUKLSAqIGh0dHA6Ly93d3cuY29nY29tcC5jb20vY3NiX2NzYjIyNi5odG0KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogaW5jbHVkZS9jb25maWdzL2NzYjIyNi5oIC0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBib2FyZCBzcGVjaWZpYwotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLSNkZWZpbmUgREVCVUcgMQotCi0vKgotICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKLSAqIChlYXN5IHRvIGNoYW5nZSkKLSAqLwotI2RlZmluZSBDT05GSUdfUFhBMjUwCQkxCS8qIFRoaXMgaXMgYW4gUFhBMjUwIENQVSAgICAgICAgICAgICovCi0jZGVmaW5lIENPTkZJR19DU0IyMjYJCTEJLyogb24gYSBDU0IyMjYgYm9hcmQgICAgICAgICAgICAgICAgKi8KLQotI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAgICAgKi8KLQkJCQkJLyogZm9yIHRpbWVyL2NvbnNvbGUvZXRoZXJuZXQgICAgICAgKi8KLQotLyogd2Ugd2lsbCBuZXZlciBlbmFibGUgZGNhY2hlLCBiZWNhdXNlIHdlIGhhdmUgdG8gc2V0dXAgTU1VIGZpcnN0ICovCi0jZGVmaW5lIENPTkZJR19TWVNfRENBQ0hFX09GRgotI2RlZmluZQlDT05GSUdfU1lTX1RFWFRfQkFTRQkweDAKLS8qCi0gKiBIYXJkd2FyZSBkcml2ZXJzCi0gKi8KLQotLyoKLSAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1BYQV9TRVJJQUwKLSNkZWZpbmUgQ09ORklHX0ZGVUFSVAkJMQkvKiB3ZSB1c2UgRkZVQVJUIG9uIENTQjIyNiAgICAgICAgICAqLwotCi0vKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCi0jZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCi0KLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxOTIwMAotI3VuZGVmICBDT05GSUdfTUlTQ19JTklUX1IJCS8qIG5vdCB1c2VkIHlldCAgICAgICAgICAgICAgICAgICAgICovCi0KLQotLyoKLSAqIEJPT1RQIG9wdGlvbnMKLSAqLwotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFCi0jZGVmaW5lIENPTkZJR19CT09UUF9CT09UUEFUSAotI2RlZmluZSBDT05GSUdfQk9PVFBfR0FURVdBWQotI2RlZmluZSBDT05GSUdfQk9PVFBfSE9TVE5BTUUKLQotCi0vKgotICogQ29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KLQotI2RlZmluZSBDT05GSUdfQ01EX0JESQotI2RlZmluZSBDT05GSUdfQ01EX0xPQURCCi0jZGVmaW5lIENPTkZJR19DTURfSU1JCi0jZGVmaW5lIENPTkZJR19DTURfRkxBU0gKLSNkZWZpbmUgQ09ORklHX0NNRF9NRU1PUlkKLSNkZWZpbmUgQ09ORklHX0NNRF9ORVQKLSNkZWZpbmUgQ09ORklHX0NNRF9TQVZFRU5WCi0jZGVmaW5lIENPTkZJR19DTURfUlVOCi0jZGVmaW5lIENPTkZJR19DTURfQVNLRU5WCi0jZGVmaW5lIENPTkZJR19DTURfRUNITwotI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKLSNkZWZpbmUgQ09ORklHX0NNRF9DQUNIRQotCi0KLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUwkJImNvbnNvbGU9dHR5UzAsMTkyMDAgaXA9MTkyLjE2OC4xLjEwLDE5Mi4xNjguMS41LCwyNTUsMjU1LDI1NSwwLGNzYiByb290PS9kZXYvbmZzLCBldGhlcj0wLDB4MDgwMDAwMDAsZXRoMCIKLSNkZWZpbmUgQ09ORklHX0VUSEFERFIJCUZGOkZGOkZGOkZGOkZGOkZGCi0jZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCi0jZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMS41NgotI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMS41Ci0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdG0gMHg0MDAwMCIKLSNkZWZpbmUgQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUwotCi0jZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkxCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKLSNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMTkyMDAJCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCi0jZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCQkvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KLSNlbmRpZgotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0KLS8qCi0gKiBTaXplIG9mIG1hbGxvYygpIHBvb2w7IHRoaXMgbGl2ZXMgYmVsb3cgdGhlIHVwcGVybW9zdCAxMjggS2lCIHdoaWNoIGFyZQotICogdXNlZCBmb3IgdGhlIFJBTSBjb3B5IG9mIHRoZSB1Ym9vdCBjb2RlCi0gKgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEyOCoxMDI0KQotCi0jZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BST01QVAkJInVib290PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTEyOAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQlDT05GSUdfU1lTX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICAgICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4YTA0MDAwMDAgICAgICAvKiBtZW10ZXN0IHdvcmtzIG9uICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5EICAgICAgICAgMHhhMDgwMDAwMCAgICAgIC8qIDQgLi4uIDggTUIgaW4gRFJBTSAgICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIgICAgICAgICAgIDB4YTMwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KLQkJCQkJCS8qIFJTOiB3aGVyZSBpcyB0aGlzIGRvY3VtZW50ZWQ/ICovCi0JCQkJCQkvKiBSUzogaXMgdGhpcyB3aGVyZSBVLUJvb3QgaXMgICovCi0JCQkJCQkvKiBSUzogcmVsb2NhdGVkIHRvIGluIFJBTT8gICAgICAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfSFoJCQkxMDAwCi0JCQkJCQkvKiBSUzogdGhlIG9zY2lsbGF0b3IgaXMgYWN0dWFsbHkgMzY4MDEzMD8/ICovCi0jZGVmaW5lIENPTkZJR19TWVNfQ1BVU1BFRUQgICAgICAgICAgICAweDE0MSAgICAgICAgICAgLyogc2V0IGNvcmUgY2xvY2sgdG8gMjAwLzIwMC8xMDAgTUh6ICovCi0JCQkJCQkvKiAwMTAxMDAwMDAxICovCi0JCQkJCQkvKiAgICAgIF5eXl5eIE1lbW9yeSBTcGVlZCA5OS41MyBNSHogICAgICAgICAqLwotCQkJCQkJLyogICAgXl4gICAgICBSdW4gTW9kZSBTcGVlZCA9IDJ4IE1lbSBTcGVlZCAgKi8KLQkJCQkJCS8qIF5eICAgICAgICAgVHVyYm8gTW9kZSBTcC4gPSAxeCBSdW4gTS4gU3AuICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJMHgxYzAwMAkJLyogMTEyIEtpQiAqLwotCi0JCQkJCQkvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRSAgICAgIHsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KLQotLyoKLSAqIE5ldHdvcmsgY2hpcAotICovCi0jZGVmaW5lIENPTkZJR19DUzg5MDAKLSNkZWZpbmUgQ09ORklHX0NTODkwMF9CVVMzMgotI2RlZmluZSBDT05GSUdfQ1M4OTAwX0JBU0UJMHgwODAwMDAwMAotCi0vKgotICogU3RhY2sgc2l6ZXMKLSAqCi0gKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdwotICovCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkUgICAgICAgICgxMjgqMTAyNCkgICAgICAvKiByZWd1bGFyIHN0YWNrICovCi0jaWZkZWYgIENPTkZJR19VU0VfSVJRCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRICAgICg0KjEwMjQpICAgICAgICAvKiBJUlEgc3RhY2sgKi8KLSNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEgICAgKDQqMTAyNCkgICAgICAgIC8qIEZJUSBzdGFjayAqLwotI2VuZGlmCi0KLS8qCi0gKiBQaHlzaWNhbCBNZW1vcnkgTWFwCi0gKi8KLSNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQkJLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAgICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMQkJMHhhMDAwMDAwMAkvKiBTRFJBTSBCYW5rICMxICAgICAgICAgICAgKi8KLSNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJMHgwMjAwMDAwMAkvKiAzMiBNQiAgICAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4MDAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAgICAgICAgICAgICovCi0jZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJMHgwMjAwMDAwMAkvKiAzMiBNQiAgICAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0RSQU1fQkFTRQkJMHhhMDAwMDAwMAkvKiBSQU0gc3RhcnRzIGhlcmUgICAgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19EUkFNX1NJWkUJCTB4MDIwMDAwMDAKLQotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UgICAgICAgICAgUEhZU19GTEFTSF8xCi0KLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQlQSFlTX1NEUkFNXzEKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1NQX0FERFIJCShHRU5FUkFURURfR0JMX0RBVEFfU0laRSArIFBIWVNfU0RSQU1fMSkKLQotIyBpZiAwCi0vKiBGSVhNRTogc3dpdGNoIHRvIF9kb2N1bWVudGVkXyByZWdpc3RlcnMgKi8KLS8qCi0gKiBHUElPIHNldHRpbmdzCi0gKgotICogR1AxNSA9PSBuQ1MxICAgICAgaXMgMQotICogR1AyNCA9PSBTRlJNICAgICAgaXMgMQotICogR1AyNSA9PSBUWEQgICAgICAgaXMgMQotICogR1AzMyA9PSBuQ1M1ICAgICAgaXMgMQotICogR1AzOSA9PSBGRlRYRCAgICAgaXMgMQotICogR1A0MSA9PSBSVFMgICAgICAgaXMgMQotICogR1A0NyA9PSBUWEQgICAgICAgaXMgMQotICogR1A0OSA9PSBuUFdFICAgICAgaXMgMQotICogR1A2MiA9PSBMRURfQiAgICAgaXMgMQotICogR1A2MyA9PSBURE1fT0UgICAgaXMgMQotICogR1A3OCA9PSBuQ1MyICAgICAgaXMgMQotICogR1A3OSA9PSBuQ1MzICAgICAgaXMgMQotICogR1A4MCA9PSBuQ1M0ICAgICAgaXMgMQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfR1BTUjBfVkFMICAgICAgIDB4MDMwMDgwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMV9WQUwgICAgICAgMHhDMDAyODI4MgotI2RlZmluZSBDT05GSUdfU1lTX0dQU1IyX1ZBTCAgICAgICAweDAwMDFDMDAwCi0KLS8qIEdQMDIgPT0gRE9OX1JTVCAgIGlzIDAKLSAqIEdQMjMgPT0gU0NMSyAgICAgIGlzIDAKLSAqIEdQNDUgPT0gVVNCX0FDVCAgIGlzIDAKLSAqIEdQNjAgPT0gUExMRU4gICAgIGlzIDAKLSAqIEdQNjEgPT0gTEVEX0EgICAgIGlzIDAKLSAqIEdQNzMgPT0gU1dVUERfTEVEIGlzIDAKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0dQQ1IwX1ZBTCAgICAgICAweDAwODAwMDA0Ci0jZGVmaW5lIENPTkZJR19TWVNfR1BDUjFfVkFMICAgICAgIDB4MzAwMDIwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMl9WQUwgICAgICAgMHgwMDAwMDEwMAotCi0vKiBHUDAwID09IERPTl9SRUFEWSBpcyBpbnB1dAotICogR1AwMSA9PSBET05fT0sgICAgaXMgaW5wdXQKLSAqIEdQMDIgPT0gRE9OX1JTVCAgIGlzIG91dHB1dAotICogR1AwMyA9PSBSRVNFVF9JTkQgaXMgaW5wdXQKLSAqIEdQMDcgPT0gUkVTMTEgICAgIGlzIGlucHV0Ci0gKiBHUDA5ID09IFJFUzEyICAgICBpcyBpbnB1dAotICogR1AxMSA9PSBTV1VQREFURSAgaXMgaW5wdXQKLSAqIEdQMTQgPT0gblBPV0VST0sgIGlzIGlucHV0Ci0gKiBHUDE1ID09IG5DUzEgICAgICBpcyBvdXRwdXQKLSAqIEdQMTcgPT0gUkVTMjIgICAgIGlzIGlucHV0Ci0gKiBHUDE4ID09IFJEWSAgICAgICBpcyBpbnB1dAotICogR1AyMyA9PSBTQ0xLICAgICAgaXMgb3V0cHV0Ci0gKiBHUDI0ID09IFNGUk0gICAgICBpcyBvdXRwdXQKLSAqIEdQMjUgPT0gVFhEICAgICAgIGlzIG91dHB1dAotICogR1AyNiA9PSBSWEQgICAgICAgaXMgaW5wdXQKLSAqIEdQMzIgPT0gUkVTMjEgICAgIGlzIGlucHV0Ci0gKiBHUDMzID09IG5DUzUgICAgICBpcyBvdXRwdXQKLSAqIEdQMzQgPT0gRkZSWEQgICAgIGlzIGlucHV0Ci0gKiBHUDM1ID09IENUUyAgICAgICBpcyBpbnB1dAotICogR1AzOSA9PSBGRlRYRCAgICAgaXMgb3V0cHV0Ci0gKiBHUDQxID09IFJUUyAgICAgICBpcyBvdXRwdXQKLSAqIEdQNDIgPT0gVVNCX09LICAgIGlzIGlucHV0Ci0gKiBHUDQ1ID09IFVTQl9BQ1QgICBpcyBvdXRwdXQKLSAqIEdQNDYgPT0gUlhEICAgICAgIGlzIGlucHV0Ci0gKiBHUDQ3ID09IFRYRCAgICAgICBpcyBvdXRwdXQKLSAqIEdQNDkgPT0gblBXRSAgICAgIGlzIG91dHB1dAotICogR1A1OCA9PSBuQ1BVQlVTSU5UIGlzIGlucHV0Ci0gKiBHUDU5ID09IExBTklOVCAgICBpcyBpbnB1dAotICogR1A2MCA9PSBQTExFTiAgICAgaXMgb3V0cHV0Ci0gKiBHUDYxID09IExFRF9BICAgICBpcyBvdXRwdXQKLSAqIEdQNjIgPT0gTEVEX0IgICAgIGlzIG91dHB1dAotICogR1A2MyA9PSBURE1fT0UgICAgaXMgb3V0cHV0Ci0gKiBHUDY0ID09IG5EU1BJTlQgICBpcyBpbnB1dAotICogR1A2NSA9PSBTVFJBUDAgICAgaXMgaW5wdXQKLSAqIEdQNjcgPT0gU1RSQVAxICAgIGlzIGlucHV0Ci0gKiBHUDY5ID09IFNUUkFQMiAgICBpcyBpbnB1dAotICogR1A3MCA9PSBTVFJBUDMgICAgaXMgaW5wdXQKLSAqIEdQNzEgPT0gU1RSQVA0ICAgIGlzIGlucHV0Ci0gKiBHUDczID09IFNXVVBEX0xFRCBpcyBvdXRwdXQKLSAqIEdQNzggPT0gbkNTMiAgICAgIGlzIG91dHB1dAotICogR1A3OSA9PSBuQ1MzICAgICAgaXMgb3V0cHV0Ci0gKiBHUDgwID09IG5DUzQgICAgICBpcyBvdXRwdXQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0dQRFIwX1ZBTCAgICAgICAweDAzODA4MDA0Ci0jZGVmaW5lIENPTkZJR19TWVNfR1BEUjFfVkFMICAgICAgIDB4RjAwMkEyODIKLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMl9WQUwgICAgICAgMHgwMDAxQzIwMAotCi0vKiBHUDE1ID09IG5DUzEgIGlzIEFGMTAKLSAqIEdQMTggPT0gUkRZICAgaXMgQUYwMQotICogR1AyMyA9PSBTQ0xLICBpcyBBRjEwCi0gKiBHUDI0ID09IFNGUk0gIGlzIEFGMTAKLSAqIEdQMjUgPT0gVFhEICAgaXMgQUYxMAotICogR1AyNiA9PSBSWEQgICBpcyBBRjAxCi0gKiBHUDMzID09IG5DUzUgIGlzIEFGMTAKLSAqIEdQMzQgPT0gRkZSWEQgaXMgQUYwMQotICogR1AzNSA9PSBDVFMgICBpcyBBRjAxCi0gKiBHUDM5ID09IEZGVFhEIGlzIEFGMTAKLSAqIEdQNDEgPT0gUlRTICAgaXMgQUYxMAotICogR1A0NiA9PSBSWEQgICBpcyBBRjEwCi0gKiBHUDQ3ID09IFRYRCAgIGlzIEFGMDEKLSAqIEdQNDkgPT0gblBXRSAgaXMgQUYxMAotICogR1A3OCA9PSBuQ1MyICBpcyBBRjEwCi0gKiBHUDc5ID09IG5DUzMgIGlzIEFGMTAKLSAqIEdQODAgPT0gbkNTNCAgaXMgQUYxMAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjBfTF9WQUwgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMF9VX1ZBTCAgICAgMHgwMDFBODAxMAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIxX0xfVkFMICAgICAweDYwMDg4MDU4Ci0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjFfVV9WQUwgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMl9MX1ZBTCAgICAgMHhBMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIyX1VfVkFMICAgICAweDAwMDAwMDAyCi0KLQotLyogRklYTUU6IHNldCBHUElPX1JFUi9GRVIgKi8KLQotLyogUkRIID0gMQotICogUEggID0gMQotICogVkZTID0gMQotICogQkZTID0gMQotICogU1NTID0gMQotICovCi0jZGVmaW5lIENPTkZJR19TWVNfUFNTUl9WQUwJCTB4MzcKLQotLyoKLSAqIE1lbW9yeSBzZXR0aW5ncwotICoKLSAqIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzAvMSAtPiBmbGFzaCBiYW5rcwotICogY29uZmlndXJhdGlvbiBmb3IgbkNTMToKLSAqIFszMV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKLSAqIFszMDoyOF0gMDEwICAtIENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDIqKDIqTWVtQ2xrKSA9IDQwIG5zCi0gKiBbMjc6MjRdIDAxMDEgLSBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoNSsxKSpNZW1DbGsgPSA2MCBucwotICogWzIzOjIwXSAxMDExIC0gIiBmb3IgZmlyc3QgYWNjZXNzOiAoMTErMikqTWVtQ2xrID0gMTMwIG5zCi0gKiBbMTldICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCi0gKiBbMTg6MTZdIDAwMCAgLSBub25idXJzdCBSQU0gb3IgRkxBU0gKLSAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzA6Ci0gKiBbMTVdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMTQ6MTJdIDAxMCAgLSBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiAyKigyKk1lbUNsaykgPSA0MCBucwotICogWzExOjA4XSAwMTAxIC0gQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDUrMSkqTWVtQ2xrID0gNjAgbnMKLSAqIFswNzowNF0gMTAxMSAtICIgZm9yIGZpcnN0IGFjY2VzczogKDExKzIpKk1lbUNsayA9IDEzMCBucwotICogWzAzXSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzAyOjAwXSAwMDAgIC0gbm9uYnVyc3QgUkFNIG9yIEZMQVNICi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NU0MwX1ZBTAkJMHgyNWI4MjViOCAvKiBmbGFzaCBiYW5rcyAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciBuQ1MyLzMgLT4gVERNLVN3aXRjaCwgRFNQCi0gKiBjb25maWd1cmF0aW9uIGZvciBuQ1MzOiBEU1AKLSAqIFszMV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKLSAqIFszMDoyOF0gMDAxICAtIFJSUjM6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDEqKDIqTWVtQ2xrKSA9IDIwIG5zCi0gKiBbMjc6MjRdIDAwMTAgLSBSRE4zOiBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoMisxKSpNZW1DbGsgPSAzMCBucwotICogWzIzOjIwXSAwMDExIC0gUkRGMzogQWRkcmVzcyBmb3IgZmlyc3QgYWNjZXNzOiAoMysxKSpNZW1DbGsgPSA0MCBucwotICogWzE5XSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzE4OjE2XSAxMDAgIC0gdmFyaWFibGUgbGF0ZW5jeSBJL08KLSAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzI6IFRETS1Td2l0Y2gKLSAqIFsxNV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKLSAqIFsxNDoxMl0gMTAxICAtIFJSUjI6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDUqKDIqTWVtQ2xrKSA9IDEwMCBucwotICogWzExOjA4XSAxMDAxIC0gUkROMjogQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDkrMSkqTWVtQ2xrID0gMTAwIG5zCi0gKiBbMDc6MDRdIDAwMTEgLSBSREYyOiBBZGRyZXNzIGZvciBmaXJzdCBhY2Nlc3M6ICgzKzEpKk1lbUNsayA9IDQwIG5zCi0gKiBbMDNdICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCi0gKiBbMDI6MDBdIDEwMCAgLSB2YXJpYWJsZSBsYXRlbmN5IEkvTwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMV9WQUwJCTB4MTIzQzU5M0MgLyogVERNIHN3aXRjaCwgRFNQICAgICAgICAgICAgICAgKi8KLQotLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgbkNTNC81IC0+IEV4dEJ1cywgTEFOIENvbnRyb2xsZXIKLSAqCi0gKiBjb25maWd1cmF0aW9uIGZvciBuQ1M1OiBMQU4gQ29udHJvbGxlcgotICogWzMxXSAgICAwICAgIC0gU2xvd2VyIERldmljZQotICogWzMwOjI4XSAwMDEgIC0gUlJSNTogQ1MgZGVzZWxlY3QgdG8gQ1MgdGltZTogMSooMipNZW1DbGspID0gMjAgbnMKLSAqIFsyNzoyNF0gMDAxMCAtIFJETjU6IEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICgyKzEpKk1lbUNsayA9IDMwIG5zCi0gKiBbMjM6MjBdIDAwMTEgLSBSREY1OiBBZGRyZXNzIGZvciBmaXJzdCBhY2Nlc3M6ICgzKzEpKk1lbUNsayA9IDQwIG5zCi0gKiBbMTldICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCi0gKiBbMTg6MTZdIDEwMCAgLSB2YXJpYWJsZSBsYXRlbmN5IEkvTwotICogY29uZmlndXJhdGlvbiBmb3IgbkNTNDogRXh0QnVzCi0gKiBbMTVdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMTQ6MTJdIDExMCAgLSBSUlI0OiBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiA2KigyKk1lbUNsaykgPSAxMjAgbnMKLSAqIFsxMTowOF0gMTEwMCAtIFJETjQ6IEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICgxMisxKSpNZW1DbGsgPSAxMzAgbnMKLSAqIFswNzowNF0gMTEwMSAtIFJERjQ6IEFkZHJlc3MgZm9yIGZpcnN0IGFjY2VzczogMTMtPigxNSsxKSpNZW1DbGsgPSAxNjAgbnMKLSAqIFswM10gICAgMSAgICAtIDE2IEJpdCBidXMgd2lkdGgKLSAqIFswMjowMF0gMTAwICAtIHZhcmlhYmxlIGxhdGVuY3kgSS9PCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NU0MyX1ZBTAkJMHgxMjNDNkNEQyAvKiBleHRyYSBidXMsIExBTiBjb250cm9sbGVyICAgICAqLwotCi0vKiBNRENORkc6IFNEUkFNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAqCi0gKiBbMzE6MjldICAgMDAwIC0gcmVzZXJ2ZWQKLSAqIFsyOF0gICAgICAwCSAtIG5vIFNBMTExMSBjb21wYXRpYmxpdHkgbW9kZQotICogWzI3XSAgICAgIDAgICAtIGxhdGNoIHJldHVybiBkYXRhIHdpdGggcmV0dXJuIGNsb2NrCi0gKiBbMjZdICAgICAgMCAgIC0gYWx0ZXJuYXRlIGFkZHJlc3NpbmcgZm9yIHBhaXIgMi8zCi0gKiBbMjU6MjRdICAgMDAgIC0gdGltaW5ncwotICogWzIzXSAgICAgIDAgICAtIGludGVybmFsIGJhbmtzIGluIGxvd2VyIHBhcnRpdGlvbiAyLzMgKG5vdCB1c2VkKQotICogWzIyOjIxXSAgIDAwICAtIHJvdyBhZGRyZXNzIGJpdHMgZm9yIHBhcnRpdGlvbiAyLzMgKG5vdCB1c2VkKQotICogWzIwOjE5XSAgIDAwICAtIGNvbHVtbiBhZGRyZXNzIGJpdHMgZm9yIHBhcnRpdGlvbiAyLzMgKG5vdCB1c2VkKQotICogWzE4XSAgICAgIDAgICAtIFNEUkFNIHBhcnRpdGlvbiAyLzMgd2lkdGggaXMgMzIgYml0Ci0gKiBbMTddICAgICAgMCAgIC0gU0RSQU0gcGFydGl0aW9uIDMgZGlzYWJsZWQKLSAqIFsxNl0gICAgICAwICAgLSBTRFJBTSBwYXJ0aXRpb24gMiBkaXNhYmxlZAotICogWzE1OjEzXSAgIDAwMCAtIHJlc2VydmVkCi0gKiBbMTJdICAgICAgMQkgLSBTQTExMTEgY29tcGF0aWJsaXR5IG1vZGUKLSAqIFsxMV0gICAgICAxICAgLSBsYXRjaCByZXR1cm4gZGF0YSB3aXRoIHJldHVybiBjbG9jawotICogWzEwXSAgICAgIDAgICAtIG5vIGFsdGVybmF0ZSBhZGRyZXNzaW5nIGZvciBwYWlyIDAvMQotICogWzA5OjA4XSAgIDAxICAtIHRSUD0yKk1lbUNsayBDTD0yIHRSQ0Q9MipNZW1DbGsgdFJBUz01Kk1lbUNsayB0UkM9OCpNZW1DbGsKLSAqIFs3XSAgICAgICAxICAgLSA0IGludGVybmFsIGJhbmtzIGluIGxvd2VyIHBhcnRpdGlvbiBwYWlyCi0gKiBbMDY6MDVdICAgMTAgIC0gMTMgcm93IGFkZHJlc3MgYml0cyBmb3IgcGFydGl0aW9uIDAvMQotICogWzA0OjAzXSAgIDAxICAtIDkgY29sdW1uIGFkZHJlc3MgYml0cyBmb3IgcGFydGl0aW9uIDAvMQotICogWzAyXSAgICAgIDAgICAtIFNEUkFNIHBhcnRpdGlvbiAwLzEgd2lkdGggaXMgMzIgYml0Ci0gKiBbMDFdICAgICAgMCAgIC0gZGlzYWJsZSBTRFJBTSBwYXJ0aXRpb24gMQotICogWzAwXSAgICAgIDEgICAtIGVuYWJsZSAgU0RSQU0gcGFydGl0aW9uIDAKLSAqLwotLyogdXNlIHRoZSBjb25maWd1cmF0aW9uIGFib3ZlIGJ1dCBkaXNhYmxlIHBhcnRpdGlvbiAwICovCi0jZGVmaW5lIENPTkZJR19TWVNfTURDTkZHX1ZBTAkJMHgwMDAwMTljOAotCi0vKiBNRFJFRlI6IFNEUkFNIFJlZnJlc2ggQ29udHJvbCBSZWdpc3RlcgotICoKLSAqIFszMjoyNl0gMCAgICAgLSByZXNlcnZlZAotICogWzI1XSAgICAwICAgICAtIEsyRlJFRTogbm90IGZyZWUgcnVubmluZwotICogWzI0XSAgICAwICAgICAtIEsxRlJFRTogbm90IGZyZWUgcnVubmluZwotICogWzIzXSAgICAxICAgICAtIEswRlJFRTogbm90IGZyZWUgcnVubmluZwotICogWzIyXSAgICAwICAgICAtIFNMRlJTSDogc2VsZiByZWZyZXNoIGRpc2FibGVkCi0gKiBbMjFdICAgIDAgICAgIC0gcmVzZXJ2ZWQKLSAqIFsyMF0gICAgMCAgICAgLSBBUEQ6IG5vIGF1dG8gcG93ZXIgZG93bgotICogWzE5XSAgICAwICAgICAtIEsyREIyOiBTRENMSzIgaXMgTWVtQ2xrCi0gKiBbMThdICAgIDAgICAgIC0gSzJSVU46IGRpc2FibGUgU0RDTEsyCi0gKiBbMTddICAgIDAgICAgIC0gSzFEQjI6IFNEQ0xLMSBpcyBNZW1DbGsKLSAqIFsxNl0gICAgMSAgICAgLSBLMVJVTjogZW5hYmxlIFNEQ0xLMQotICogWzE1XSAgICAxICAgICAtIEUxUElOOiBTRFJBTSBjbG9jayBlbmFibGUKLSAqIFsxNF0gICAgMSAgICAgLSBLMERCMjogU0RDTEswIGlzIE1lbUNsawotICogWzEzXSAgICAwICAgICAtIEswUlVOOiBkaXNhYmxlIFNEQ0xLMAotICogWzEyXSAgICAxICAgICAtIEUwUElOOiBkaXNhYmxlIFNEQ0tFMAotICogWzExOjAwXSAwMDAwMDAwMTEwMDAgLSAoNjRtcy84MTkyKSpNZW1DbGtGcmVxLzMyID0gMjQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01EUkVGUl9WQUwJCTB4MDA4MUQwMTgKLQotLyogTURNUlM6IE1vZGUgUmVnaXN0ZXIgU2V0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAqCi0gKiBbMzFdICAgICAgMCAgICAgICAtIHJlc2VydmVkCi0gKiBbMzA6MjNdICAgMDAwMDAwMDAtIE1ETVJTMjogU0RSQU0yLzMgTVJTIFZhbHVlLiAobm90IHVzZWQpCi0gKiBbMjI6MjBdICAgMDAwICAgICAtIE1EQ0wyOiAgU0RSQU0yLzMgQ2FzIExhdGVuY3kuICAobm90IHVzZWQpCi0gKiBbMTldICAgICAgMCAgICAgICAtIE1EQUREMjogU0RSQU0yLzMgYnVyc3QgVHlwZS4gRml4ZWQgdG8gc2VxdWVudGlhbC4gIChub3QgdXNlZCkKLSAqIFsxODoxNl0gICAwMTAgICAgIC0gTURCTDI6ICBTRFJBTTIvMyBidXJzdCBMZW5ndGguIEZpeGVkIHRvIDQuICAobm90IHVzZWQpCi0gKiBbMTVdICAgICAgMCAgICAgICAtIHJlc2VydmVkCi0gKiBbMTQ6MDddICAgMDAwMDAwMDAtIE1ETVJTMDogU0RSQU0wLzEgTVJTIFZhbHVlLgotICogWzA2OjA0XSAgIDAxMCAgICAgLSBNRENMMDogIFNEUkFNMC8xIENhcyBMYXRlbmN5LgotICogWzAzXSAgICAgIDAgICAgICAgLSBNREFERDA6IFNEUkFNMC8xIGJ1cnN0IFR5cGUuIEZpeGVkIHRvIHNlcXVlbnRpYWwuCi0gKiBbMDI6MDBdICAgMDEwICAgICAtIE1EQkwwOiAgU0RSQU0wLzEgYnVyc3QgTGVuZ3RoLiBGaXhlZCB0byA0LgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTURNUlNfVkFMCQkweDAwMDIwMDIyCi0KLS8qCi0gKiBQQ01DSUEgYW5kIENGIEludGVyZmFjZXMKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01FQ1JfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNNRU0wX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DTUVNMV9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0FUVDBfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNBVFQxX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DSU8wX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DSU8xX1ZBTAkJMHgwMDAwMDAwMAotI2VuZGlmCi0KLS8qCi0gKiBHUElPIHNldHRpbmdzCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMF9WQUwJCTB4RkZGRkZGRkYKLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMV9WQUwJCTB4RkZGRkZGRkYKLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMl9WQUwJCTB4RkZGRkZGRkYKLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMF9WQUwJCTB4MDgwMjIwODAKLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMV9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMl9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMF9WQUwJCTB4Q0Q4MkE4NzgKLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMV9WQUwJCTB4RkNGRkFCODAKLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMl9WQUwJCTB4MDAwMUZGRkYKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMF9MX1ZBTAkJMHg4MDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIwX1VfVkFMCQkweEE1MjU0MDEwCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjFfTF9WQUwJCTB4NTk5QTk1NTAKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMV9VX1ZBTAkJMHhBQUE1QUFBQQotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIyX0xfVkFMCQkweEFBQUFBQUFBCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjJfVV9WQUwJCTB4MDAwMDAwMDIKLQotLyogRklYTUU6IHNldCBHUElPX1JFUi9GRVIgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX1BTU1JfVkFMICAgICAgICAweDIwCi0KLSNkZWZpbmUJQ09ORklHX1NZU19DQ0NSCQkJQ0NDUl9MMjd8Q0NDUl9NMnxDQ0NSX04xMAotI2RlZmluZQlDT05GSUdfU1lTX0NLRU4JCQkweDAKLQotLyoKLSAqIE1lbW9yeSBzZXR0aW5ncwotICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NU0MwX1ZBTCAgICAgICAgICAgIDB4MmVmMTVhZjAKLSNkZWZpbmUgQ09ORklHX1NZU19NU0MxX1ZBTCAgICAgICAgICAgIDB4MDAwMDNmZjQKLSNkZWZpbmUgQ09ORklHX1NZU19NU0MyX1ZBTCAgICAgICAgICAgIDB4N2ZmMDdmZjAKLSNkZWZpbmUgQ09ORklHX1NZU19NRENORkdfVkFMICAgICAgICAgIDB4MDlhOTA5YTkKLSNkZWZpbmUgQ09ORklHX1NZU19NRFJFRlJfVkFMICAgICAgICAgIDB4MDM4ZmYwMzAKLSNkZWZpbmUgQ09ORklHX1NZU19NRE1SU19WQUwgICAgICAgICAgIDB4MDAyMjAwMjIKLSNkZWZpbmUJQ09ORklHX1NZU19GTFlDTkZHX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZQlDT05GSUdfU1lTX1NYQ05GR19WQUwJCTB4MDAwMDAwMDAKLQotLyoKLSAqIFBDTUNJQSBhbmQgQ0YgSW50ZXJmYWNlcwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUVDUl9WQUwgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ01FTTBfVkFMICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DTUVNMV9WQUwgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNBVFQwX1ZBTCAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0FUVDFfVkFMICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DSU8wX1ZBTCAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNJTzFfVkFMICAgICAgIDB4MDAwMDAwMDAKLQotI2RlZmluZSBDU0IyMjZfVVNFUl9MRUQwCTB4MDAwMDAwMDgKLSNkZWZpbmUgQ1NCMjI2X1VTRVJfTEVEMQkweDAwMDAwMDEwCi0jZGVmaW5lIENTQjIyNl9VU0VSX0xFRDIJMHgwMDAwMDAyMAotCi0KLS8qCi0gKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MgICAgIDEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAkxMjgJLyogbWF4IG51bWJlciBvZiBzZWN0LiBvbiBvbmUgY2hpcCAgKi8KLQotLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCi0jZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRVJBU0VfVE9VVCAgICAoMipDT05GSUdfU1lTX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQgICAgKDIqQ09ORklHX1NZU19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgICAgICAgKi8KLQotI2RlZmluZQlDT05GSUdfRU5WX0lTX0lOX0ZMQVNICTEKLSNkZWZpbmUgQ09ORklHX0VOVl9BRERSICAgICAgICAgICAgKFBIWVNfRkxBU0hfMSArIDB4MUMwMDApCi0JCQkJCS8qIEFkZHIgb2YgRW52aXJvbm1lbnQgU2VjdG9yICAgICAgICovCi0jZGVmaW5lIENPTkZJR19FTlZfU0laRSAgICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KLQotI2VuZGlmICAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZGE4NTBfYW0xOHh4ZXZtLmggYi9pbmNsdWRlL2NvbmZpZ3MvZGE4NTBfYW0xOHh4ZXZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiODNmZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9kYTg1MF9hbTE4eHhldm0uaApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBCYXNlZCBvbiBkYXZpbmNpX2R2ZXZtLmguIE9yaWdpbmFsIENvcHlyaWdodHMgZm9sbG93OgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTZXJnZXkgS3VidXNoeW4gPGtzaUBrb2k4Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogQm9hcmQKKyAqLworI2RlZmluZSBDT05GSUdfRFJJVkVSX1RJX0VNQUMKKyNkZWZpbmUgQ09ORklHX1VTRV9TUElGTEFTSAorCisKKy8qCisgKiBTb0MgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19NQUNIX0RBVklOQ0lfREE4NTBfRVZNCisjZGVmaW5lIENPTkZJR19BUk05MjZFSlMJCS8qIGFybTkyNmVqcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfU09DX0RBOFhYCQkvKiBUSSBEQTh4eCBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkJY2xrX2dldChEQVZJTkNJX0FSTV9DTEtJRCkKKyNkZWZpbmUgQ09ORklHX1NZU19PU0NJTl9GUkVRCQkyNDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX1RJTUVSQkFTRQkJREFWSU5DSV9USU1FUjBfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX0haX0NMT0NLCQljbGtfZ2V0KERBVklOQ0lfQVVYQ0xLX0NMS0lEKQorI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMAorI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCQkweGMxMDgwMDAwCisKKy8qCisgKiBNZW1vcnkgSW5mbworICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkoMHgxMDAwMCArIDEqMTAyNCoxMDI0KSAvKiBtYWxsb2MoKSBsZW4gKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xCQlEQVZJTkNJX0REUl9FTUlGX0RBVEFfQkFTRSAvKiBERFIgU3RhcnQgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJKDY0IDw8IDIwKSAvKiBTRFJBTSBzaXplIDY0TUIgKi8KKyNkZWZpbmUgQ09ORklHX01BWF9SQU1fQkFOS19TSVpFICg1MTIgPDwgMjApIC8qIG1heCBzaXplIGZyb20gU1BSUzU4NiovCisKKy8qIG1lbXRlc3Qgc3RhcnQgYWRkciAqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJKFBIWVNfU0RSQU1fMSArIDB4MjAwMDAwMCkKKworLyogbWVtdGVzdCB3aWxsIGJlIHJ1biBvbiAxNk1CICovCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJKFBIWVNfU0RSQU1fMSArIDB4MjAwMDAwMCArIDE2KjEwMjQqMTAyNCkKKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxIC8qIHdlIGhhdmUgMSBiYW5rIG9mIERSQU0gKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMjU2KjEwMjQpIC8qIHJlZ3VsYXIgc3RhY2sgKi8KKworLyoKKyAqIFNlcmlhbCBEcml2ZXIgaW5mbworICovCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9SRUdfU0laRQktNAkvKiBOUzE2NTUwIHJlZ2lzdGVyIHNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTEJREFWSU5DSV9VQVJUMl9CQVNFIC8qIEJhc2UgYWRkcmVzcyBvZiBVQVJUMiAqLworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCWNsa19nZXQoREFWSU5DSV9VQVJUMl9DTEtJRCkKKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJMQkJLyogdXNlIFVBUlQwIGZvciBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCQkvKiBEZWZhdWx0IGJhdWQgcmF0ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KKworI2RlZmluZSBDT05GSUdfU1BJCisjZGVmaW5lIENPTkZJR19TUElfRkxBU0gKKyNkZWZpbmUgQ09ORklHX1NQSV9GTEFTSF9XSU5CT05ECisjZGVmaW5lIENPTkZJR19EQVZJTkNJX1NQSQorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9CQVNFCQlEQVZJTkNJX1NQSTFfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX1NQSV9DTEsJCWNsa19nZXQoREFWSU5DSV9TUEkxX0NMS0lEKQorI2RlZmluZSBDT05GSUdfU0ZfREVGQVVMVF9TUEVFRAkJMzAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX0VOVl9TUElfTUFYX0haCUNPTkZJR19TRl9ERUZBVUxUX1NQRUVECisKKy8qCisgKiBJMkMgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDT05GSUdfRFJJVkVSX0RBVklOQ0lfSTJDCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NQRUVECQkyNTAwMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TTEFWRQkJMTAgLyogQm9ndXMsIG1hc3Rlci1vbmx5IGluIFUtQm9vdCAqLworI2RlZmluZSBDT05GSUdfU1lTX0kyQ19FWFBBTkRFUl9BRERSICAgMHgyMAorCisvKgorICogRmxhc2ggJiBFbnZpcm9ubWVudAorICovCisjaWZkZWYgQ09ORklHX1VTRV9OQU5ECisjdW5kZWYgQ09ORklHX0VOVl9JU19JTl9GTEFTSAorI2RlZmluZSBDT05GSUdfTkFORF9EQVZJTkNJCisjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gKKyNkZWZpbmUgQ09ORklHX0VOVl9JU19JTl9OQU5ECQkvKiBVLUJvb3QgZW52IGluIE5BTkQgRmxhc2ggICovCisjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkweDAgLyogQmxvY2sgMC0tbm90IHVzZWQgYnkgYm9vdGNvZGUgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkJKDEyOCA8PCAxMCkKKyNkZWZpbmUJQ09ORklHX1NZU19OQU5EX1VTRV9GTEFTSF9CQlQKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EXzRCSVRfSFdfRUNDX09PQkZJUlNUCisjZGVmaW5lCUNPTkZJR19TWVNfTkFORF9QQUdFXzJLCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9DUwkJMworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRQkJREFWSU5DSV9BU1lOQ19FTUlGX0RBVEFfQ0UzX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19DTEVfTUFTSwkJMHgxMAorI2RlZmluZSBDT05GSUdfU1lTX0FMRV9NQVNLCQkweDgKKyN1bmRlZiBDT05GSUdfU1lTX05BTkRfSFdfRUNDCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEgLyogTWF4IG51bWJlciBvZiBOQU5EIGRldmljZXMgKi8KKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZW5kaWYKKworLyoKKyAqIE5ldHdvcmsgJiBFdGhlcm5ldCBDb25maWd1cmF0aW9uCisgKi8KKyNpZmRlZiBDT05GSUdfRFJJVkVSX1RJX0VNQUMKKyNkZWZpbmUgQ09ORklHX0VNQUNfTURJT19QSFlfTlVNCTAKKyNkZWZpbmUgQ09ORklHX01JSQorI2RlZmluZSBDT05GSUdfQk9PVFBfREVGQVVMVAorI2RlZmluZSBDT05GSUdfQk9PVFBfRE5TCisjZGVmaW5lIENPTkZJR19CT09UUF9ETlMyCisjZGVmaW5lIENPTkZJR19CT09UUF9TRU5EX0hPU1ROQU1FCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJMTAKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNFX05PUgorI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfRFJJVkVSCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQ0ZJCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfUFJPVEVDVElPTgorI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkxIC8qIG1heCBudW1iZXIgb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9TRUNUX1NaCSgxMjggPDwgMTApIC8qIDEyOEtCICovCisjZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkoQ09ORklHX1NZU19GTEFTSF9TRUNUX1NaICogMykKKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkJKDEwIDw8IDEwKSAvKiAxMEtCICovCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJREFWSU5DSV9BU1lOQ19FTUlGX0RBVEFfQ0UyX0JBU0UKKyNkZWZpbmUgUEhZU19GTEFTSF9TSVpFCQkJKDggPDwgMjApIC8qIEZsYXNoIHNpemUgOE1CICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QgKChQSFlTX0ZMQVNIX1NJWkUvQ09ORklHX1NZU19GTEFTSF9TRUNUX1NaKVwKKwkgICAgICAgKyAzKQorI2RlZmluZSBDT05GSUdfRU5WX1NFQ1RfU0laRQkJQ09ORklHX1NZU19GTEFTSF9TRUNUX1NaCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfU1BJRkxBU0gKKyN1bmRlZiBDT05GSUdfRU5WX0lTX0lOX0ZMQVNICisjdW5kZWYgQ09ORklHX0VOVl9JU19JTl9OQU5ECisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fU1BJX0ZMQVNICisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCSg2NCA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCSgyNTYgPDwgMTApCisjZGVmaW5lIENPTkZJR19FTlZfU0VDVF9TSVpFCQkoNjQgPDwgMTApCisjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gKKyNlbmRpZgorCisvKgorICogVS1Cb290IGdlbmVyYWwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgorI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJCSJ1SW1hZ2UiIC8qIEJvb3QgZmlsZSBuYW1lICovCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCSJVLUJvb3QgPiAiIC8qIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCTEwMjQgLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkxNiAvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFIC8qIEJvb3QgQXJncyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkoUEhZU19TRFJBTV8xICsgMHg3MDAwMDApCisjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFCisjZGVmaW5lIENPTkZJR19BVVRPX0NPTVBMRVRFCisjZGVmaW5lIENPTkZJR19TWVNfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFRfSFVTSF9QUzIJIj4gIgorI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCisjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAKKyNkZWZpbmUgQ09ORklHX0NSQzMyX1ZFUklGWQorI2RlZmluZSBDT05GSUdfTVhfQ1lDTElDCisKKy8qCisgKiBMaW51eCBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIExJTlVYX0JPT1RfUEFSQU1fQUREUgkoUEhZU19TRFJBTV8xICsgMHgxMDApCisjZGVmaW5lIENPTkZJR19IV0NPTkZJRwkJLyogZW5hYmxlIGh3Y29uZmlnICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRworI2RlZmluZSBDT05GSUdfUkVWSVNJT05fVEFHCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJCVwKKwkibWVtPTMyTSBjb25zb2xlPXR0eVMyLDExNTIwMG44IHJvb3Q9L2Rldi9tdGRibG9jazIgcncgbm9pbml0cmQgaXA9ZGhjcCIKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJImh3Y29uZmlnPWRzcDp3YWtlPXllcyIKKworLyoKKyAqIFUtQm9vdCBjb21tYW5kcworICovCisjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CisjZGVmaW5lIENPTkZJR19DTURfRU5WCisjZGVmaW5lIENPTkZJR19DTURfQVNLRU5WCisjZGVmaW5lIENPTkZJR19DTURfREhDUAorI2RlZmluZSBDT05GSUdfQ01EX0RJQUcKKyNkZWZpbmUgQ09ORklHX0NNRF9NSUkKKyNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCisjZGVmaW5lIENPTkZJR19DTURfU0FWRVMKKyNkZWZpbmUgQ09ORklHX0NNRF9NRU1PUlkKKworI2lmbmRlZiBDT05GSUdfRFJJVkVSX1RJX0VNQUMKKyN1bmRlZiBDT05GSUdfQ01EX05FVAorI3VuZGVmIENPTkZJR19DTURfREhDUAorI3VuZGVmIENPTkZJR19DTURfTUlJCisjdW5kZWYgQ09ORklHX0NNRF9QSU5HCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfTkFORAorI3VuZGVmIENPTkZJR19DTURfRkxBU0gKKyN1bmRlZiBDT05GSUdfQ01EX0lNTFMKKyNkZWZpbmUgQ09ORklHX0NNRF9OQU5ECisKKyNkZWZpbmUgQ09ORklHX0NNRF9NVERQQVJUUworI2RlZmluZSBDT05GSUdfTVREX0RFVklDRQorI2RlZmluZSBDT05GSUdfTVREX1BBUlRJVElPTlMKKyNkZWZpbmUgQ09ORklHX0xaTworI2RlZmluZSBDT05GSUdfUkJUUkVFCisjZGVmaW5lIENPTkZJR19DTURfVUJJCisjZGVmaW5lIENPTkZJR19DTURfVUJJRlMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTRV9TUElGTEFTSAorI3VuZGVmIENPTkZJR19DTURfSU1MUworI3VuZGVmIENPTkZJR19DTURfRkxBU0gKKyNkZWZpbmUgQ09ORklHX0NNRF9TUEkKKyNkZWZpbmUgQ09ORklHX0NNRF9TRgorI2RlZmluZSBDT05GSUdfQ01EX1NBVkVFTlYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX1VTRV9OQU5EKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX1VTRV9OT1IpICYmIFwKKwkhZGVmaW5lZChDT05GSUdfVVNFX1NQSUZMQVNIKQorI2RlZmluZSBDT05GSUdfRU5WX0lTX05PV0hFUkUKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCSgxNiA8PCAxMCkKKyN1bmRlZiBDT05GSUdfQ01EX0lNTFMKKyN1bmRlZiBDT05GSUdfQ01EX0VOVgorI2VuZGlmCisKKy8qIGFkZGl0aW9ucyBmb3IgbmV3IHJlbG9jYXRpb24gY29kZSwgbXVzdCBhZGRlZCB0byBhbGwgYm9hcmRzICovCisjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJMHhjMDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfQUREUgkJKENPTkZJR19TWVNfU0RSQU1fQkFTRSArIDB4MTAwMCAtIFwKKwkJCQkJLyogRml4IHRoaXMgKi8gR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2RhdmluY2lfZG02NDY3VGV2bS5oIGIvaW5jbHVkZS9jb25maWdzL2RhdmluY2lfZG02NDY3VGV2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3Yzk5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZGF2aW5jaV9kbTY0NjdUZXZtLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKiBTcGVjdHJ1bSBEaWdpdGFsIFRNUzMyMERNNjQ2N1QgRVZNIGJvYXJkICovCisjZGVmaW5lIERBVklOQ0lfRE02NDY3RVZNCisjZGVmaW5lIERBVklOQ0lfRE02NDY3VEVWTQorI2RlZmluZSBDT05GSUdfU1lTX1VTRV9OQU5ECisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9TTUFMTFBBR0UKKworI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qIFNvQyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIENPTkZJR19BUk05MjZFSlMJCQkJLyogYXJtOTI2ZWpzIENQVSAqLworCisvKiBDbG9jayByYXRlcyBkZXRlY3Rpb24gKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgaW50IGRhdmluY2lfYXJtX2Nsa19nZXQodm9pZCk7CisjZW5kaWYKKworI2RlZmluZSBDRkdfUkVGQ0xLX0ZSRVEJCTMzMDAwMDAwCisvKiBBcm0gQ2xvY2sgZnJlcXVlbmN5ICAgICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJZGF2aW5jaV9hcm1fY2xrX2dldCgpCisvKiBUaW1lciBJbnB1dCBjbG9jayBmcmVxICovCisjZGVmaW5lIENPTkZJR19TWVNfSFpfQ0xPQ0sJCShDT05GSUdfU1lTX0NMS19GUkVRLzIpCisjZGVmaW5lIENPTkZJR19TWVNfVElNRVJCQVNFCQkweDAxYzIxNDAwCS8qIHVzZSB0aW1lciAwICovCisjZGVmaW5lIENPTkZJR19TWVNfSFoJCQkxMDAwCisjZGVmaW5lIENPTkZJR19TT0NfRE02NDZYCisKKy8qIEVFUFJPTSBkZWZpbml0aW9ucyBmb3IgRUVQUk9NICovCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSX0xFTgkJMgorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUgkJMHg1MAorI2RlZmluZSBDT05GSUdfU1lTX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMJNgorI2RlZmluZSBDT05GSUdfU1lTX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TCTIwCisKKy8qIE1lbW9yeSBJbmZvICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDEgPDwgMjApCS8qIDEgTWlCICovCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDgwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4ODEwMDAwMDAJLyogMTZNQiBSQU0gdGVzdCAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkJMQorI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCQkoMjU2IDw8IDEwKQkvKiAyNTYgS2lCICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMQkJCTB4ODAwMDAwMDAJLyogRERSIFN0YXJ0ICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCQkoMjU2IDw8IDIwKQkvKiBERFIgc2l6ZSAyNTZNQiAqLworCisvKiBMaW51eCBpbnRlcmZhY2luZyAqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcKKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCisjZGVmaW5lIENPTkZJR19TWVNfQkFSR1NJWkUJCTEwMjQJCS8qIEJvb3RhcmcgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJMHg4MDcwMDAwMAkvKiBrZXJuZWwgYWRkcmVzcyAqLworI2RlZmluZSBDT05GSUdfUkVWSVNJT05fVEFHCisKKy8qIFNlcmlhbCBEcml2ZXIgaW5mbyAqLworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTAKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1NFUklBTAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJNAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMQkJMHgwMWMyMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCQkyNDAwMDAwMAorI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCQkxMTUyMDAKKyNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKy8qIEkyQyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDT05GSUdfRFJJVkVSX0RBVklOQ0lfSTJDCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NQRUVECQk4MDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TTEFWRQkJMTAKKworLyogTmV0d29yayAmIEV0aGVybmV0IENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9USV9FTUFDCisjZGVmaW5lIENPTkZJR19FTUFDX01ESU9fUEhZX05VTQkxCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0RFRkFVTFQKKyNkZWZpbmUgQ09ORklHX0JPT1RQX0ROUworI2RlZmluZSBDT05GSUdfQk9PVFBfRE5TMgorI2RlZmluZSBDT05GSUdfQk9PVFBfU0VORF9IT1NUTkFNRQorI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCTEwCisjZGVmaW5lIENPTkZJR19DTURfTkVUCisKKy8qIEZsYXNoICYgRW52aXJvbm1lbnQgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2lmZGVmIENPTkZJR19TWVNfVVNFX05BTkQKKyNkZWZpbmUgQ09ORklHX05BTkRfREFWSU5DSQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQ1MJCTIKKyN1bmRlZiBDT05GSUdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTkFORAorI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQkoMTYgPDwgMTApCS8qIDE2IEtpQiAqLworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRV9MSVNUCXsweDQyMDAwMDAwLCB9CisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9IV19FQ0MKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UJMQorI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJMAorI2Vsc2UKKyNkZWZpbmUgQ09ORklHX0VOVl9JU19OT1dIRVJFCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCSg0IDw8IDEwKQkvKiA0IEtpQiAqLworI2VuZGlmCisKKy8qIFUtQm9vdCBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gKi8KKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCQkvKiBObyBJUlEvRklRIGluIFUtQm9vdCAqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQkidUltYWdlIgkvKiBCb290IGZpbGUgbmFtZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1BST01QVAkiRE02NDY3IEVWTSA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDT05GSUdfU1lTX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJCVwKKwkJCShDT05GSUdfU1lTX0NCU0laRSArIHNpemVvZihDT05GSUdfU1lTX1BST01QVCkgKyAxNikKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgorI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRQorI2RlZmluZSBDT05GSUdfQVVUT19DT01QTEVURQorI2RlZmluZSBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyCSI+ICIKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORworI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCisjZGVmaW5lIENPTkZJR19DUkMzMl9WRVJJRlkKKyNkZWZpbmUgQ09ORklHX01YX0NZQ0xJQworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCSJzb3VyY2UgMHg4MjA4MDAwMDsgZGhjcDsgYm9vdG0iCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkJCVwKKwkJCQkJIm1lbT0xMjBNIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjggIiBcCisJCQkJCSJyb290PS9kZXYvaGRhMSBydyBub2luaXRyZCBpcD1kaGNwIgorCisvKiBVLUJvb3QgY29tbWFuZHMgKi8KKyNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KKyNkZWZpbmUgQ09ORklHX0NNRF9BU0tFTlYKKyNkZWZpbmUgQ09ORklHX0NNRF9ESUFHCisjZGVmaW5lIENPTkZJR19DTURfSTJDCisjZGVmaW5lIENPTkZJR19DTURfTUlJCisjZGVmaW5lIENPTkZJR19DTURfU0FWRVMKKyNkZWZpbmUgQ09ORklHX0NNRF9FRVBST00KKyNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCisjZGVmaW5lIENPTkZJR19DTURfREhDUAorI3VuZGVmIENPTkZJR19DTURfQkRJCisjdW5kZWYgQ09ORklHX0NNRF9GUEdBCisjdW5kZWYgQ09ORklHX0NNRF9TRVRHRVREQ1IKKyNpZmRlZiBDT05GSUdfU1lTX1VTRV9OQU5ECisjdW5kZWYgQ09ORklHX0NNRF9GTEFTSAorI3VuZGVmIENPTkZJR19DTURfSU1MUworI2RlZmluZSBDT05GSUdfQ01EX05BTkQKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19NQVhfUkFNX0JBTktfU0laRQkoMjU2IDw8IDIwKQkvKiAyNTYgTUIgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX1NEUkFNX0JBU0UJCVBIWVNfU0RSQU1fMQorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX1NJWkUJMHgxMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9BRERSCQkoQ09ORklHX1NZU19TRFJBTV9CQVNFICsgXAorCQkJCQkgQ09ORklHX1NZU19JTklUX1JBTV9TSVpFIC0gXAorCQkJCQkgR0VORVJBVEVEX0dCTF9EQVRBX1NJWkUpCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZGF2aW5jaV9kbTY0Njdldm0uaCBiL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX2RtNjQ2N2V2bS5oCmluZGV4IGVjMWMzMWMuLmM5YTBjZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX2RtNjQ2N2V2bS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9kYXZpbmNpX2RtNjQ2N2V2bS5oCkBAIC02NSw2ICs2NSw3IEBACiAjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwogI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQkxMDI0CQkvKiBCb290YXJnIFNpemUgKi8KICNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJCTB4ODA3MDAwMDAJLyoga2VybmVsIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ09ORklHX1JFVklTSU9OX1RBRwogCiAvKiBTZXJpYWwgRHJpdmVyIGluZm8gKi8KICNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZGV2a2l0ODAwMC5oIGIvaW5jbHVkZS9jb25maWdzL2RldmtpdDgwMDAuaAppbmRleCA2YzUxYTI3Li5lMTc0M2RjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZGV2a2l0ODAwMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9kZXZraXQ4MDAwLmgKQEAgLTMzNyw2ICszMzcsNyBAQAogI2RlZmluZSBDT05GSUdfU1BMX0JTU19NQVhfU0laRQkJMHg4MDAwMAogCiAvKiBOQU5EIGJvb3QgY29uZmlnICovCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF81X0FERFJfQ1lDTEUKICNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1BBR0VfQ09VTlQJNjQKICNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1BBR0VfU0laRQkyMDQ4CiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9PT0JTSVpFCQk2NApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2lubm9rb20uaCBiL2luY2x1ZGUvY29uZmlncy9pbm5va29tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTNkYTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jb25maWdzL2lubm9rb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDUwNyArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCi0gKiBSb2JlcnQgU2Nod2ViZWwsIFBlbmd1dHJvbml4LCByLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlLgotICoKLSAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBBdWVyc3dhbGQgSW5ub2tvbSBDUFUgYm9hcmQuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIGluY2x1ZGUvY29uZmlncy9pbm5va29tLmggLSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJvYXJkIHNwZWNpZmljCi0gKi8KLQotI2lmbmRlZiBfX0NPTkZJR19ICi0jZGVmaW5lIF9fQ09ORklHX0gKLQotLyoKLSAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0gKiAoZWFzeSB0byBjaGFuZ2UpCi0gKi8KLSNkZWZpbmUgQ09ORklHX1BYQTI1MAkJMQkvKiBUaGlzIGlzIGFuIFBYQTI1MCBDUFUgICAgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfSU5OT0tPTQkJMQkvKiBvbiBhbiBBdWVyc3dhbGQgSW5ub2tvbSBib2FyZCAgICAqLwotCi0jdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICAgICAqLwotCQkJCQkvKiBmb3IgdGltZXIvY29uc29sZS9ldGhlcm5ldCAgICAgICAqLwotCi0jZGVmaW5lCUNPTkZJR19TWVNfVEVYVF9CQVNFCTB4MAotCi0vKiB3ZSB3aWxsIG5ldmVyIGVuYWJsZSBkY2FjaGUsIGJlY2F1c2Ugd2UgaGF2ZSB0byBzZXR1cCBNTVUgZmlyc3QgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19EQ0FDSEVfT0ZGCi0KLS8qCi0gKiBIYXJkd2FyZSBkcml2ZXJzCi0gKi8KLQotLyoKLSAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1BYQV9TRVJJQUwKLSNkZWZpbmUgQ09ORklHX0ZGVUFSVAkJMQkvKiB3ZSB1c2UgRkZVQVJUIG9uIENTQjIyNiAqLwotCi0vKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCi0jZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCi0KLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxOTIwMAotI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IJMQkvKiB3ZSBoYXZlIGEgbWlzY19pbml0X3IoKSBmdW5jdGlvbiAqLwotCi0KLS8qCi0gKiBCT09UUCBvcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRQotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVFBBVEgKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0KLSNkZWZpbmUgQ09ORklHX0NNRF9BU0tFTlYKLSNkZWZpbmUgQ09ORklHX0NNRF9CREkKLSNkZWZpbmUgQ09ORklHX0NNRF9DQUNIRQotI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKLSNkZWZpbmUgQ09ORklHX0NNRF9FQ0hPCi0jZGVmaW5lIENPTkZJR19DTURfU0FWRUVOVgotI2RlZmluZSBDT05GSUdfQ01EX0ZMQVNICi0jZGVmaW5lIENPTkZJR19DTURfSTJDCi0jZGVmaW5lIENPTkZJR19DTURfSU1JCi0jZGVmaW5lIENPTkZJR19DTURfTE9BREIKLSNkZWZpbmUgQ09ORklHX0NNRF9NRU1PUlkKLSNkZWZpbmUgQ09ORklHX0NNRF9ORVQKLSNkZWZpbmUgQ09ORklHX0NNRF9SVU4KLQotCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJMwotLyogI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJInJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgY29uc29sZT10dHlTMCwxOTIwMCIgKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkiY29uc29sZT10dHlTMCwxOTIwMCIKLSNkZWZpbmUgQ09ORklHX0VUSEFERFIJCUZGOkZGOkZGOkZGOkZGOkZGCi0jZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCi0jZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMS41NgotI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMS4yCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdG0gMHg0MDAwMCIKLSNkZWZpbmUgQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUwotCi0jZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkxCi0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCi0gKi8KLQotLyoKLSAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDI1NioxMDI0KQotCi0jZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BST01QVAkJInVib290PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQlDT05GSUdfU1lTX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICAgICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4YTA0MDAwMDAgICAgICAvKiBtZW10ZXN0IHdvcmtzIG9uICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5EICAgICAgICAgMHhhMDgwMDAwMCAgICAgIC8qIDQgLi4uIDggTUIgaW4gRFJBTSAgICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIgICAgICAgICAgIDB4YTMwMDAwMDAgICAgICAvKiBsb2FkIGtlcm5lbCB0byB0aGlzIGFkZHJlc3MgICAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfSFoJCQkxMDAwCi0JCQkJCQkvKiBSUzogdGhlIG9zY2lsbGF0b3IgaXMgYWN0dWFsbHkgMzY4MDEzMD8/ICovCi0KLSNkZWZpbmUgQ09ORklHX1NZU19DUFVTUEVFRCAgICAgICAgICAgIDB4MTQxICAgICAgICAgICAvKiBzZXQgY29yZSBjbG9jayB0byAyMDAvMjAwLzEwMCBNSHogKi8KLQkJCQkJCS8qIDAxMDEwMDAwMDEgKi8KLQkJCQkJCS8qICAgICAgXl5eXl4gTWVtb3J5IFNwZWVkIDk5LjUzIE1IeiAgICAgICAgICovCi0JCQkJCQkvKiAgICBeXiAgICAgIFJ1biBNb2RlIFNwZWVkID0gMnggTWVtIFNwZWVkICAqLwotCQkJCQkJLyogXl4gICAgICAgICBUdXJibyBNb2RlIFNwLiA9IDF4IFJ1biBNLiBTcC4gKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkweDIwMDAwCQkvKiAxMjggS2lCICovCi0KLQkJCQkJCS8qIHZhbGlkIGJhdWRyYXRlcyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFICAgICAgeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQotCi0vKgotICogSTJDIGJ1cwotICovCi0jZGVmaW5lIENPTkZJR19JMkNfTVYJCQkxCi0jZGVmaW5lIENPTkZJR19NVl9JMkNfUkVHCQkweDQwMzAxNjgwCi0jZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJCTEKLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfU1BFRUQJCQk1MDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TTEFWRQkJCTB4ZmUKLQotI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX0VFUFJPTQkJMQotCi0jZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUCQkJMHgwMAkvKiBlbnZpcm9ubWVudCBzdGFydHMgaGVyZSAgKi8KLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkJMTAyNAkvKiAxIEtpQiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFIJCTB4NTAJLyogQTAgPSAwIChoYXJkd2lyZWQpICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk1CS8qIDUgYml0cyA9IDMyIG9jdGV0cyAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TCTE1CS8qIGJldHdlZW4gc3RvcCBhbmQgc3RhcnQgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9MRU4JCTIJLyogbGVuZ3RoIG9mIGFkZHJlc3MgICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfRUVQUk9NX1NJWkUJCQk0MDk2CS8qIHNpemUgaW4gYnl0ZXMgICAgICAgICAgICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19JTklUX0JPQVJECQkxCS8qIGJvYXJkIGhhcyBpdCdzIG93biBpbml0ICAqLwotCi0vKgotICogU01TQzkxQzExMSBOZXR3b3JrIENhcmQKLSAqLwotI2RlZmluZSBDT05GSUdfU01DOTExMTEJCTEKLSNkZWZpbmUgQ09ORklHX1NNQzkxMTExX0JBU0UJCTB4MTQwMDAwMDAgLyogY2hpcCBzZWxlY3QgNSAgICAgICAgICovCi0jdW5kZWYgIENPTkZJR19TTUNfVVNFXzMyX0JJVAkJICAgICAgICAgICAvKiAxNiBiaXQgYnVzIGFjY2VzcyAgICAgKi8KLSN1bmRlZiAgQ09ORklHX1NNQ185MTExMV9FWFRfUEhZCQkgICAvKiB3ZSB1c2UgaW50ZXJuYWwgcGh5ICAgKi8KLSNkZWZpbmUgQ09ORklHX1NNQ19BVVRPTkVHX1RJTUVPVVQJMTAJICAgLyogdGltZW91dCAxMCBzZWNvbmRzICAgICovCi0jdW5kZWYgIENPTkZJR19TSE9XX0FDVElWSVRZCi0jZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTEwCSAgIC8qICMgb2YgcmV0cmllcyAgICAgICAgICAqLwotCi0vKgotICogU3RhY2sgc2l6ZXMKLSAqCi0gKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdwotICovCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkUgICAgICAgICgxMjgqMTAyNCkgICAgICAvKiByZWd1bGFyIHN0YWNrICovCi0jaWZkZWYgIENPTkZJR19VU0VfSVJRCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRICAgICg0KjEwMjQpICAgICAgICAvKiBJUlEgc3RhY2sgKi8KLSNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEgICAgKDQqMTAyNCkgICAgICAgIC8qIEZJUSBzdGFjayAqLwotI2VuZGlmCi0KLS8qCi0gKiBQaHlzaWNhbCBNZW1vcnkgTWFwCi0gKi8KLSNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQkJLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAgICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMQkJMHhhMDAwMDAwMAkvKiBTRFJBTSBCYW5rICMxICAgICAgICAgICAgKi8KLSNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJMHgwNDAwMDAwMAkvKiA2NCBNQiAgICAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4MDAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAgICAgICAgICAgICovCi0jZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJMHgwMTAwMDAwMAkvKiAxNiBNQiAgICAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0RSQU1fQkFTRQkJMHhhMDAwMDAwMAkvKiBSQU0gc3RhcnRzIGhlcmUgICAgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19EUkFNX1NJWkUJCTB4MDQwMDAwMDAKLQotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UgICAgICAgICAgUEhZU19GTEFTSF8xCi0KLSNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQlQSFlTX1NEUkFNXzEKLSNkZWZpbmUJQ09ORklHX1NZU19JTklUX1NQX0FERFIJCShHRU5FUkFURURfR0JMX0RBVEFfU0laRSArIFBIWVNfU0RSQU1fMSkKLQotLyoKLSAqIEpGRlMyIHBhcnRpdGlvbnMKLSAqCi0gKi8KLS8qIGRldmVsb3BtZW50IGZsYXNoICovCi0jZGVmaW5lIENPTkZJR19NVERfSU5OT0tPTV8xNk1CCTEKLSN1bmRlZiBDT05GSUdfTVREX0lOTk9LT01fNjRNQgotCi0vKiBwcm9kdWN0aW9uIGZsYXNoICovCi0vKgotI2RlZmluZSBDT05GSUdfTVREX0lOTk9LT01fNjRNQgkxCi0jdW5kZWYgQ09ORklHX01URF9JTk5PS09NXzE2TUIKLSovCi0KLS8qIE5vIGNvbW1hbmQgbGluZSwgb25lIHN0YXRpYyBwYXJ0aXRpb24sIHdob2xlIGRldmljZSAqLwotI3VuZGVmIENPTkZJR19DTURfTVREUEFSVFMKLSNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJIm5vcjAiCi0jZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJCTB4RkZGRkZGRkYKLSNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCTB4MDAwMDAwMDAKLQotLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KLS8qIE5vdGU6IGZha2UgbXRkX2lkIHVzZWQsIG5vIGxpbnV4IG10ZCBtYXAgZmlsZSAqLwotLyoKLSNkZWZpbmUgQ09ORklHX0NNRF9NVERQQVJUUwotI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9aW5ub2tvbS0wIgotKi8KLQotLyogZGV2ZWxvcG1lbnQgZmxhc2ggKi8KLS8qCi0jZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWlubm9rb20tMDoyNTZrKHVib290KSw3NjhrKGtlcm5lbCksOG0odXNlciksN20oZGF0YSkiCi0qLwotCi0vKiBwcm9kdWN0aW9uIGZsYXNoICovCi0vKgotI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1pbm5va29tLTA6MjU2ayh1Ym9vdCksNzY4ayhrZXJuZWwpLDE2MjU2ayh1c2VyMSksMTYyNTZrKHVzZXIyKSwzMm0oZGF0YSkiCi0qLwotCi0vKgotICogR1BJTyBzZXR0aW5ncwotICoKLSAqIEdQMTUgPT0gbkNTMSAgICAgIGlzIDEKLSAqIEdQMjQgPT0gU0ZSTSAgICAgIGlzIDEKLSAqIEdQMjUgPT0gVFhEICAgICAgIGlzIDEKLSAqIEdQMzMgPT0gbkNTNSAgICAgIGlzIDEKLSAqIEdQMzkgPT0gRkZUWEQgICAgIGlzIDEKLSAqIEdQNDEgPT0gUlRTICAgICAgIGlzIDEKLSAqIEdQNDcgPT0gVFhEICAgICAgIGlzIDEKLSAqIEdQNDkgPT0gblBXRSAgICAgIGlzIDEKLSAqIEdQNjIgPT0gTEVEX0IgICAgIGlzIDEKLSAqIEdQNjMgPT0gVERNX09FICAgIGlzIDEKLSAqIEdQNzggPT0gbkNTMiAgICAgIGlzIDEKLSAqIEdQNzkgPT0gbkNTMyAgICAgIGlzIDEKLSAqIEdQODAgPT0gbkNTNCAgICAgIGlzIDEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0dQU1IwX1ZBTCAgICAgICAweDAzMDA4MDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR1BTUjFfVkFMICAgICAgIDB4QzAwMjgyODIKLSNkZWZpbmUgQ09ORklHX1NZU19HUFNSMl9WQUwgICAgICAgMHgwMDAxQzAwMAotCi0vKiBHUDAyID09IERPTl9SU1QgICBpcyAwCi0gKiBHUDIzID09IFNDTEsgICAgICBpcyAwCi0gKiBHUDQ1ID09IFVTQl9BQ1QgICBpcyAwCi0gKiBHUDYwID09IFBMTEVOICAgICBpcyAwCi0gKiBHUDYxID09IExFRF9BICAgICBpcyAwCi0gKiBHUDczID09IFNXVVBEX0xFRCBpcyAwCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HUENSMF9WQUwgICAgICAgMHgwMDgwMDAwNAotI2RlZmluZSBDT05GSUdfU1lTX0dQQ1IxX1ZBTCAgICAgICAweDMwMDAyMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR1BDUjJfVkFMICAgICAgIDB4MDAwMDAxMDAKLQotLyogR1AwMCA9PSBET05fUkVBRFkgaXMgaW5wdXQKLSAqIEdQMDEgPT0gRE9OX09LICAgIGlzIGlucHV0Ci0gKiBHUDAyID09IERPTl9SU1QgICBpcyBvdXRwdXQKLSAqIEdQMDMgPT0gUkVTRVRfSU5EIGlzIGlucHV0Ci0gKiBHUDA3ID09IFJFUzExICAgICBpcyBpbnB1dAotICogR1AwOSA9PSBSRVMxMiAgICAgaXMgaW5wdXQKLSAqIEdQMTEgPT0gU1dVUERBVEUgIGlzIGlucHV0Ci0gKiBHUDE0ID09IG5QT1dFUk9LICBpcyBpbnB1dAotICogR1AxNSA9PSBuQ1MxICAgICAgaXMgb3V0cHV0Ci0gKiBHUDE3ID09IFJFUzIyICAgICBpcyBpbnB1dAotICogR1AxOCA9PSBSRFkgICAgICAgaXMgaW5wdXQKLSAqIEdQMjMgPT0gU0NMSyAgICAgIGlzIG91dHB1dAotICogR1AyNCA9PSBTRlJNICAgICAgaXMgb3V0cHV0Ci0gKiBHUDI1ID09IFRYRCAgICAgICBpcyBvdXRwdXQKLSAqIEdQMjYgPT0gUlhEICAgICAgIGlzIGlucHV0Ci0gKiBHUDMyID09IFJFUzIxICAgICBpcyBpbnB1dAotICogR1AzMyA9PSBuQ1M1ICAgICAgaXMgb3V0cHV0Ci0gKiBHUDM0ID09IEZGUlhEICAgICBpcyBpbnB1dAotICogR1AzNSA9PSBDVFMgICAgICAgaXMgaW5wdXQKLSAqIEdQMzkgPT0gRkZUWEQgICAgIGlzIG91dHB1dAotICogR1A0MSA9PSBSVFMgICAgICAgaXMgb3V0cHV0Ci0gKiBHUDQyID09IFVTQl9PSyAgICBpcyBpbnB1dAotICogR1A0NSA9PSBVU0JfQUNUICAgaXMgb3V0cHV0Ci0gKiBHUDQ2ID09IFJYRCAgICAgICBpcyBpbnB1dAotICogR1A0NyA9PSBUWEQgICAgICAgaXMgb3V0cHV0Ci0gKiBHUDQ5ID09IG5QV0UgICAgICBpcyBvdXRwdXQKLSAqIEdQNTggPT0gbkNQVUJVU0lOVCBpcyBpbnB1dAotICogR1A1OSA9PSBMQU5JTlQgICAgaXMgaW5wdXQKLSAqIEdQNjAgPT0gUExMRU4gICAgIGlzIG91dHB1dAotICogR1A2MSA9PSBMRURfQSAgICAgaXMgb3V0cHV0Ci0gKiBHUDYyID09IExFRF9CICAgICBpcyBvdXRwdXQKLSAqIEdQNjMgPT0gVERNX09FICAgIGlzIG91dHB1dAotICogR1A2NCA9PSBuRFNQSU5UICAgaXMgaW5wdXQKLSAqIEdQNjUgPT0gU1RSQVAwICAgIGlzIGlucHV0Ci0gKiBHUDY3ID09IFNUUkFQMSAgICBpcyBpbnB1dAotICogR1A2OSA9PSBTVFJBUDIgICAgaXMgaW5wdXQKLSAqIEdQNzAgPT0gU1RSQVAzICAgIGlzIGlucHV0Ci0gKiBHUDcxID09IFNUUkFQNCAgICBpcyBpbnB1dAotICogR1A3MyA9PSBTV1VQRF9MRUQgaXMgb3V0cHV0Ci0gKiBHUDc4ID09IG5DUzIgICAgICBpcyBvdXRwdXQKLSAqIEdQNzkgPT0gbkNTMyAgICAgIGlzIG91dHB1dAotICogR1A4MCA9PSBuQ1M0ICAgICAgaXMgb3V0cHV0Ci0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19HUERSMF9WQUwgICAgICAgMHgwMzgwODAwNAotI2RlZmluZSBDT05GSUdfU1lTX0dQRFIxX1ZBTCAgICAgICAweEYwMDJBMjgyCi0jZGVmaW5lIENPTkZJR19TWVNfR1BEUjJfVkFMICAgICAgIDB4MDAwMUMyMDAKLQotLyogR1AxNSA9PSBuQ1MxICBpcyBBRjEwCi0gKiBHUDE4ID09IFJEWSAgIGlzIEFGMDEKLSAqIEdQMjMgPT0gU0NMSyAgaXMgQUYxMAotICogR1AyNCA9PSBTRlJNICBpcyBBRjEwCi0gKiBHUDI1ID09IFRYRCAgIGlzIEFGMTAKLSAqIEdQMjYgPT0gUlhEICAgaXMgQUYwMQotICogR1AzMyA9PSBuQ1M1ICBpcyBBRjEwCi0gKiBHUDM0ID09IEZGUlhEIGlzIEFGMDEKLSAqIEdQMzUgPT0gQ1RTICAgaXMgQUYwMQotICogR1AzOSA9PSBGRlRYRCBpcyBBRjEwCi0gKiBHUDQxID09IFJUUyAgIGlzIEFGMTAKLSAqIEdQNDYgPT0gUlhEICAgaXMgQUYxMAotICogR1A0NyA9PSBUWEQgICBpcyBBRjAxCi0gKiBHUDQ5ID09IG5QV0UgIGlzIEFGMTAKLSAqIEdQNzggPT0gbkNTMiAgaXMgQUYxMAotICogR1A3OSA9PSBuQ1MzICBpcyBBRjEwCi0gKiBHUDgwID09IG5DUzQgIGlzIEFGMTAKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIwX0xfVkFMICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjBfVV9WQUwgICAgIDB4MDAxQTgwMTAKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMV9MX1ZBTCAgICAgMHg2MDA4ODA1OAotI2RlZmluZSBDT05GSUdfU1lTX0dBRlIxX1VfVkFMICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIENPTkZJR19TWVNfR0FGUjJfTF9WQUwgICAgIDB4QTAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19HQUZSMl9VX1ZBTCAgICAgMHgwMDAwMDAwMgotCi0KLS8qIEZJWE1FOiBzZXQgR1BJT19SRVIvRkVSICovCi0KLS8qIFJESCA9IDEKLSAqIFBIICA9IDEKLSAqIFZGUyA9IDEKLSAqIEJGUyA9IDEKLSAqIFNTUyA9IDEKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX1BTU1JfVkFMCQkweDM3Ci0KLSNkZWZpbmUJQ09ORklHX1NZU19DQ0NSCQkJQ0NDUl9MMjd8Q0NDUl9NMnxDQ0NSX04xMAotI2RlZmluZQlDT05GSUdfU1lTX0NLRU4JCQkweDAKLQotLyoKLSAqIE1lbW9yeSBzZXR0aW5ncwotICoKLSAqIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzAvMSAtPiBmbGFzaCBiYW5rcwotICogY29uZmlndXJhdGlvbiBmb3IgbkNTMToKLSAqIFszMV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKLSAqIFszMDoyOF0gMDEwICAtIENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDIqKDIqTWVtQ2xrKSA9IDQwIG5zCi0gKiBbMjc6MjRdIDAxMDEgLSBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoNSsxKSpNZW1DbGsgPSA2MCBucwotICogWzIzOjIwXSAxMDExIC0gIiBmb3IgZmlyc3QgYWNjZXNzOiAoMTErMikqTWVtQ2xrID0gMTMwIG5zCi0gKiBbMTldICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCi0gKiBbMTg6MTZdIDAwMCAgLSBub25idXJzdCBSQU0gb3IgRkxBU0gKLSAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzA6Ci0gKiBbMTVdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMTQ6MTJdIDAxMCAgLSBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiAyKigyKk1lbUNsaykgPSA0MCBucwotICogWzExOjA4XSAwMTAxIC0gQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDUrMSkqTWVtQ2xrID0gNjAgbnMKLSAqIFswNzowNF0gMTAxMSAtICIgZm9yIGZpcnN0IGFjY2VzczogKDExKzIpKk1lbUNsayA9IDEzMCBucwotICogWzAzXSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzAyOjAwXSAwMDAgIC0gbm9uYnVyc3QgUkFNIG9yIEZMQVNICi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NU0MwX1ZBTAkJMHgyNWI4MjViOCAvKiBmbGFzaCBiYW5rcyAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBUaGlzIGlzIHRoZSBjb25maWd1cmF0aW9uIGZvciBuQ1MyLzMgLT4gVERNLVN3aXRjaCwgRFNQCi0gKiBjb25maWd1cmF0aW9uIGZvciBuQ1MzOiBEU1AKLSAqIFszMV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKLSAqIFszMDoyOF0gMDAxICAtIFJSUjM6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDEqKDIqTWVtQ2xrKSA9IDIwIG5zCi0gKiBbMjc6MjRdIDAwMTAgLSBSRE4zOiBBZGRyZXNzIHRvIGRhdGEgdmFsaWQgaW4gYnVyc3RzOiAoMisxKSpNZW1DbGsgPSAzMCBucwotICogWzIzOjIwXSAwMDExIC0gUkRGMzogQWRkcmVzcyBmb3IgZmlyc3QgYWNjZXNzOiAoMysxKSpNZW1DbGsgPSA0MCBucwotICogWzE5XSAgICAxICAgIC0gMTYgQml0IGJ1cyB3aWR0aAotICogWzE4OjE2XSAxMDAgIC0gdmFyaWFibGUgbGF0ZW5jeSBJL08KLSAqIGNvbmZpZ3VyYXRpb24gZm9yIG5DUzI6IFRETS1Td2l0Y2gKLSAqIFsxNV0gICAgMCAgICAtIFNsb3dlciBEZXZpY2UKLSAqIFsxNDoxMl0gMTAxICAtIFJSUjI6IENTIGRlc2VsZWN0IHRvIENTIHRpbWU6IDUqKDIqTWVtQ2xrKSA9IDEwMCBucwotICogWzExOjA4XSAxMDAxIC0gUkROMjogQWRkcmVzcyB0byBkYXRhIHZhbGlkIGluIGJ1cnN0czogKDkrMSkqTWVtQ2xrID0gMTAwIG5zCi0gKiBbMDc6MDRdIDAwMTEgLSBSREYyOiBBZGRyZXNzIGZvciBmaXJzdCBhY2Nlc3M6ICgzKzEpKk1lbUNsayA9IDQwIG5zCi0gKiBbMDNdICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCi0gKiBbMDI6MDBdIDEwMCAgLSB2YXJpYWJsZSBsYXRlbmN5IEkvTwotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTVNDMV9WQUwJCTB4MTIzQzU5M0MgLyogVERNIHN3aXRjaCwgRFNQICAgICAgICAgICAgICAgKi8KLQotLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgbkNTNC81IC0+IEV4dEJ1cywgTEFOIENvbnRyb2xsZXIKLSAqCi0gKiBjb25maWd1cmF0aW9uIGZvciBuQ1M1OiBMQU4gQ29udHJvbGxlcgotICogWzMxXSAgICAwICAgIC0gU2xvd2VyIERldmljZQotICogWzMwOjI4XSAwMDEgIC0gUlJSNTogQ1MgZGVzZWxlY3QgdG8gQ1MgdGltZTogMSooMipNZW1DbGspID0gMjAgbnMKLSAqIFsyNzoyNF0gMDAxMCAtIFJETjU6IEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICgyKzEpKk1lbUNsayA9IDMwIG5zCi0gKiBbMjM6MjBdIDAwMTEgLSBSREY1OiBBZGRyZXNzIGZvciBmaXJzdCBhY2Nlc3M6ICgzKzEpKk1lbUNsayA9IDQwIG5zCi0gKiBbMTldICAgIDEgICAgLSAxNiBCaXQgYnVzIHdpZHRoCi0gKiBbMTg6MTZdIDEwMCAgLSB2YXJpYWJsZSBsYXRlbmN5IEkvTwotICogY29uZmlndXJhdGlvbiBmb3IgbkNTNDogRXh0QnVzCi0gKiBbMTVdICAgIDAgICAgLSBTbG93ZXIgRGV2aWNlCi0gKiBbMTQ6MTJdIDExMCAgLSBSUlI0OiBDUyBkZXNlbGVjdCB0byBDUyB0aW1lOiA2KigyKk1lbUNsaykgPSAxMjAgbnMKLSAqIFsxMTowOF0gMTEwMCAtIFJETjQ6IEFkZHJlc3MgdG8gZGF0YSB2YWxpZCBpbiBidXJzdHM6ICgxMisxKSpNZW1DbGsgPSAxMzAgbnMKLSAqIFswNzowNF0gMTEwMSAtIFJERjQ6IEFkZHJlc3MgZm9yIGZpcnN0IGFjY2VzczogMTMtPigxNSsxKSpNZW1DbGsgPSAxNjAgbnMKLSAqIFswM10gICAgMSAgICAtIDE2IEJpdCBidXMgd2lkdGgKLSAqIFswMjowMF0gMTAwICAtIHZhcmlhYmxlIGxhdGVuY3kgSS9PCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NU0MyX1ZBTAkJMHgxMjNDNkNEQyAvKiBleHRyYSBidXMsIExBTiBjb250cm9sbGVyICAgICAqLwotCi0vKiBNRENORkc6IFNEUkFNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAqCi0gKiBbMzE6MjldICAgMDAwIC0gcmVzZXJ2ZWQKLSAqIFsyOF0gICAgICAwCSAtIG5vIFNBMTExMSBjb21wYXRpYmxpdHkgbW9kZQotICogWzI3XSAgICAgIDAgICAtIGxhdGNoIHJldHVybiBkYXRhIHdpdGggcmV0dXJuIGNsb2NrCi0gKiBbMjZdICAgICAgMCAgIC0gYWx0ZXJuYXRlIGFkZHJlc3NpbmcgZm9yIHBhaXIgMi8zCi0gKiBbMjU6MjRdICAgMDAgIC0gdGltaW5ncwotICogWzIzXSAgICAgIDAgICAtIGludGVybmFsIGJhbmtzIGluIGxvd2VyIHBhcnRpdGlvbiAyLzMgKG5vdCB1c2VkKQotICogWzIyOjIxXSAgIDAwICAtIHJvdyBhZGRyZXNzIGJpdHMgZm9yIHBhcnRpdGlvbiAyLzMgKG5vdCB1c2VkKQotICogWzIwOjE5XSAgIDAwICAtIGNvbHVtbiBhZGRyZXNzIGJpdHMgZm9yIHBhcnRpdGlvbiAyLzMgKG5vdCB1c2VkKQotICogWzE4XSAgICAgIDAgICAtIFNEUkFNIHBhcnRpdGlvbiAyLzMgd2lkdGggaXMgMzIgYml0Ci0gKiBbMTddICAgICAgMCAgIC0gU0RSQU0gcGFydGl0aW9uIDMgZGlzYWJsZWQKLSAqIFsxNl0gICAgICAwICAgLSBTRFJBTSBwYXJ0aXRpb24gMiBkaXNhYmxlZAotICogWzE1OjEzXSAgIDAwMCAtIHJlc2VydmVkCi0gKiBbMTJdICAgICAgMQkgLSBTQTExMTEgY29tcGF0aWJsaXR5IG1vZGUKLSAqIFsxMV0gICAgICAxICAgLSBsYXRjaCByZXR1cm4gZGF0YSB3aXRoIHJldHVybiBjbG9jawotICogWzEwXSAgICAgIDAgICAtIG5vIGFsdGVybmF0ZSBhZGRyZXNzaW5nIGZvciBwYWlyIDAvMQotICogWzA5OjA4XSAgIDAxICAtIHRSUD0yKk1lbUNsayBDTD0yIHRSQ0Q9MipNZW1DbGsgdFJBUz01Kk1lbUNsayB0UkM9OCpNZW1DbGsKLSAqIFs3XSAgICAgICAxICAgLSA0IGludGVybmFsIGJhbmtzIGluIGxvd2VyIHBhcnRpdGlvbiBwYWlyCi0gKiBbMDY6MDVdICAgMTAgIC0gMTMgcm93IGFkZHJlc3MgYml0cyBmb3IgcGFydGl0aW9uIDAvMQotICogWzA0OjAzXSAgIDAxICAtIDkgY29sdW1uIGFkZHJlc3MgYml0cyBmb3IgcGFydGl0aW9uIDAvMQotICogWzAyXSAgICAgIDAgICAtIFNEUkFNIHBhcnRpdGlvbiAwLzEgd2lkdGggaXMgMzIgYml0Ci0gKiBbMDFdICAgICAgMCAgIC0gZGlzYWJsZSBTRFJBTSBwYXJ0aXRpb24gMQotICogWzAwXSAgICAgIDEgICAtIGVuYWJsZSAgU0RSQU0gcGFydGl0aW9uIDAKLSAqLwotLyogdXNlIHRoZSBjb25maWd1cmF0aW9uIGFib3ZlIGJ1dCBkaXNhYmxlIHBhcnRpdGlvbiAwICovCi0jZGVmaW5lIENPTkZJR19TWVNfTURDTkZHX1ZBTAkJMHgwMDAwMTljOAotCi0vKiBNRFJFRlI6IFNEUkFNIFJlZnJlc2ggQ29udHJvbCBSZWdpc3RlcgotICoKLSAqIFszMjoyNl0gMCAgICAgLSByZXNlcnZlZAotICogWzI1XSAgICAwICAgICAtIEsyRlJFRTogbm90IGZyZWUgcnVubmluZwotICogWzI0XSAgICAwICAgICAtIEsxRlJFRTogbm90IGZyZWUgcnVubmluZwotICogWzIzXSAgICAxICAgICAtIEswRlJFRTogbm90IGZyZWUgcnVubmluZwotICogWzIyXSAgICAwICAgICAtIFNMRlJTSDogc2VsZiByZWZyZXNoIGRpc2FibGVkCi0gKiBbMjFdICAgIDAgICAgIC0gcmVzZXJ2ZWQKLSAqIFsyMF0gICAgMCAgICAgLSBBUEQ6IG5vIGF1dG8gcG93ZXIgZG93bgotICogWzE5XSAgICAwICAgICAtIEsyREIyOiBTRENMSzIgaXMgTWVtQ2xrCi0gKiBbMThdICAgIDAgICAgIC0gSzJSVU46IGRpc2FibGUgU0RDTEsyCi0gKiBbMTddICAgIDAgICAgIC0gSzFEQjI6IFNEQ0xLMSBpcyBNZW1DbGsKLSAqIFsxNl0gICAgMSAgICAgLSBLMVJVTjogZW5hYmxlIFNEQ0xLMQotICogWzE1XSAgICAxICAgICAtIEUxUElOOiBTRFJBTSBjbG9jayBlbmFibGUKLSAqIFsxNF0gICAgMSAgICAgLSBLMERCMjogU0RDTEswIGlzIE1lbUNsawotICogWzEzXSAgICAwICAgICAtIEswUlVOOiBkaXNhYmxlIFNEQ0xLMAotICogWzEyXSAgICAxICAgICAtIEUwUElOOiBkaXNhYmxlIFNEQ0tFMAotICogWzExOjAwXSAwMDAwMDAwMTEwMDAgLSAoNjRtcy84MTkyKSpNZW1DbGtGcmVxLzMyID0gMjQKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01EUkVGUl9WQUwJCTB4MDA4MUQwMTgKLQotLyogTURNUlM6IE1vZGUgUmVnaXN0ZXIgU2V0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAqCi0gKiBbMzFdICAgICAgMCAgICAgICAtIHJlc2VydmVkCi0gKiBbMzA6MjNdICAgMDAwMDAwMDAtIE1ETVJTMjogU0RSQU0yLzMgTVJTIFZhbHVlLiAobm90IHVzZWQpCi0gKiBbMjI6MjBdICAgMDAwICAgICAtIE1EQ0wyOiAgU0RSQU0yLzMgQ2FzIExhdGVuY3kuICAobm90IHVzZWQpCi0gKiBbMTldICAgICAgMCAgICAgICAtIE1EQUREMjogU0RSQU0yLzMgYnVyc3QgVHlwZS4gRml4ZWQgdG8gc2VxdWVudGlhbC4gIChub3QgdXNlZCkKLSAqIFsxODoxNl0gICAwMTAgICAgIC0gTURCTDI6ICBTRFJBTTIvMyBidXJzdCBMZW5ndGguIEZpeGVkIHRvIDQuICAobm90IHVzZWQpCi0gKiBbMTVdICAgICAgMCAgICAgICAtIHJlc2VydmVkCi0gKiBbMTQ6MDddICAgMDAwMDAwMDAtIE1ETVJTMDogU0RSQU0wLzEgTVJTIFZhbHVlLgotICogWzA2OjA0XSAgIDAxMCAgICAgLSBNRENMMDogIFNEUkFNMC8xIENhcyBMYXRlbmN5LgotICogWzAzXSAgICAgIDAgICAgICAgLSBNREFERDA6IFNEUkFNMC8xIGJ1cnN0IFR5cGUuIEZpeGVkIHRvIHNlcXVlbnRpYWwuCi0gKiBbMDI6MDBdICAgMDEwICAgICAtIE1EQkwwOiAgU0RSQU0wLzEgYnVyc3QgTGVuZ3RoLiBGaXhlZCB0byA0LgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTURNUlNfVkFMCQkweDAwMDIwMDIyCi0KLS8qCi0gKiBQQ01DSUEgYW5kIENGIEludGVyZmFjZXMKLSAqLwotI2RlZmluZSBDT05GSUdfU1lTX01FQ1JfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNNRU0wX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DTUVNMV9WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NQ0FUVDBfVkFMCQkweDAwMDAwMDAwCi0jZGVmaW5lIENPTkZJR19TWVNfTUNBVFQxX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DSU8wX1ZBTAkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX01DSU8xX1ZBTAkJMHgwMDAwMDAwMAotCi0jZGVmaW5lCUNPTkZJR19TWVNfRkxZQ05GR19WQUwJCTB4MDAwMDAwMDAKLSNkZWZpbmUJQ09ORklHX1NZU19TWENORkdfVkFMCQkweDAwMDAwMDAwCi0KLS8qCi0jZGVmaW5lIENTQjIyNl9VU0VSX0xFRDAJMHgwMDAwMDAwOAotI2RlZmluZSBDU0IyMjZfVVNFUl9MRUQxCTB4MDAwMDAwMTAKLSNkZWZpbmUgQ1NCMjI2X1VTRVJfTEVEMgkweDAwMDAwMDIwCi0qLwotCi0vKgotICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgotICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTICAgICAxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICAgICAgICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJMTI4CS8qIG1heCBudW1iZXIgb2Ygc2VjdC4gb24gb25lIGNoaXAgICovCi0KLS8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQgICAgKDIqQ09ORklHX1NZU19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgICAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUICAgICgyKkNPTkZJR19TWVNfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICAgICAgICovCi0KLSNlbmRpZiAgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2ludGVncmF0b3JhcC5oIGIvaW5jbHVkZS9jb25maWdzL2ludGVncmF0b3JhcC5oCmluZGV4IDYxYjg3NjEuLmExZmRiYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9pbnRlZ3JhdG9yYXAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvaW50ZWdyYXRvcmFwLmgKQEAgLTM3LDYgKzM3LDcgQEAKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKiAoZWFzeSB0byBjaGFuZ2UpCiAgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJCTB4MDEwMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MTAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4MTAwMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19IWgkJCTEwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9pbnRlZ3JhdG9yY3AuaCBiL2luY2x1ZGUvY29uZmlncy9pbnRlZ3JhdG9yY3AuaAppbmRleCA3YWUzNGI3Li5jY2JkZjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvaW50ZWdyYXRvcmNwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2ludGVncmF0b3JjcC5oCkBAIC0zNyw2ICszNyw3IEBACiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICogKGVhc3kgdG8gY2hhbmdlKQogICovCisjZGVmaW5lIENPTkZJR19TWVNfVEVYVF9CQVNFCQkweDAxMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDEwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDEwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfSFoJCQkxMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbTI4ZXZrLmggYi9pbmNsdWRlL2NvbmZpZ3MvbTI4ZXZrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiZDIwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9tMjhldmsuaApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICogb24gYmVoYWxmIG9mIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9fTTI4X0hfXworI2RlZmluZSBfX00yOF9IX18KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtYmFzZS5oPgorCisvKgorICogU29DIGNvbmZpZ3VyYXRpb25zCisgKi8KKyNkZWZpbmUJQ09ORklHX01YMjgJCQkJLyogaS5NWDI4IFNvQyAqLworI2RlZmluZQlDT05GSUdfTVhTX0dQSU8JCQkJLyogR1BJTyBjb250cm9sICovCisjZGVmaW5lCUNPTkZJR19TWVNfSFoJCTEwMDAJCS8qIFRpY2tzIHBlciBzZWNvbmQgKi8KKworLyoKKyAqIERlZmluZSBNMjhFVksgbWFjaGluZSB0eXBlIGJ5IGhhbmQgdW50aWwgaXQgbGFuZHMgaW4gbWFjaC10eXBlcworICovCisjZGVmaW5lCU1BQ0hfVFlQRV9NMjhFVksJMzYxMworCisjZGVmaW5lCUNPTkZJR19NQUNIX1RZUEUJTUFDSF9UWVBFX00yOEVWSworCisjZGVmaW5lCUNPTkZJR19TWVNfTk9fRkxBU0gKKyNkZWZpbmUJQ09ORklHX1NZU19JQ0FDSEVfT0ZGCisjZGVmaW5lCUNPTkZJR19TWVNfRENBQ0hFX09GRgorI2RlZmluZQlDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GCisjZGVmaW5lCUNPTkZJR19BUkNIX0NQVV9JTklUCisjZGVmaW5lCUNPTkZJR19BUkNIX01JU0NfSU5JVAorCisvKgorICogU1BMCisgKi8KKyNkZWZpbmUJQ09ORklHX1NQTAorI2RlZmluZQlDT05GSUdfU1BMX05PX0NQVV9TVVBQT1JUX0NPREUKKyNkZWZpbmUJQ09ORklHX1NQTF9TVEFSVF9TX1BBVEgJCSJib2FyZC9kZW54L20yOGV2ayIKKyNkZWZpbmUJQ09ORklHX1NQTF9MRFNDUklQVAkJImJvYXJkL2RlbngvbTI4ZXZrL3UtYm9vdC1zcGwubGRzIgorCisvKgorICogVS1Cb290IENvbW1hbmRzCisgKi8KKyNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KKyNkZWZpbmUJQ09ORklHX0RJU1BMQVlfQ1BVSU5GTworI2RlZmluZQlDT05GSUdfRE9TX1BBUlRJVElPTgorCisjZGVmaW5lCUNPTkZJR19DTURfQ0FDSEUKKyNkZWZpbmUJQ09ORklHX0NNRF9EQVRFCisjZGVmaW5lCUNPTkZJR19DTURfREhDUAorI2RlZmluZQlDT05GSUdfQ01EX0VFUFJPTQorI2RlZmluZQlDT05GSUdfQ01EX0VYVDIKKyNkZWZpbmUJQ09ORklHX0NNRF9GQVQKKyNkZWZpbmUJQ09ORklHX0NNRF9HUElPCisjZGVmaW5lCUNPTkZJR19DTURfSTJDCisjZGVmaW5lCUNPTkZJR19DTURfTUlJCisjZGVmaW5lCUNPTkZJR19DTURfTU1DCisjZGVmaW5lCUNPTkZJR19DTURfTkFORAorI2RlZmluZQlDT05GSUdfQ01EX05FVAorI2RlZmluZQlDT05GSUdfQ01EX05GUworI2RlZmluZQlDT05GSUdfQ01EX1BJTkcKKyNkZWZpbmUJQ09ORklHX0NNRF9TRVRFWFBSCisjZGVmaW5lCUNPTkZJR19DTURfU0YKKyNkZWZpbmUJQ09ORklHX0NNRF9TUEkKKyNkZWZpbmUJQ09ORklHX0NNRF9VU0IKKworLyoKKyAqIE1lbW9yeSBjb25maWd1cmF0aW9ucworICovCisjZGVmaW5lCUNPTkZJR19OUl9EUkFNX0JBTktTCQkxCQkvKiAxIGJhbmsgb2YgRFJBTSAqLworI2RlZmluZQlQSFlTX1NEUkFNXzEJCQkweDQwMDAwMDAwCS8qIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZQlQSFlTX1NEUkFNXzFfU0laRQkJMHg0MDAwMDAwMAkvKiBNYXggMSBHQiBSQU0gKi8KKyNkZWZpbmUJQ09ORklHX1NUQUNLU0laRQkJMHgwMDAxMDAwMAkvKiAxMjggS0Igc3RhY2sgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19NQUxMT0NfTEVOCQkweDAwNDAwMDAwCS8qIDQgTUIgZm9yIG1hbGxvYyAqLworI2RlZmluZQlDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CQkvKiBJbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4NDAwMDAwMDAJLyogTWVtdGVzdCBzdGFydCBhZHIgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHg0MDQwMDAwMAkvKiA0IE1CIFJBTSB0ZXN0ICovCisjZGVmaW5lCUNPTkZJR19TWVNfU0RSQU1fQkFTRQkJUEhZU19TRFJBTV8xCisvKiBQb2ludCBpbml0aWFsIFNQIGluIFNSQU0gc28gU1BMIGNhbiB1c2UgaXQgdG9vLiAqLworI2RlZmluZQlDT05GSUdfU1lTX0lOSVRfU1BfQUREUgkJMHgwMDAwMjAwMAorLyoKKyAqIFdlIG5lZWQgdG8gc2FjcmlmaWNlIGZpcnN0IDQgYnl0ZXMgb2YgUkFNIGhlcmUgdG8gYXZvaWQgdHJpZ2dlcmluZyBzb21lCisgKiBzdHJhbmdlIEJVRyBpbiBST00gY29ycnVwdGluZyBmaXJzdCA0IGJ5dGVzIG9mIFJBTSB3aGVuIGxvYWRpbmcgVS1Cb290CisgKiBiaW5hcnkuIEluIGNhc2UgdGhlcmUgd2FzIG1vcmUgb2YgdGhpcyBtZXNzLCAweDEwMCBieXRlcyBhcmUgc2tpcHBlZC4KKyAqLworI2RlZmluZQlDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHg0MDAwMDEwMAorCisvKgorICogVS1Cb290IGdlbmVyYWwgY29uZmlndXJhdGlvbnMKKyAqLworI2RlZmluZQlDT05GSUdfU1lTX0xPTkdIRUxQCisjZGVmaW5lCUNPTkZJR19TWVNfUFJPTVBUCSI9PiAiCisjZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIGJ1ZmZlciBzaXplICovCisjZGVmaW5lCUNPTkZJR19TWVNfUEJTSVpFCVwKKwkoQ09ORklHX1NZU19DQlNJWkUgKyBzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpICsgMTYpCisJCQkJCQkvKiBQcmludCBidWZmZXIgc2l6ZSAqLworI2RlZmluZQlDT05GSUdfU1lTX01BWEFSR1MJMzIJCS8qIE1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lCUNPTkZJR19TWVNfQkFSR1NJWkUJQ09ORklHX1NZU19DQlNJWkUKKwkJCQkJCS8qIEJvb3QgYXJndW1lbnQgYnVmZmVyIHNpemUgKi8KKyNkZWZpbmUJQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUJCQkvKiBVLUJPT1QgdmVyc2lvbiAqLworI2RlZmluZQlDT05GSUdfQVVUT19DT01QTEVURQkJCS8qIENvbW1hbmQgYXV0byBjb21wbGV0ZSAqLworI2RlZmluZQlDT05GSUdfQ01ETElORV9FRElUSU5HCQkJLyogQ29tbWFuZCBoaXN0b3J5IGV0YyAqLworI2RlZmluZQlDT05GSUdfU1lTX0hVU0hfUEFSU0VSCisjZGVmaW5lCUNPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyCSI+ICIKKworLyoKKyAqIFNlcmlhbCBEcml2ZXIKKyAqLworI2RlZmluZQlDT05GSUdfUEwwMTFfU0VSSUFMCisjZGVmaW5lCUNPTkZJR19QTDAxMV9DTE9DSwkJMjQwMDAwMDAKKyNkZWZpbmUJQ09ORklHX1BMMDF4X1BPUlRTCQl7ICh2b2lkICopTVhTX1VBUlREQkdfQkFTRSB9CisjZGVmaW5lCUNPTkZJR19DT05TX0lOREVYCQkwCisjZGVmaW5lCUNPTkZJR19CQVVEUkFURQkJCTExNTIwMAkvKiBEZWZhdWx0IGJhdWQgcmF0ZSAqLworI2RlZmluZQlDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KKworLyoKKyAqIE1NQyBEcml2ZXIKKyAqLworI2lmZGVmCUNPTkZJR19DTURfTU1DCisjZGVmaW5lCUNPTkZJR19NTUMKKyNkZWZpbmUJQ09ORklHX0dFTkVSSUNfTU1DCisjZGVmaW5lCUNPTkZJR19NWFNfTU1DCisjZW5kaWYKKworLyoKKyAqIE5BTkQKKyAqLworI2lmZGVmCUNPTkZJR19DTURfTkFORAorI2RlZmluZQlDT05GSUdfTkFORF9NWFMKKyNkZWZpbmUgQ09ORklHX0FQQkhfRE1BCisjZGVmaW5lCUNPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEKKyNkZWZpbmUJQ09ORklHX1NZU19OQU5EX0JBU0UJCTB4NjAwMDAwMDAKKyNkZWZpbmUJQ09ORklHX1NZU19OQU5EXzVfQUREUl9DWUNMRQorI2RlZmluZQlOQU5EX01BWF9DSElQUwkJCTgKKworLyogRW52aXJvbm1lbnQgaXMgaW4gTkFORCAqLworI2RlZmluZQlDT05GSUdfRU5WX0lTX0lOX05BTkQKKyNkZWZpbmUJQ09ORklHX0VOVl9TSVpFCQkJKDE2ICogMTAyNCkKKyNkZWZpbmUJQ09ORklHX0VOVl9TSVpFX1JFRFVORAkJQ09ORklHX0VOVl9TSVpFCisjZGVmaW5lCUNPTkZJR19FTlZfU0VDVF9TSVpFCQkoMTI4ICogMTAyNCkKKyNkZWZpbmUJQ09ORklHX0VOVl9SQU5HRQkJKDUxMiAqIDEwMjQpCisjZGVmaW5lCUNPTkZJR19FTlZfT0ZGU0VUCQkweDMwMDAwMAorI2RlZmluZQlDT05GSUdfRU5WX09GRlNFVF9SRURVTkQJXAorCQkoQ09ORklHX0VOVl9PRkZTRVQgKyBDT05GSUdfRU5WX1JBTkdFKQorCisjZGVmaW5lCUNPTkZJR19DTURfVUJJCisjZGVmaW5lCUNPTkZJR19DTURfVUJJRlMKKyNkZWZpbmUJQ09ORklHX0NNRF9NVERQQVJUUworI2RlZmluZQlDT05GSUdfUkJUUkVFCisjZGVmaW5lCUNPTkZJR19MWk8KKyNkZWZpbmUJQ09ORklHX01URF9ERVZJQ0UKKyNkZWZpbmUJQ09ORklHX01URF9QQVJUSVRJT05TCisjZGVmaW5lCU1URElEU19ERUZBVUxUCQkJIm5hbmQwPWdwbWktbmFuZC4wIgorI2RlZmluZQlNVERQQVJUU19ERUZBVUxUCQkJXAorCSJtdGRwYXJ0cz1ncG1pLW5hbmQuMDoiCQkJXAorCQkiM20oYm9vdGxvYWRlcilybywiCQlcCisJCSI1MTJrKGVudmlyb25tZW50KSwiCQlcCisJCSI1MTJrKHJlZHVuZGFudC1lbnZpcm9ubWVudCksIglcCisJCSI0bShrZXJuZWwpLCIJCQlcCisJCSItKGZpbGVzeXN0ZW0pIgorI2VuZGlmCisKKy8qCisgKiBFdGhlcm5ldCBvbiBTT0MgKEZFQykKKyAqLworI2lmZGVmCUNPTkZJR19DTURfTkVUCisjZGVmaW5lCUNPTkZJR19ORVRfTVVMVEkKKyNkZWZpbmUJQ09ORklHX0VUSFBSSU1FCQkJIkZFQzAiCisjZGVmaW5lCUNPTkZJR19GRUNfTVhDCisjZGVmaW5lCUNPTkZJR19GRUNfTVhDX01VTFRJCisjZGVmaW5lCUNPTkZJR19NSUkKKyNkZWZpbmUJQ09ORklHX0RJU0NPVkVSX1BIWQorI2RlZmluZQlDT05GSUdfRkVDX1hDVl9UWVBFCQlSTUlJCisjZW5kaWYKKworLyoKKyAqIEkyQworICovCisjaWZkZWYJQ09ORklHX0NNRF9JMkMKKyNkZWZpbmUJQ09ORklHX0kyQ19NWFMKKyNkZWZpbmUJQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lCUNPTkZJR19TWVNfSTJDX1NQRUVECQk0MDAwMDAKKyNlbmRpZgorCisvKgorICogRUVQUk9NCisgKi8KKyNpZmRlZglDT05GSUdfQ01EX0VFUFJPTQorI2RlZmluZQlDT05GSUdfU1lTX0kyQ19NVUxUSV9FRVBST01TCisjZGVmaW5lCUNPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSX0xFTgkyCisjZW5kaWYKKworLyoKKyAqIFJUQworICovCisjaWZkZWYJQ09ORklHX0NNRF9EQVRFCisvKiBVc2UgdGhlIGludGVybmFsIFJUQyBpbiB0aGUgTVhTIGNoaXAgKi8KKyNkZWZpbmUJQ09ORklHX1JUQ19JTlRFUk5BTAorI2lmZGVmCUNPTkZJR19SVENfSU5URVJOQUwKKyNkZWZpbmUJQ09ORklHX1JUQ19NWFMKKyNlbHNlCisjZGVmaW5lCUNPTkZJR19SVENfTTQxVDYyCisjZGVmaW5lCUNPTkZJR19TWVNfSTJDX1JUQ19BRERSCQkweDY4CisjZGVmaW5lCUNPTkZJR19TWVNfTTQxVDExX0JBU0VfWUVBUgkyMDAwCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogVVNCCisgKi8KKyNpZmRlZglDT05GSUdfQ01EX1VTQgorI2RlZmluZQlDT05GSUdfVVNCX0VIQ0kKKyNkZWZpbmUJQ09ORklHX1VTQl9FSENJX01YUworI2RlZmluZQlDT05GSUdfRUhDSV9NWFNfUE9SVAkJMQorI2RlZmluZQlDT05GSUdfRUhDSV9JU19UREkKKyNkZWZpbmUJQ09ORklHX1VTQl9TVE9SQUdFCisjZW5kaWYKKworLyoKKyAqIFNQSQorICovCisjaWZkZWYJQ09ORklHX0NNRF9TUEkKKyNkZWZpbmUJQ09ORklHX0hBUkRfU1BJCisjZGVmaW5lCUNPTkZJR19NWFNfU1BJCisjZGVmaW5lCUNPTkZJR19TUElfSEFMRl9EVVBMRVgKKyNkZWZpbmUJQ09ORklHX0RFRkFVTFRfU1BJX0JVUwkJMgorI2RlZmluZQlDT05GSUdfREVGQVVMVF9TUElfTU9ERQkJU1BJX01PREVfMAorCisvKiBTUEkgRkxBU0ggKi8KKyNpZmRlZglDT05GSUdfQ01EX1NGCisjZGVmaW5lCUNPTkZJR19TUElfRkxBU0gKKyNkZWZpbmUJQ09ORklHX1NQSV9GTEFTSF9TVE1JQ1JPCisjZGVmaW5lCUNPTkZJR19TUElfRkxBU0hfQ1MJCTIKKyNkZWZpbmUJQ09ORklHX1NGX0RFRkFVTFRfTU9ERQkJU1BJX01PREVfMAorI2RlZmluZQlDT05GSUdfU0ZfREVGQVVMVF9TUEVFRAkJMjQwMDAwMDAKKworI2RlZmluZQlDT05GSUdfRU5WX1NQSV9DUwkJMAorI2RlZmluZQlDT05GSUdfRU5WX1NQSV9CVVMJCTIKKyNkZWZpbmUJQ09ORklHX0VOVl9TUElfTUFYX0haCQkyNDAwMDAwMAorI2RlZmluZQlDT05GSUdfRU5WX1NQSV9NT0RFCQlTUElfTU9ERV8wCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogQm9vdCBMaW51eAorICovCisjZGVmaW5lCUNPTkZJR19DTURMSU5FX1RBRworI2RlZmluZQlDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MKKyNkZWZpbmUJQ09ORklHX0JPT1RERUxBWQkzCisjZGVmaW5lCUNPTkZJR19CT09URklMRQkJInVJbWFnZSIKKyNkZWZpbmUJQ09ORklHX0JPT1RBUkdTCQkiY29uc29sZT10dHlBTTAsMTE1MjAwbjggIgorI2RlZmluZQlDT05GSUdfQk9PVENPTU1BTkQJInJ1biBib290Y21kX25ldCIKKyNkZWZpbmUJQ09ORklHX0xPQURBRERSCQkweDQyMDAwMDAwCisjZGVmaW5lCUNPTkZJR19TWVNfTE9BRF9BRERSCUNPTkZJR19MT0FEQUREUgorCisvKgorICogRXh0cmEgRW52aXJvbm1lbnRzCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQkJXAorCSJ1cGRhdGVfbmFuZF9mdWxsX2ZpbGVuYW1lPXUtYm9vdC5uYW5kXDAiCQkJXAorCSJ1cGRhdGVfbmFuZF9maXJtd2FyZV9maWxlbmFtZT11LWJvb3Quc2JcMCIJCQlcCisJInVwZGF0ZV9uYW5kX2Zpcm13YXJlX21heHN6PTB4MTAwMDAwXDAiCQkJCVwKKwkidXBkYXRlX25hbmRfc3RyaWRlPTB4NDBcMCIJLyogTVgyOCBkYXRhc2hlZXQgY2guIDEyLjEyICovCVwKKwkidXBkYXRlX25hbmRfY291bnQ9MHg0XDAiCS8qIE1YMjggZGF0YXNoZWV0IGNoLiAxMi4xMiAqLwlcCisJInVwZGF0ZV9uYW5kX2dldF9mY2Jfc2l6ZT0iCS8qIEdldCBzaXplIG9mIEZDQiBibG9ja3MgKi8JXAorCQkibmFuZCBkZXZpY2UgMCA7ICIJCQkJCVwKKwkJIm5hbmQgaW5mbyA7ICIJCQkJCQlcCisJCSJzZXRleHByIGZjYl9zeiAke3VwZGF0ZV9uYW5kX3N0cmlkZX0gKiAke3VwZGF0ZV9uYW5kX2NvdW50fTsiIFwKKwkJInNldGV4cHIgdXBkYXRlX25hbmRfZmNiICR7ZmNiX3N6fSAqICR7bmFuZF93cml0ZXNpemV9XDAiIFwKKwkidXBkYXRlX25hbmRfZnVsbD0iCQkvKiBVcGRhdGUgRkNCLCBEQkJUIGFuZCBGVyAqLwlcCisJCSJpZiB0ZnRwICR7dXBkYXRlX25hbmRfZnVsbF9maWxlbmFtZX0gOyB0aGVuICIJCVwKKwkJInJ1biB1cGRhdGVfbmFuZF9nZXRfZmNiX3NpemUgOyAiCQkJXAorCQkibmFuZCBzY3J1YiAteSAweDAgJHtmaWxlc2l6ZX0gOyAiCQkJXAorCQkibmFuZCB3cml0ZS5yYXcgJHtsb2FkYWRkcn0gMHgwICR7dXBkYXRlX25hbmRfZmNifSA7ICIJXAorCQkic2V0ZXhwciB1cGRhdGVfb2ZmICR7bG9hZGFkZHJ9ICsgJHt1cGRhdGVfbmFuZF9mY2J9IDsgIiBcCisJCSJzZXRleHByIHVwZGF0ZV9zeiAke2ZpbGVzaXplfSAtICR7dXBkYXRlX25hbmRfZmNifSA7ICIgXAorCQkibmFuZCB3cml0ZSAke3VwZGF0ZV9vZmZ9ICR7dXBkYXRlX25hbmRfZmNifSAke3VwZGF0ZV9zen0gOyAiIFwKKwkJImZpXDAiCQkJCQkJCVwKKwkidXBkYXRlX25hbmRfZmlybXdhcmU9IgkJLyogVXBkYXRlIG9ubHkgZmlybXdhcmUgKi8JXAorCQkiaWYgdGZ0cCAke3VwZGF0ZV9uYW5kX2Zpcm13YXJlX2ZpbGVuYW1lfSA7IHRoZW4gIglcCisJCSJydW4gdXBkYXRlX25hbmRfZ2V0X2ZjYl9zaXplIDsgIgkJCVwKKwkJInNldGV4cHIgZmNiX3N6ICR7dXBkYXRlX25hbmRfZmNifSAqIDIgOyAiIC8qIEZDQiArIERCQlQgKi8gXAorCQkic2V0ZXhwciBmd19zeiAke3VwZGF0ZV9uYW5kX2Zpcm13YXJlX21heHN6fSAqIDIgOyAiCVwKKwkJInNldGV4cHIgZndfb2ZmICR7ZmNiX3N6fSArICR7dXBkYXRlX25hbmRfZmlybXdhcmVfbWF4c3p9OyIgXAorCQkibmFuZCBlcmFzZSAke2ZjYl9zen0gJHtmd19zen0gOyAiCQkJXAorCQkibmFuZCB3cml0ZSAke2xvYWRhZGRyfSAke2ZjYl9zen0gJHtmaWxlc2l6ZX0gOyAiCVwKKwkJIm5hbmQgd3JpdGUgJHtsb2FkYWRkcn0gJHtmd19vZmZ9ICR7ZmlsZXNpemV9IDsgIglcCisJCSJmaVwwIgorCisjZW5kaWYgLyogX19NMjhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbmlvczItZ2VuZXJpYy5oIGIvaW5jbHVkZS9jb25maWdzL25pb3MyLWdlbmVyaWMuaAppbmRleCAxMzk1OTM5Li45YmEzNWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvbmlvczItZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9uaW9zMi1nZW5lcmljLmgKQEAgLTYzLDYgKzYzLDEwIEBACiAvKgogICogU1RBVFVTIExFRAogICovCisjZGVmaW5lIENPTkZJR19BTFRFUkFfUElPCisjZGVmaW5lIENPTkZJR19TWVNfQUxURVJBX1BJT19OVU0JMQorI2RlZmluZSBDT05GSUdfU1lTX0FMVEVSQV9QSU9fR1BJT19OVU0JTEVEX1BJT19XSURUSAorCiAjZGVmaW5lIENPTkZJR19TVEFUVVNfTEVECQkvKiBFbmFibGUgc3RhdHVzIGRyaXZlciAqLwogI2RlZmluZSBDT05GSUdfR1BJT19MRUQJCS8qIEVuYWJsZSBHUElPIExFRCBkcml2ZXIgKi8KICNkZWZpbmUgQ09ORklHX0dQSU8JCQkvKiBFbmFibGUgR1BJTyBkcml2ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19iZWFnbGUuaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19iZWFnbGUuaAppbmRleCBlYmI1NzJlLi4xNWU0MGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX2JlYWdsZS5oCkBAIC0yMTUsNyArMjE1LDcgQEAKIAkicmRhZGRyPTB4ODEwMDAwMDBcMCIgXAogCSJ1c2J0dHk9Y2RjX2FjbVwwIiBcCiAJImJvb3RmaWxlPXVJbWFnZS5iZWFnbGVcMCIgXAotCSJjb25zb2xlPXR0eVMyLDExNTIwMG44XDAiIFwKKwkiY29uc29sZT10dHkwMiwxMTUyMDBuOFwwIiBcCiAJIm1wdXJhdGU9YXV0b1wwIiBcCiAJImJ1ZGR5PW5vbmUgIlwKIAkib3B0YXJncz1cMCIgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXA0X2NvbW1vbi5oIGIvaW5jbHVkZS9jb25maWdzL29tYXA0X2NvbW1vbi5oCmluZGV4IGY1MzU3NjkuLjQyYThmMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9vbWFwNF9jb21tb24uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDRfY29tbW9uLmgKQEAgLTM5LDcgKzM5LDcgQEAKIAogLyogR2V0IENQVSBkZWZzICovCiAjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvb21hcDQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwLmg+CiAKIC8qIERpc3BsYXkgQ1BVIGFuZCBCb2FyZCBJbmZvICovCiAjZGVmaW5lIENPTkZJR19ESVNQTEFZX0NQVUlORk8JCTEKQEAgLTEyMiw2ICsxMjIsOSBAQAogLyogRmxhc2ggKi8KICNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAkxCiAKKy8qIGNsb2NrcyAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMT0NLU19FTkFCTEVfQUxMCisKIC8qIGNvbW1hbmRzIHRvIGluY2x1ZGUgKi8KICNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KIApAQCAtMjc4LDQgKzI4MSw2IEBACiAjZGVmaW5lIENPTkZJR19TUExfU0VSSUFMX1NVUFBPUlQKICNkZWZpbmUgQ09ORklHX1NQTF9MRFNDUklQVCAiYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL3UtYm9vdC1zcGwubGRzIgogCisjZGVmaW5lIENPTkZJR19TWVNfRU5BQkxFX1BBRFNfQUxMCisKICNlbmRpZiAvKiBfX0NPTkZJR19PTUFQNF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXA1X2V2bS5oIGIvaW5jbHVkZS9jb25maWdzL29tYXA1X2V2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NjNmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDVfZXZtLmgKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTAKKyAqIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZC4KKyAqIFNyaWNoYXJhbiBSCSAgPHIuc3JpY2hhcmFuQHRpLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gT01BUDQgZG9uZSBieToKKyAqCUFuZWVzaCBWIDxhbmVlc2hAdGkuY29tPgorICoKKyAqIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBUSSBFVk01NDMwIGJvYXJkLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19BUk1WNwkvKiBUaGlzIGlzIGFuIEFSTSBWNyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfT01BUAkvKiBpbiBhIFRJIE9NQVAgY29yZSAqLworI2RlZmluZSBDT05GSUdfT01BUDU0WFgJLyogd2hpY2ggaXMgYSA1NFhYICovCisjZGVmaW5lIENPTkZJR19PTUFQNTQzMAkvKiB3aGljaCBpcyBpbiBhIDU0MzAgKi8KKyNkZWZpbmUgQ09ORklHXzU0MzBFVk0JLyogd29ya2luZyB3aXRoIEVWTSAqLworI2RlZmluZSBDT05GSUdfQVJDSF9DUFVfSU5JVAorCisvKiBHZXQgQ1BVIGRlZnMgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbWFwLmg+CisKKy8qIERpc3BsYXkgQ1BVIGFuZCBCb2FyZCBJbmZvICovCisjZGVmaW5lIENPTkZJR19ESVNQTEFZX0NQVUlORk8KKyNkZWZpbmUgQ09ORklHX0RJU1BMQVlfQk9BUkRJTkZPCisKKy8qIENsb2NrIERlZmluZXMgKi8KKyNkZWZpbmUgVl9PU0NLCTM4NDAwMDAwIC8qIENsb2NrIG91dHB1dCBmcm9tIFQyICovCisjZGVmaW5lIFZfU0NMSwlWX09TQ0sKKworI3VuZGVmIENPTkZJR19VU0VfSVJRCS8qIG5vIHN1cHBvcnQgZm9yIElSUXMgKi8KKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCisKKyNkZWZpbmUgQ09ORklHX09GX0xJQkZEVAorCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRyAvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MKKyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcKKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICogVG90YWwgU2l6ZSBFbnZpcm9ubWVudCAtIDEyOGsKKyAqIE1hbGxvYyAtIGFkZCAyNTZrCisgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkJKDEyOCA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoQ09ORklHX0VOVl9TSVpFICsgKDI1NiA8PCAxMCkpCisvKiBWZWN0b3IgQmFzZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0NBOV9WRUNUT1JfQkFTRQlTUkFNX1JPTV9WRUNUX0JBU0UKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogc2VyaWFsIHBvcnQgLSBOUzE2NTUwIGNvbXBhdGlibGUKKyAqLworI2RlZmluZSBWX05TMTY1NTBfQ0xLCQkJNDgwMDAwMDAKKworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTAKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1NFUklBTAorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfUkVHX1NJWkUJKC00KQorI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ0xLCQlWX05TMTY1NTBfQ0xLCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCQkzCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DT00zCQlVQVJUM19CQVNFCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJezQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsXAorCQkJCQkxMTUyMDB9CisvKiBJMkMgICovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJMTAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkxCisjZGVmaW5lIENPTkZJR19EUklWRVJfT01BUDM0WFhfSTJDCisjZGVmaW5lIENPTkZJR19JMkNfTVVMVElfQlVTCisKKy8qIFRXTDYwMzAgKi8KKyNkZWZpbmUgQ09ORklHX1RXTDYwMzBfUE9XRVIKKyNkZWZpbmUgQ09ORklHX0NNRF9CQVQKKworLyogTU1DICovCisjZGVmaW5lIENPTkZJR19HRU5FUklDX01NQworI2RlZmluZSBDT05GSUdfTU1DCisjZGVmaW5lIENPTkZJR19PTUFQX0hTTU1DCisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCisKKy8qIE1NQyBFTlYgcmVsYXRlZCBkZWZpbmVzICovCisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fTU1DCisjZGVmaW5lIENPTkZJR19TWVNfTU1DX0VOVl9ERVYJCTEJLyogU0xPVDI6IGVNTUMoMSkgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCTB4RTAwMDAKKworLyogVVNCICovCisjZGVmaW5lIENPTkZJR19NVVNCX1VEQworI2RlZmluZSBDT05GSUdfVVNCX09NQVAzCisKKy8qIFVTQiBkZXZpY2UgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDT05GSUdfVVNCX0RFVklDRQorI2RlZmluZSBDT05GSUdfVVNCX1RUWQorI2RlZmluZSBDT05GSUdfU1lTX0NPTlNPTEVfSVNfSU5fRU5WCisKKy8qIEZsYXNoICovCisjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gKKworLyogQ2FjaGUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0laRQk2NAorI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSElGVAk2CisKKy8qIGNvbW1hbmRzIHRvIGluY2x1ZGUgKi8KKyNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KKworLyogRW5hYmxlZCBjb21tYW5kcyAqLworI2RlZmluZSBDT05GSUdfQ01EX0VYVDIJCS8qIEVYVDIgU3VwcG9ydCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9GQVQJCS8qIEZBVCBzdXBwb3J0ICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9JMkMJCS8qIEkyQyBzZXJpYWwgYnVzIHN1cHBvcnQJKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9NTUMJCS8qIE1NQyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9TQVZFRU5WCisKKy8qIERpc2FibGVkIGNvbW1hbmRzICovCisjdW5kZWYgQ09ORklHX0NNRF9ORVQKKyN1bmRlZiBDT05GSUdfQ01EX05GUworI3VuZGVmIENPTkZJR19DTURfRlBHQQkJLyogRlBHQSBjb25maWd1cmF0aW9uIFN1cHBvcnQgICAqLworI3VuZGVmIENPTkZJR19DTURfSU1MUwkJLyogTGlzdCBhbGwgZm91bmQgaW1hZ2VzICAgICAgICAqLworCisvKgorICogRW52aXJvbm1lbnQgc2V0dXAKKyAqLworCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKyNkZWZpbmUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyBcCisJImxvYWRhZGRyPTB4ODIwMDAwMDBcMCIgXAorCSJjb25zb2xlPXR0eVMyLDExNTIwMG44XDAiIFwKKwkidXNidHR5PWNkY19hY21cMCIgXAorCSJ2cmFtPTE2TVwwIiBcCisJIm1tY2Rldj0wXDAiIFwKKwkibW1jcm9vdD0vZGV2L21tY2JsazBwMiByd1wwIiBcCisJIm1tY3Jvb3Rmc3R5cGU9ZXh0MyByb290d2FpdFwwIiBcCisJIm1tY2FyZ3M9c2V0ZW52IGJvb3RhcmdzIGNvbnNvbGU9JHtjb25zb2xlfSAiIFwKKwkJInZyYW09JHt2cmFtfSAiIFwKKwkJInJvb3Q9JHttbWNyb290fSAiIFwKKwkJInJvb3Rmc3R5cGU9JHttbWNyb290ZnN0eXBlfVwwIiBcCisJImxvYWRib290c2NyaXB0PWZhdGxvYWQgbW1jICR7bW1jZGV2fSAke2xvYWRhZGRyfSBib290LnNjclwwIiBcCisJImJvb3RzY3JpcHQ9ZWNobyBSdW5uaW5nIGJvb3RzY3JpcHQgZnJvbSBtbWMke21tY2Rldn0gLi4uOyAiIFwKKwkJInNvdXJjZSAke2xvYWRhZGRyfVwwIiBcCisJImxvYWR1aW1hZ2U9ZmF0bG9hZCBtbWMgJHttbWNkZXZ9ICR7bG9hZGFkZHJ9IHVJbWFnZVwwIiBcCisJIm1tY2Jvb3Q9ZWNobyBCb290aW5nIGZyb20gbW1jJHttbWNkZXZ9IC4uLjsgIiBcCisJCSJydW4gbW1jYXJnczsgIiBcCisJCSJib290bSAke2xvYWRhZGRyfVwwIiBcCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5EIFwKKwkiaWYgbW1jIHJlc2NhbiAke21tY2Rldn07IHRoZW4gIiBcCisJCSJpZiBydW4gbG9hZGJvb3RzY3JpcHQ7IHRoZW4gIiBcCisJCQkicnVuIGJvb3RzY3JpcHQ7ICIgXAorCQkiZWxzZSAiIFwKKwkJCSJpZiBydW4gbG9hZHVpbWFnZTsgdGhlbiAiIFwKKwkJCQkicnVuIG1tY2Jvb3Q7ICIgXAorCQkJImZpOyAiIFwKKwkJImZpOyAiIFwKKwkiZmkiCisKKyNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUJCTEKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IVVNIX1BBUlNFUgkvKiB1c2UgImh1c2giIGNvbW1hbmQgcGFyc2VyICovCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUX0hVU0hfUFMyCSI+ICIKKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFQJCSJPTUFQNTQzMCBFVk0gIyAiCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCQkyNTYKKy8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUgKyBcCisJCQkJCXNpemVvZihDT05GSUdfU1lTX1BST01QVCkgKyAxNikKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgorLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQkoQ09ORklHX1NZU19DQlNJWkUpCisKKy8qCisgKiBtZW10ZXN0IHNldHVwCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJKENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVCArICgzMiA8PCAyMCkpCisKKy8qIERlZmF1bHQgbG9hZCBhZGRyZXNzICovCisjZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSCQkweDgwMDAwMDAwCisKKy8qIFVzZSBHZW5lcmFsIHB1cnBvc2UgdGltZXIgMSAqLworI2RlZmluZSBDT05GSUdfU1lTX1RJTUVSQkFTRQkJR1BUMl9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfUFRWCQkJMgkvKiBEaXZpc29yOiAyXihQVFYrMSkgPT4gOCAqLworI2RlZmluZSBDT05GSUdfU1lTX0haCQkJMTAwMAorCisvKgorICogU3RhY2sgc2l6ZXMKKyAqCisgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdworICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDEyOCA8PCAxMCkJLyogUmVndWxhciBzdGFjayAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRCSg0IDw8IDEwKQkvKiBJUlEgc3RhY2sgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEJKDQgPDwgMTApCS8qIEZJUSBzdGFjayAqLworI2VuZGlmCisKKy8qCisgKiBTRFJBTSBNZW1vcnkgTWFwCisgKiBFdmVuIHRob3VnaCB3ZSB1c2UgdHdvIENTIGFsbCB0aGUgbWVtb3J5CisgKiBpcyBtYXBwZWQgdG8gb25lIGNvbnRpZ3VvdXMgYmxvY2sKKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisKKyNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQkweDgwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fQUREUgkweDQwMzBEODAwCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fU0laRQkweDgwMAorI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfU1BfQUREUgkJKENPTkZJR19TWVNfSU5JVF9SQU1fQUREUiArIFwKKwkJCQkJIENPTkZJR19TWVNfSU5JVF9SQU1fU0laRSAtIFwKKwkJCQkJIEdFTkVSQVRFRF9HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TWVNfRU1JRl9QUkVDQUxDVUxBVEVEX1RJTUlOR19SRUdTCisKKy8qIERlZmluZXMgZm9yIFNEUkFNIGluaXQgKi8KKyNpZm5kZWYgQ09ORklHX1NZU19FTUlGX1BSRUNBTENVTEFURURfVElNSU5HX1JFR1MKKyNkZWZpbmUgQ09ORklHX1NZU19BVVRPTUFUSUNfU0RSQU1fREVURUNUSU9OCisjZGVmaW5lIENPTkZJR19TWVNfREVGQVVMVF9MUEREUjJfVElNSU5HUworI2VuZGlmCisKKy8qIERlZmluZXMgZm9yIFNQTCAqLworI2RlZmluZSBDT05GSUdfU1BMCisjZGVmaW5lIENPTkZJR19TUExfVEVYVF9CQVNFCQkweDQwMzA0MzUwCisjZGVmaW5lIENPTkZJR19TUExfTUFYX1NJWkUJCTB4MUUwMDAJLyogMTIwSyAqLworI2RlZmluZSBDT05GSUdfU1BMX1NUQUNLCQlMT1dfTEVWRUxfU1JBTV9TVEFDSworCisjZGVmaW5lIENPTkZJR19TUExfQlNTX1NUQVJUX0FERFIJMHg4MDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1BMX0JTU19NQVhfU0laRQkJMHg4MDAwMAkJLyogNTEyIEtCICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19NTUNTRF9SQVdfTU9ERV9VX0JPT1RfU0VDVE9SCTB4MzAwIC8qIGFkZHJlc3MgMHg2MDAwMCAqLworI2RlZmluZSBDT05GSUdfU1lTX1VfQk9PVF9NQVhfU0laRV9TRUNUT1JTCTB4MjAwIC8qIDI1NiBLQiAqLworI2RlZmluZSBDT05GSUdfU1lTX01NQ19TRF9GQVRfQk9PVF9QQVJUSVRJT04JMQorI2RlZmluZSBDT05GSUdfU1BMX0ZBVF9MT0FEX1BBWUxPQURfTkFNRQkidS1ib290LmltZyIKKworI2RlZmluZSBDT05GSUdfU1BMX0xJQkNPTU1PTl9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTElCRElTS19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfSTJDX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9NTUNfU1VQUE9SVAorI2RlZmluZSBDT05GSUdfU1BMX0ZBVF9TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfTElCR0VORVJJQ19TVVBQT1JUCisjZGVmaW5lIENPTkZJR19TUExfU0VSSUFMX1NVUFBPUlQKKyNkZWZpbmUgQ09ORklHX1NQTF9MRFNDUklQVCAiYXJjaC9hcm0vY3B1L2FybXY3L29tYXAtY29tbW9uL3UtYm9vdC1zcGwubGRzIgorCisvKgorICogMU1CIGludG8gdGhlIFNEUkFNIHRvIGFsbG93IGZvciBTUEwncyBic3MgYXQgdGhlIGJlZ2lubmluZyBvZiBTRFJBTQorICogNjQgYnl0ZXMgYmVmb3JlIHRoaXMgYWRkcmVzcyBzaG91bGQgYmUgc2V0IGFzaWRlIGZvciB1LWJvb3QuaW1nJ3MKKyAqIGhlYWRlci4gVGhhdCBpcyAweDgwMEZGRkMwLS0weDgwMTAwMDAwIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgYW55CisgKiBvdGhlciBuZWVkcy4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkJMHg4MDEwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX1NQTF9NQUxMT0NfU1RBUlQgICAgIDB4ODAyMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19TUExfTUFMTE9DX1NJWkUgICAgICAweDEwMDAwMCAgICAgICAgLyogMSBNQiAqLworCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3AxX3AyX3JkYl9wYy5oIGIvaW5jbHVkZS9jb25maWdzL3AxX3AyX3JkYl9wYy5oCmluZGV4IGJjZmIwMzQuLjVhNjk5MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9wMV9wMl9yZGJfcGMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcDFfcDJfcmRiX3BjLmgKQEAgLTIyMSw3ICsyMjEsNyBAQAogCiAvKiBJTiBjYXNlIG9mIE5BTkQgYm9vdGxvYWRlciByZWxvY2F0ZSBDQ1NSQkFSIGluIFJBTWJvb3QgY29kZSBub3QgaW4gdGhlIDRrCiAgICAgICAgU1BMIGNvZGUqLwotI2lmIGRlZmluZWQoQ09ORklHX05BTkRfVV9CT09UKSAmJiBkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKKyNpZiBkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKICNkZWZpbmUgQ09ORklHX1NZU19DQ1NSX0RPX05PVF9SRUxPQ0FURQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9wbTkyNjEuaCBiL2luY2x1ZGUvY29uZmlncy9wbTkyNjEuaAppbmRleCA4OWUxN2I4Li41NTQ1NWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvcG05MjYxLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3BtOTI2MS5oCkBAIC01Miw2ICs1Miw5IEBACiAjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYJKi8KICNkZWZpbmUgQ09ORklHX1NZU19URVhUX0JBU0UJMAogCisjZGVmaW5lIE1BQ0hfVFlQRV9QTTkyNjEJMTE4NworI2RlZmluZSBDT05GSUdfTUFDSF9UWVBFCU1BQ0hfVFlQRV9QTTkyNjEKKwogLyogY2xvY2tzICovCiAvKiBDS0dSX01PUiAtIGVuYWJsZSBtYWluIG9zYy4gKi8KICNkZWZpbmUgQ09ORklHX1NZU19NT1JfVkFMCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3BtOTI2My5oIGIvaW5jbHVkZS9jb25maWdzL3BtOTI2My5oCmluZGV4IDFmNzU0M2MuLjQzMTA0YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9wbTkyNjMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcG05MjYzLmgKQEAgLTUyLDYgKzUyLDkgQEAKICN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZgkqLwogI2RlZmluZSBDT05GSUdfU1lTX1RFWFRfQkFTRQkwCiAKKyNkZWZpbmUgTUFDSF9UWVBFX1BNOTI2MwkxNDc1CisjZGVmaW5lIENPTkZJR19NQUNIX1RZUEUJTUFDSF9UWVBFX1BNOTI2MworCiAvKiBjbG9ja3MgKi8KICNkZWZpbmUgQ09ORklHX1NZU19NT1JfVkFMCQkJCQkJXAogCQkoQVQ5MV9QTUNfTU9SX01PU0NFTiB8CQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvcG05ZzQ1LmggYi9pbmNsdWRlL2NvbmZpZ3MvcG05ZzQ1LmgKaW5kZXggYWNjMTIwNC4uZDNiZWFmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3BtOWc0NS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9wbTlnNDUuaApAQCAtNDEsNiArNDEsOSBAQAogI2RlZmluZSBDT05GSUdfUE05RzQ1CQkxCS8qIEl0J3MgYW4gUm9uZXRpeCBQTTlHNDUgKi8KICNkZWZpbmUgQ09ORklHX1NZU19BVDkxX0NQVV9OQU1FCSJBVDkxU0FNOUc0NSIKIAorI2RlZmluZSBNQUNIX1RZUEVfUE05RzQ1CTI2NzIKKyNkZWZpbmUgQ09ORklHX01BQ0hfVFlQRQlNQUNIX1RZUEVfUE05RzQ1CisKIC8qIEFSTSBhc3luY2hyb25vdXMgY2xvY2sgKi8KICNkZWZpbmUgQ09ORklHX1NZU19BVDkxX01BSU5fQ0xPQ0sJMTIwMDAwMDAgLyogZnJvbSAxMiBNSHogY3J5c3RhbCAqLwogI2RlZmluZSBDT05GSUdfU1lTX0FUOTFfU0xPV19DTE9DSwkzMjc2OAkJLyogc2xvdyBjbG9jayB4dGFsICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdnBhYzI3MC5oIGIvaW5jbHVkZS9jb25maWdzL3ZwYWMyNzAuaAppbmRleCA5ZGI0ZDk5Li5kZDY4YzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvdnBhYzI3MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy92cGFjMjcwLmgKQEAgLTEwNyw3ICsxMDcsOCBAQAogICovCiAjaWZkZWYJQ09ORklHX0NNRF9NTUMKICNkZWZpbmUJQ09ORklHX01NQwotI2RlZmluZQlDT05GSUdfUFhBX01NQworI2RlZmluZQlDT05GSUdfR0VORVJJQ19NTUMKKyNkZWZpbmUJQ09ORklHX1BYQV9NTUNfR0VORVJJQwogI2RlZmluZQlDT05GSUdfU1lTX01NQ19CQVNFCQkweEYwMDAwMDAwCiAjZGVmaW5lCUNPTkZJR19DTURfRkFUCiAjZGVmaW5lCUNPTkZJR19DTURfRVhUMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mZHRfc3VwcG9ydC5oIGIvaW5jbHVkZS9mZHRfc3VwcG9ydC5oCmluZGV4IGM3YjQ2MDUuLmNlZjNjNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZmR0X3N1cHBvcnQuaAorKysgYi9pbmNsdWRlL2ZkdF9zdXBwb3J0LmgKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUgPGZkdC5oPgogCi11MzIgZmR0X2dldHByb3BfdTMyX2RlZmF1bHQodm9pZCAqZmR0LCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcm9wLAotCQkJCWNvbnN0IHUzMiBkZmx0KTsKK3UzMiBmZHRfZ2V0cHJvcF91MzJfZGVmYXVsdChjb25zdCB2b2lkICpmZHQsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJY29uc3QgY2hhciAqcHJvcCwgY29uc3QgdTMyIGRmbHQpOwogaW50IGZkdF9jaG9zZW4odm9pZCAqZmR0LCBpbnQgZm9yY2UpOwogaW50IGZkdF9pbml0cmQodm9pZCAqZmR0LCB1bG9uZyBpbml0cmRfc3RhcnQsIHVsb25nIGluaXRyZF9lbmQsIGludCBmb3JjZSk7CiB2b2lkIGRvX2ZpeHVwX2J5X3BhdGgodm9pZCAqZmR0LCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcm9wLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sY2QuaCBiL2luY2x1ZGUvbGNkLmgKaW5kZXggODljYzkwYy4uODNiNTBmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9sY2QuaAorKysgYi9pbmNsdWRlL2xjZC5oCkBAIC0yMTAsNiArMjEwLDggQEAKIHZvaWQJbGNkX3B1dGMJKGNvbnN0IGNoYXIgYyk7CiB2b2lkCWxjZF9wdXRzCShjb25zdCBjaGFyICpzKTsKIHZvaWQJbGNkX3ByaW50ZgkoY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZAlsY2RfY2xlYXIodm9pZCk7CitpbnQJbGNkX2Rpc3BsYXlfYml0bWFwKHVsb25nIGJtcF9pbWFnZSwgaW50IHgsIGludCB5KTsKIAogLyogQWxsb3cgYm9hcmRzIHRvIGN1c3RvbWl6ZSB0aGUgaW5mb3JtYXRpb24gZGlzcGxheWVkICovCiB2b2lkIGxjZF9zaG93X2JvYXJkX2luZm8odm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29uZW5hbmRfdWJvb3QuaCBiL2luY2x1ZGUvb25lbmFuZF91Ym9vdC5oCmluZGV4IDkyMjc5ZDUuLmYzMjFkOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb25lbmFuZF91Ym9vdC5oCisrKyBiL2luY2x1ZGUvb25lbmFuZF91Ym9vdC5oCkBAIC01Miw0ICs1Miw3IEBACiBleHRlcm4gdm9pZCBzM2M2NHh4X29uZW5hbmRfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CiBleHRlcm4gdm9pZCBzM2M2NHh4X3NldF93aWR0aF9yZWdzKHN0cnVjdCBvbmVuYW5kX2NoaXAgKik7CiAKKy8qIFNQTCAqLwordm9pZCBvbmVuYW5kX3NwbF9sb2FkX2ltYWdlKHVpbnQzMl90IG9mZnMsIHVpbnQzMl90IHNpemUsIHZvaWQgKmRzdCk7CisKICNlbmRpZiAvKiBfX1VCT09UX09ORU5BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zZWFyY2guaCBiL2luY2x1ZGUvc2VhcmNoLmgKaW5kZXggYjRlZGQ0My4uZWY1M2VkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zZWFyY2guaAorKysgYi9pbmNsdWRlL3NlYXJjaC5oCkBAIC05MSw3ICs5MSw4IEBACiBleHRlcm4gaW50IGhkZWxldGVfcihjb25zdCBjaGFyICpfX2tleSwgc3RydWN0IGhzZWFyY2hfZGF0YSAqX19odGFiKTsKIAogZXh0ZXJuIHNzaXplX3QgaGV4cG9ydF9yKHN0cnVjdCBoc2VhcmNoX2RhdGEgKl9faHRhYiwKLQkJICAgICBjb25zdCBjaGFyIF9fc2VwLCBjaGFyICoqX19yZXNwLCBzaXplX3QgX19zaXplKTsKKwkJICAgICBjb25zdCBjaGFyIF9fc2VwLCBjaGFyICoqX19yZXNwLCBzaXplX3QgX19zaXplLAorCQkgICAgIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKTsKIAogZXh0ZXJuIGludCBoaW1wb3J0X3Ioc3RydWN0IGhzZWFyY2hfZGF0YSAqX19odGFiLAogCQkgICAgIGNvbnN0IGNoYXIgKl9fZW52LCBzaXplX3QgX19zaXplLCBjb25zdCBjaGFyIF9fc2VwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zeW5vcHN5cy9kd2NkZHIyMW1jdGwuaCBiL2luY2x1ZGUvc3lub3BzeXMvZHdjZGRyMjFtY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMzYjEyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc3lub3BzeXMvZHdjZGRyMjFtY3RsLmgKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMTEgQW5kZXMgVGVjaG5vbG9neSBDb3JwCisgKiBNYWNwYXVsIExpbiA8bWFjcGF1bEBhbmRlc3RlY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBEV0NERFIyMU1DVEwgLSBTeW5vcHN5cyBEV0MgRERSMi9ERFIxIE1lbW9yeSBDb250cm9sbGVyCisgKi8KKyNpZm5kZWYgX19EV0NERFIyMU1DVExfSAorI2RlZmluZSBfX0RXQ0REUjIxTUNUTF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgZHdjZGRyMjFtY3RsIHsKKwl1bnNpZ25lZCBpbnQJY2NyOwkJLyogQ29udHJvbGxlciBDb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgaW50CWRjcjsJCS8qIERSQU0gQ29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGludAlpb2NyOwkJLyogSS9PIENvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJY3NyOwkJLyogQ29udHJvbGxlciBTdGF0dXMgKi8KKwl1bnNpZ25lZCBpbnQJZHJyOwkJLyogRFJBTSByZWZyZXNoICovCisJdW5zaWduZWQgaW50CXRwcjA7CQkvKiBTRFJBTSBUaW1pbmcgUGFyYW1ldGVycyAwICovCisJdW5zaWduZWQgaW50CXRwcjE7CQkvKiBTRFJBTSBUaW1pbmcgUGFyYW1ldGVycyAxICovCisJdW5zaWduZWQgaW50CXRwcjI7CQkvKiBTRFJBTSBUaW1pbmcgUGFyYW1ldGVycyAyICovCisJdW5zaWduZWQgaW50CWdkbGxjcjsJCS8qIEdsb2JhbCBETEwgQ29udHJvbCAqLworCXVuc2lnbmVkIGludAlkbGxjclsxMF07CS8qIERMTCBDb250cm9sICovCisJdW5zaWduZWQgaW50CXJzbHJbNF07CS8qIFJhbmsgU3lzdGVtIExhbnRlbmN5ICovCisJdW5zaWduZWQgaW50CXJkZ3JbNF07CS8qIFJhbmsgRFFTIEdhdGluZyAqLworCXVuc2lnbmVkIGludAlkcXRyWzldOwkvKiBEUSBUaW1pbmcgKi8KKwl1bnNpZ25lZCBpbnQJZHFzdHI7CQkvKiBEUVMgVGltaW5nICovCisJdW5zaWduZWQgaW50CWRxc2J0cjsJCS8qIERRU19iIFRpbWluZyAqLworCXVuc2lnbmVkIGludAlvZHRjcjsJCS8qIE9EVCBDb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgaW50CWR0clsyXTsJCS8qIERhdGEgVHJhaW5pbmcgKi8KKwl1bnNpZ25lZCBpbnQJZHRhcjsJCS8qIERhdGEgVHJhaW5pbmcgQWRkcmVzcyAqLworCXVuc2lnbmVkIGludAlyc3ZlZFs4Ml07CS8qIFJlc2VydmVkICovCisJdW5zaWduZWQgaW50CW1yOwkJLyogTW9kZSBSZWdpc3RlciAqLworCXVuc2lnbmVkIGludAllbXI7CQkvKiBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50CWVtcjI7CQkvKiBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyIDIgKi8KKwl1bnNpZ25lZCBpbnQJZW1yMzsJCS8qIEV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIgMyAqLworCXVuc2lnbmVkIGludAlocGNyWzMyXTsJLyogSG9zdCBQb3J0IENvbmZpZ3VyYXJpb24gKi8KKwl1bnNpZ25lZCBpbnQJcHFjcls4XTsJLyogUHJpb3JpdHkgUXVldWUgQ29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGludAltbWdjcjsJCS8qIE1lbW9yeSBNYW5hZ2VyIEdlbmVyYWwgQ29uZmlnICovCit9OworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogQ29udHJvbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9FQ0NFTih4KQkoKHgpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DQ1JfTk9NUldSKHgpCSgoeCkgPDwgMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9IT1NURU4oeCkJKCh4KSA8PCAyKQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX1hCSVNDKHgpCSgoeCkgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9OT0FQRCh4KQkoKHgpIDw8IDQpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DQ1JfUlJCKHgpCQkoKHgpIDw8IDEzKQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0RRU0NGRyh4KQkoKHgpIDw8IDE0KQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0RGVExNKHgpCSgoKHgpICYgMHgzKSA8PCAxNSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9ERlRDTVAoeCkJKCh4KSA8PCAxNykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9GTFVTSCh4KQkoKHgpIDw8IDI3KQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0lUTVJTVCh4KQkoKHgpIDw8IDI4KQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0lCKHgpCQkoKHgpIDw8IDI5KQorI2RlZmluZSBEV0NERFIyMU1DVExfQ0NSX0RUVCh4KQkJKCh4KSA8PCAzMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NDUl9JVCh4KQkJKCh4KSA8PCAzMSkKKworLyoKKyAqIERSQU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfRERSTUQoeCkJKCh4KSA8PCAwKQorI2RlZmluZSBEV0NERFIyMU1DVExfRENSX0RJTyh4KQkJKCgoeCkgJiAweDMpIDw8IDEpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfRFNJWkUoeCkJKCgoeCkgJiAweDcpIDw8IDMpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfU0lPKHgpCQkoKCh4KSAmIDB4NykgPDwgNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RDUl9QSU8oeCkJCSgoeCkgPDwgOSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RDUl9SQU5LUyh4KQkoKCh4KSAmIDB4MykgPDwgMTApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfUk5LQUxMKHgpCSgoeCkgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfQU1BUCh4KQkoKCh4KSAmIDB4MykgPDwgMTMpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfUkFOSyh4KQkoKCh4KSAmIDB4MykgPDwgMjUpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfQ01EKHgpCQkoKCh4KSAmIDB4ZikgPDwgMjcpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EQ1JfRVhFKHgpCQkoKHgpIDw8IDMxKQorCisvKgorICogSS9PIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfSU9DUl9SVFQoeCkJKCgoeCkgJiAweGYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9JT0NSX0RTKHgpCQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0lPQ1JfVEVTVEVOKHgpCSgoeCkgPDwgMHg4KQorI2RlZmluZSBEV0NERFIyMU1DVExfSU9DUl9SVFRPSCh4KQkoKCh4KSAmIDB4NykgPDwgMjYpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9JT0NSX1JUVE9FKHgpCSgoeCkgPDwgMjkpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9JT0NSX0RRUlRUKHgpCSgoeCkgPDwgMzApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9JT0NSX0RRU1JUVCh4KQkoKHgpIDw8IDMxKQorCisvKgorICogQ29udHJvbGxlciBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfQ1NSX0RSSUZUKHgpCSgoKHgpICYgMHgzZmYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DU1JfREZURVJSKHgpCSgoeCkgPDwgMTgpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DU1JfRUNDRVJSKHgpCSgoeCkgPDwgMTkpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9DU1JfRFRFUlIoeCkJKCh4KSA8PCAyMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NTUl9EVElFUlIoeCkJKCh4KSA8PCAyMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0NTUl9FQ0NTRUMoeCkJKCh4KSA8PCAyMikKKworLyoKKyAqIERSQU0gUmVmcmVzaCBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUlJfVFJGQyh4KQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUlJfVFJGUFJEKHgpCSgoKHgpICYgMHhmZmZmKSA8PCA4KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFJSX1JGQlVSU1QoeCkJKCgoeCkgJiAweGYpIDw8IDI0KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFJSX1JEKHgpCQkoKHgpIDw8IDMxKQorCisvKgorICogU0RSQU0gVGltaW5nIFBhcmFtZXRlcnMgUmVnaXN0ZXIgMAorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RNUkQoeCkJKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RSVFAoeCkJKCgoeCkgJiAweDcpIDw8IDIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RXVFIoeCkJKCgoeCkgJiAweDcpIDw8IDUpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RSUCh4KQkoKCh4KSAmIDB4ZikgPDwgOCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjBfVFJDRCh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RSQVMoeCkJKCgoeCkgJiAweDFmKSA8PCAxNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjBfVFJSRCh4KQkoKCh4KSAmIDB4ZikgPDwgMjEpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIwX1RSQyh4KQkoKCh4KSAmIDB4M2YpIDw8IDI1KQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMF9UQ0NEKHgpCSgoeCkgPDwgMzEpCisKKy8qCisgKiBTRFJBTSBUaW1pbmcgUGFyYW1ldGVycyBSZWdpc3RlciAxCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjFfVEFPTkQoeCkJKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIxX1RSVFcoeCkJKCh4KSA8PCAyKQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMV9URkFXKHgpCSgoKHgpICYgMHgzZikgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjFfVFJOS1JUUih4KQkoKCh4KSAmIDB4MykgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIxX1RSTktXVFcoeCkJKCgoeCkgJiAweDMpIDw8IDE0KQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMV9YQ0woeCkJKCgoeCkgJiAweGYpIDw8IDIzKQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMV9YV1IoeCkJKCgoeCkgJiAweGYpIDw8IDI3KQorI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMV9YVFAoeCkJKCh4KSA8PCAzMSkKKworLyoKKyAqIFNEUkFNIFRpbWluZyBQYXJhbWV0ZXJzIFJlZ2lzdGVyIDIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfVFBSMl9UWFMoeCkJKCgoeCkgJiAweDNmZikgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1RQUjJfVFhQKHgpCSgoKHgpICYgMHgxZikgPDwgMTApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9UUFIyX1RDS0UoeCkJKCgoeCkgJiAweGYpIDw8IDE1KQorCisvKgorICogR2xvYmFsIERMTCBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0dETExDUl9EUkVTKHgpCSgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZSBEV0NERFIyMU1DVExfR0RMTENSX0lQVU1QKHgpCSgoKHgpICYgMHg3KSA8PCAyKQorI2RlZmluZSBEV0NERFIyMU1DVExfR0RMTENSX1RFU1RFTih4KQkoKHgpIDw8IDUpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9HRExMQ1JfRFRDKHgpCSgoKHgpICYgMHg3KSA8PCA2KQorI2RlZmluZSBEV0NERFIyMU1DVExfR0RMTENSX0FUQyh4KQkoKCh4KSAmIDB4MykgPDwgOSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0dETExDUl9URVNUU1coeCkJKCh4KSA8PCAxMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0dETExDUl9NQklBUyh4KQkoKCh4KSAmIDB4ZmYpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfR0RMTENSX1NCSUFTKHgpCSgoKHgpICYgMHhmZikgPDwgMjApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9HRExMQ1JfTE9DS0RFVCh4KQkoKHgpIDw8IDI5KQorCisvKgorICogRExMIENvbnRyb2wgUmVnaXN0ZXIgMC05CisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX1NGQkRMWSh4KQkoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX1NGV0RMWSh4KQkoKCh4KSAmIDB4NykgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX01GQkRMWSh4KQkoKCh4KSAmIDB4NykgPDwgNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX01GV0RMWSh4KQkoKCh4KSAmIDB4NykgPDwgOSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RMTENSX1NTVEFSVCh4KQkoKCh4KSAmIDB4MykgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9ETExDUl9QSEFTRSh4KQkoKCh4KSAmIDB4ZikgPDwgMTQpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9ETExDUl9BVEVTVEVOKHgpCSgoeCkgPDwgMTgpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9ETExDUl9EUlNWRCh4KQkoKHgpIDw8IDE5KQorI2RlZmluZSBEV0NERFIyMU1DVExfRExMQ1JfREQoeCkJKCh4KSA8PCAzMSkKKworLyoKKyAqIFJhbmsgU3lzdGVtIExhbnRlbmN5IFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JTTFJfU0wwKHgpCSgoKHgpICYgMHg3KSA8PCAwKQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDEoeCkJKCgoeCkgJiAweDcpIDw8IDMpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9SU0xSX1NMMih4KQkoKCh4KSAmIDB4NykgPDwgNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JTTFJfU0wzKHgpCSgoKHgpICYgMHg3KSA8PCA5KQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDQoeCkJKCgoeCkgJiAweDcpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDUoeCkJKCgoeCkgJiAweDcpIDw8IDE1KQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDYoeCkJKCgoeCkgJiAweDcpIDw8IDE4KQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDcoeCkJKCgoeCkgJiAweDcpIDw8IDIxKQorI2RlZmluZSBEV0NERFIyMU1DVExfUlNMUl9TTDgoeCkJKCgoeCkgJiAweDcpIDw8IDI0KQorCisvKgorICogUmFuayBEUVMgR2F0aW5nIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMMCh4KQkoKCh4KSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMMSh4KQkoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMMih4KQkoKCh4KSAmIDB4MykgPDwgNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMMyh4KQkoKCh4KSAmIDB4MykgPDwgNikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMNCh4KQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMNSh4KQkoKCh4KSAmIDB4MykgPDwgMTApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9SREdSX0RRU1NFTDYoeCkJKCgoeCkgJiAweDMpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfUkRHUl9EUVNTRUw3KHgpCSgoKHgpICYgMHgzKSA8PCAxNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX1JER1JfRFFTU0VMOCh4KQkoKCh4KSAmIDB4MykgPDwgMTYpCisKKy8qCisgKiBEUSBUaW1pbmcgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTAoeCkJKCgoeCkgJiAweGYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVRSX0RRRExZMSh4KQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRVFJfRFFETFkyKHgpCSgoKHgpICYgMHhmKSA8PCA4KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTMoeCkJKCgoeCkgJiAweGYpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTQoeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTUoeCkJKCgoeCkgJiAweGYpIDw8IDIwKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTYoeCkJKCgoeCkgJiAweGYpIDw8IDI0KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFUUl9EUURMWTcoeCkJKCgoeCkgJiAweGYpIDw8IDI4KQorCisvKgorICogRFFTIFRpbWluZyBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNUUl9EUVNETFkwKHgpCSgoKHgpICYgMHg3KSA8PCAwKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFTVFJfRFFTRExZMSh4KQkoKCh4KSAmIDB4NykgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU1RSX0RRU0RMWTIoeCkJKCgoeCkgJiAweDcpIDw8IDYpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNUUl9EUVNETFkzKHgpCSgoKHgpICYgMHg3KSA8PCA5KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFTVFJfRFFTRExZNCh4KQkoKCh4KSAmIDB4NykgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNUUl9EUVNETFk1KHgpCSgoKHgpICYgMHg3KSA8PCAxNSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU1RSX0RRU0RMWTYoeCkJKCgoeCkgJiAweDcpIDw8IDE4KQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFTVFJfRFFTRExZNyh4KQkoKCh4KSAmIDB4NykgPDwgMjEpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNUUl9EUVNETFk4KHgpCSgoKHgpICYgMHg3KSA8PCAyNCkKKworLyoKKyAqIERRU19iIChEUVNCVFIpIFRpbWluZyBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNCVFJfRFFTRExZMCh4KQkoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFkxKHgpCSgoKHgpICYgMHg3KSA8PCAzKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFFTQlRSX0RRU0RMWTIoeCkJKCgoeCkgJiAweDcpIDw8IDYpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EUVNCVFJfRFFTRExZMyh4KQkoKCh4KSAmIDB4NykgPDwgOSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk0KHgpCSgoKHgpICYgMHg3KSA8PCAxMikKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk1KHgpCSgoKHgpICYgMHg3KSA8PCAxNSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk2KHgpCSgoKHgpICYgMHg3KSA8PCAxOCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk3KHgpCSgoKHgpICYgMHg3KSA8PCAyMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RRU0JUUl9EUVNETFk4KHgpCSgoKHgpICYgMHg3KSA8PCAyNCkKKworLyoKKyAqIE9EVCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1JET0RUMCh4KQkoKCh4KSAmIDB4ZikgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1JET0RUMSh4KQkoKCh4KSAmIDB4ZikgPDwgNCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1JET0RUMih4KQkoKCh4KSAmIDB4ZikgPDwgOCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1JET0RUMyh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9PRFRDUl9XRE9EVDAoeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBEV0NERFIyMU1DVExfT0RUQ1JfV0RPRFQxKHgpCSgoKHgpICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX09EVENSX1dET0RUMih4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9PRFRDUl9XRE9EVDMoeCkJKCgoeCkgJiAweGYpIDw8IDI4KQorCisvKgorICogRGF0YSBUcmFpbmluZyBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EVFIwX0RUQllURTAoeCkJKCgoeCkgJiAweGZmKSA8PCAwKQkvKiBkZWY6IDB4MTEgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RUUjBfRFRCWVRFMSh4KQkoKCh4KSAmIDB4ZmYpIDw8IDgpCS8qIGRlZjogMHhlZSAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFRSMF9EVEJZVEUyKHgpCSgoKHgpICYgMHhmZikgPDwgMTYpCS8qIGRlZjogMHgyMiAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFRSMF9EVEJZVEUzKHgpCSgoKHgpICYgMHhmZikgPDwgMjQpCS8qIGRlZjogMHhkZCAqLworCisjZGVmaW5lIERXQ0REUjIxTUNUTF9EVFIxX0RUQllURTQoeCkJKCgoeCkgJiAweGZmKSA8PCAwKQkvKiBkZWY6IDB4NDQgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RUUjFfRFRCWVRFNSh4KQkoKCh4KSAmIDB4ZmYpIDw8IDgpCS8qIGRlZjogMHhiYiAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFRSMV9EVEJZVEU2KHgpCSgoKHgpICYgMHhmZikgPDwgMTYpCS8qIGRlZjogMHg4OCAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRFRSMV9EVEJZVEU3KHgpCSgoKHgpICYgMHhmZikgPDwgMjQpCS8qIGRlZjogMHg3NyAqLworCisvKgorICogRGF0YSBUcmFpbmluZyBBZGRyZXNzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RUQVJfRFRDT0woeCkJKCgoeCkgJiAweGZmZikgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0RUQVJfRFRST1coeCkJKCgoeCkgJiAweGZmZmYpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfRFRBUl9EVEJBTksoeCkJKCgoeCkgJiAweDcpIDw8IDI4KQorCisvKgorICogTW9kZSBSZWdpc3RlcgorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9NUl9CTCh4KQkJKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9NUl9CVCh4KQkJKCh4KSA8PCAzKQorI2RlZmluZSBEV0NERFIyMU1DVExfTVJfQ0woeCkJCSgoKHgpICYgMHg3KSA8PCA0KQorI2RlZmluZSBEV0NERFIyMU1DVExfTVJfVE0oeCkJCSgoeCkgPDwgNykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX01SX0RSKHgpCQkoKHgpIDw8IDgpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9NUl9XUih4KQkJKCgoeCkgJiAweDcpIDw8IDkpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9NUl9QRCh4KQkJKCh4KSA8PCAxMikKKworLyoKKyAqIEV4dGVuZGVkIE1vZGUgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX0RFKHgpCQkoKHgpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfT0RTKHgpCQkoKHgpIDw8IDEpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfUlRUMih4KQkoKHgpIDw8IDIpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfQUwoeCkJCSgoKHgpICYgMHg3KSA8PCAzKQorI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX1JUVDYoeCkJKCh4KSA8PCA2KQorI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX09DRCh4KQkJKCgoeCkgJiAweDcpIDw8IDcpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfRFFTKHgpCQkoKHgpIDw8IDEwKQorI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX1JEUVMoeCkJKCh4KSA8PCAxMSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUl9PRSh4KQkJKCh4KSA8PCAxMikKKworI2RlZmluZSBFTVJfUlRUMih4KQkJCURXQ0REUjIxTUNUTF9FTVJfUlRUMih4KQorI2RlZmluZSBFTVJfUlRUNih4KQkJCURXQ0REUjIxTUNUTF9FTVJfUlRUNih4KQorCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfUlRUX0RJU0FCTEVECShFTVJfUlRUNigwKSB8IEVNUl9SVFQyKDApKQorI2RlZmluZSBEV0NERFIyMU1DVExfRU1SX1JUVF83NQkJKEVNUl9SVFQ2KDApIHwgRU1SX1JUVDIoMSkpCisjZGVmaW5lIERXQ0REUjIxTUNUTF9FTVJfUlRUXzE1MAkoRU1SX1JUVDYoMSkgfCBFTVJfUlRUMigwKSkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUl9SVFRfNTAJCShFTVJfUlRUNigxKSB8IEVNUl9SVFQyKDEpKQorCisvKgorICogRXh0ZW5kZWQgTW9kZSByZWdpc3RlciAyCisgKi8KKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUjJfUEFTUih4KQkoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUjJfRENDKHgpCSgoeCkgPDwgMykKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0VNUjJfU1JGKHgpCSgoeCkgPDwgNykKKworLyoKKyAqIEV4dGVuZGVkIE1vZGUgcmVnaXN0ZXIgMzogWzE1OjBdIHJlc2VydmVkIGZvciBKRURFQy4KKyAqLworCisvKgorICogSG9zdCBwb3J0IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMC0zMQorICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9IUENSX0hQQkwoeCkJKCgoeCkgJiAweGYpIDw8IDApCisKKy8qCisgKiBQcmlvcml0eSBRdWV1ZSBDb25maWd1cmF0aW9uIHJlZ2lzdGVyIDAtNworICovCisjZGVmaW5lIERXQ0REUjIxTUNUTF9IUENSX1RPVVQoeCkJKCgoeCkgJiAweGYpIDw8IDApCisjZGVmaW5lIERXQ0REUjIxTUNUTF9IUENSX1RPVVRYKHgpCSgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSBEV0NERFIyMU1DVExfSFBDUl9MUFFTKHgpCSgoKHgpICYgMHgzKSA8PCAxMCkKKyNkZWZpbmUgRFdDRERSMjFNQ1RMX0hQQ1JfUFFCTCh4KQkoKCh4KSAmIDB4ZmYpIDw8IDEyKQorI2RlZmluZSBEV0NERFIyMU1DVExfSFBDUl9TV0FJVCh4KQkoKCh4KSAmIDB4MWYpIDw8IDIwKQorI2RlZmluZSBEV0NERFIyMU1DVExfSFBDUl9JTlRSUFQoeCkJKCgoeCkgJiAweDcpIDw8IDI1KQorI2RlZmluZSBEV0NERFIyMU1DVExfSFBDUl9BUFFTKHgpCSgoeCkgPDwgMjgpCisKKy8qCisgKiBNZW1vcnkgTWFuYWdlciBHZW5lcmFsIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKyAqLworI2RlZmluZSBEV0NERFIyMU1DVExfTU1HQ1JfVUhQUCh4KQkoKCh4KSAmIDB4MykgPDwgMCkKKworI2VuZGlmCS8qIF9fRFdDRERSMjFNQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW9fZm9udC5oIGIvaW5jbHVkZS92aWRlb19mb250LmgKaW5kZXggNzA2ZTE4NS4uNDc5NTdjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlb19mb250LmgKKysrIGIvaW5jbHVkZS92aWRlb19mb250LmgKQEAgLTI5LDQ2MTYgKzI5LDQgQEAKICNkZWZpbmUgVklERU9fRk9OVF9IRUlHSFQJMTYKICNkZWZpbmUgVklERU9fRk9OVF9TSVpFCQkoVklERU9fRk9OVF9DSEFSUyAqIFZJREVPX0ZPTlRfSEVJR0hUKQogCi1zdGF0aWMgdW5zaWduZWQgY2hhciB2aWRlb19mb250ZGF0YVtWSURFT19GT05UX1NJWkVdID0gewotCi0JLyogMCAweDAwICdeQCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMSAweDAxICdeQScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDgxLCAvKiAxMDAwMDAwMSAqLwotCTB4YTUsIC8qIDEwMTAwMTAxICovCi0JMHg4MSwgLyogMTAwMDAwMDEgKi8KLQkweDgxLCAvKiAxMDAwMDAwMSAqLwotCTB4YmQsIC8qIDEwMTExMTAxICovCi0JMHg5OSwgLyogMTAwMTEwMDEgKi8KLQkweDgxLCAvKiAxMDAwMDAwMSAqLwotCTB4ODEsIC8qIDEwMDAwMDAxICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMiAweDAyICdeQicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZGIsIC8qIDExMDExMDExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4YzMsIC8qIDExMDAwMDExICovCi0JMHhlNywgLyogMTExMDAxMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMyAweDAzICdeQycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogNCAweDA0ICdeRCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogNSAweDA1ICdeRScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweGU3LCAvKiAxMTEwMDExMSAqLwotCTB4ZTcsIC8qIDExMTAwMTExICovCi0JMHhlNywgLyogMTExMDAxMTEgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogNiAweDA2ICdeRicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogNyAweDA3ICdeRycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogOCAweDA4ICdeSCcgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGU3LCAvKiAxMTEwMDExMSAqLwotCTB4YzMsIC8qIDExMDAwMDExICovCi0JMHhjMywgLyogMTEwMDAwMTEgKi8KLQkweGU3LCAvKiAxMTEwMDExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCi0JLyogOSAweDA5ICdeSScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NDIsIC8qIDAxMDAwMDEwICovCi0JMHg0MiwgLyogMDEwMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTAgMHgwYSAnXkonICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4YzMsIC8qIDExMDAwMDExICovCi0JMHg5OSwgLyogMTAwMTEwMDEgKi8KLQkweGJkLCAvKiAxMDExMTEwMSAqLwotCTB4YmQsIC8qIDEwMTExMTAxICovCi0JMHg5OSwgLyogMTAwMTEwMDEgKi8KLQkweGMzLCAvKiAxMTAwMDAxMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQotCS8qIDExIDB4MGIgJ15LJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDFlLCAvKiAwMDAxMTExMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgxYSwgLyogMDAwMTEwMTAgKi8KLQkweDMyLCAvKiAwMDExMDAxMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMiAweDBjICdeTCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTMgMHgwZCAnXk0nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2YsIC8qIDAwMTExMTExICovCi0JMHgzMywgLyogMDAxMTAwMTEgKi8KLQkweDNmLCAvKiAwMDExMTExMSAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZTAsIC8qIDExMTAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE0IDB4MGUgJ15OJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdmLCAvKiAwMTExMTExMSAqLwotCTB4NjMsIC8qIDAxMTAwMDExICovCi0JMHg3ZiwgLyogMDExMTExMTEgKi8KLQkweDYzLCAvKiAwMTEwMDAxMSAqLwotCTB4NjMsIC8qIDAxMTAwMDExICovCi0JMHg2MywgLyogMDExMDAwMTEgKi8KLQkweDYzLCAvKiAwMTEwMDAxMSAqLwotCTB4NjcsIC8qIDAxMTAwMTExICovCi0JMHhlNywgLyogMTExMDAxMTEgKi8KLQkweGU2LCAvKiAxMTEwMDExMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNSAweDBmICdeTycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhkYiwgLyogMTEwMTEwMTEgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4ZTcsIC8qIDExMTAwMTExICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweGRiLCAvKiAxMTAxMTAxMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTYgMHgxMCAnXlAnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDgwLCAvKiAxMDAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhlMCwgLyogMTExMDAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhlMCwgLyogMTExMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4ODAsIC8qIDEwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE3IDB4MTEgJ15RJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMiwgLyogMDAwMDAwMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgxZSwgLyogMDAwMTExMTAgKi8KLQkweDNlLCAvKiAwMDExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgzZSwgLyogMDAxMTExMTAgKi8KLQkweDFlLCAvKiAwMDAxMTExMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDAyLCAvKiAwMDAwMDAxMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxOCAweDEyICdeUicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTkgMHgxMyAnXlMnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIwIDB4MTQgJ15UJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdmLCAvKiAwMTExMTExMSAqLwotCTB4ZGIsIC8qIDExMDExMDExICovCi0JMHhkYiwgLyogMTEwMTEwMTEgKi8KLQkweGRiLCAvKiAxMTAxMTAxMSAqLwotCTB4N2IsIC8qIDAxMTExMDExICovCi0JMHgxYiwgLyogMDAwMTEwMTEgKi8KLQkweDFiLCAvKiAwMDAxMTAxMSAqLwotCTB4MWIsIC8qIDAwMDExMDExICovCi0JMHgxYiwgLyogMDAwMTEwMTEgKi8KLQkweDFiLCAvKiAwMDAxMTAxMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMSAweDE1ICdeVScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjIgMHgxNiAnXlYnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIzIDB4MTcgJ15XJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNCAweDE4ICdeWCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjUgMHgxOSAnXlknICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI2IDB4MWEgJ15aJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNyAweDFiICdeWycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjggMHgxYyAnXlwnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI5IDB4MWQgJ15dJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDI4LCAvKiAwMDEwMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MjgsIC8qIDAwMTAxMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAzMCAweDFlICdeXicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMzEgMHgxZiAnXl8nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDEwLCAvKiAwMDAxMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDMyIDB4MjAgJyAnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDMzIDB4MjEgJyEnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM0IDB4MjIgJyInICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDI0LCAvKiAwMDEwMDEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM1IDB4MjMgJyMnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM2IDB4MjQgJyQnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHg4NiwgLyogMTAwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM3IDB4MjUgJyUnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ODYsIC8qIDEwMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM4IDB4MjYgJyYnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDM5IDB4MjcgJycnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQwIDB4MjggJygnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQxIDB4MjkgJyknICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQyIDB4MmEgJyonICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQzIDB4MmIgJysnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ0IDB4MmMgJywnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ1IDB4MmQgJy0nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ2IDB4MmUgJy4nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ3IDB4MmYgJy8nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAyLCAvKiAwMDAwMDAxMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4ODAsIC8qIDEwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ4IDB4MzAgJzAnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGQ2LCAvKiAxMTAxMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDQ5IDB4MzEgJzEnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDUwIDB4MzIgJzInICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDUxIDB4MzMgJzMnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDUyIDB4MzQgJzQnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxYywgLyogMDAwMTExMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MWUsIC8qIDAwMDExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDUzIDB4MzUgJzUnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhmYywgLyogMTExMTExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU0IDB4MzYgJzYnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhmYywgLyogMTExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU1IDB4MzcgJzcnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU2IDB4MzggJzgnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU3IDB4MzkgJzknICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU4IDB4M2EgJzonICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDU5IDB4M2IgJzsnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDYwIDB4M2MgJzwnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDYxIDB4M2QgJz0nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDYyIDB4M2UgJz4nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDYzIDB4M2YgJz8nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY0IDB4NDAgJ0AnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhkZSwgLyogMTEwMTExMTAgKi8KLQkweGRlLCAvKiAxMTAxMTExMCAqLwotCTB4ZGUsIC8qIDExMDExMTEwICovCi0JMHhkYywgLyogMTEwMTExMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY1IDB4NDEgJ0EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY2IDB4NDIgJ0InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY3IDB4NDMgJ0MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMiwgLyogMTEwMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY4IDB4NDQgJ0QnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDY5IDB4NDUgJ0UnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDYyLCAvKiAwMTEwMDAxMCAqLwotCTB4NjgsIC8qIDAxMTAxMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDY4LCAvKiAwMTEwMTAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MiwgLyogMDExMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDcwIDB4NDYgJ0YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDYyLCAvKiAwMTEwMDAxMCAqLwotCTB4NjgsIC8qIDAxMTAxMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDY4LCAvKiAwMTEwMTAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDcxIDB4NDcgJ0cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGRlLCAvKiAxMTAxMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2EsIC8qIDAwMTExMDEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDcyIDB4NDggJ0gnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDczIDB4NDkgJ0knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc0IDB4NGEgJ0onICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MWUsIC8qIDAwMDExMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc1IDB4NGIgJ0snICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZTYsIC8qIDExMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZTYsIC8qIDExMTAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc2IDB4NGMgJ0wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MiwgLyogMDExMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc3IDB4NGQgJ00nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhlZSwgLyogMTExMDExMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc4IDB4NGUgJ04nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhlNiwgLyogMTExMDAxMTAgKi8KLQkweGY2LCAvKiAxMTExMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhkZSwgLyogMTEwMTExMTAgKi8KLQkweGNlLCAvKiAxMTAwMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDc5IDB4NGYgJ08nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDgwIDB4NTAgJ1AnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDgxIDB4NTEgJ1EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGRlLCAvKiAxMTAxMTExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDgyIDB4NTIgJ1InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZTYsIC8qIDExMTAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDgzIDB4NTMgJ1MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg0IDB4NTQgJ1QnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDVhLCAvKiAwMTAxMTAxMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg1IDB4NTUgJ1UnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg2IDB4NTYgJ1YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg3IDB4NTcgJ1cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGQ2LCAvKiAxMTAxMDExMCAqLwotCTB4ZDYsIC8qIDExMDEwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGVlLCAvKiAxMTEwMTExMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg4IDB4NTggJ1gnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDg5IDB4NTkgJ1knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDkwIDB4NWEgJ1onICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDg2LCAvKiAxMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHhjMiwgLyogMTEwMDAwMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDkxIDB4NWIgJ1snICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDkyIDB4NWMgJ1wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg4MCwgLyogMTAwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4ZTAsIC8qIDExMTAwMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MWMsIC8qIDAwMDExMTAwICovCi0JMHgwZSwgLyogMDAwMDExMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDIsIC8qIDAwMDAwMDEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDkzIDB4NWQgJ10nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk0IDB4NWUgJ14nICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk1IDB4NWYgJ18nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk2IDB4NjAgJ2AnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk3IDB4NjEgJ2EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk4IDB4NjIgJ2InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZTAsIC8qIDExMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDk5IDB4NjMgJ2MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEwMCAweDY0ICdkJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDFjLCAvKiAwMDAxMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMDEgMHg2NSAnZScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTAyIDB4NjYgJ2YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MWMsIC8qIDAwMDExMTAwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDMyLCAvKiAwMDExMDAxMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEwMyAweDY3ICdnJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMDQgMHg2OCAnaCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhlMCwgLyogMTExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHhlNiwgLyogMTExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTA1IDB4NjkgJ2knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEwNiAweDZhICdqJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMDcgMHg2YiAnaycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhlMCwgLyogMTExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHhlNiwgLyogMTExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTA4IDB4NmMgJ2wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEwOSAweDZkICdtJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGVjLCAvKiAxMTEwMTEwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGQ2LCAvKiAxMTAxMDExMCAqLwotCTB4ZDYsIC8qIDExMDEwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMTAgMHg2ZSAnbicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhkYywgLyogMTEwMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTExIDB4NmYgJ28nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDExMiAweDcwICdwJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMTMgMHg3MSAncScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxZSwgLyogMDAwMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTE0IDB4NzIgJ3InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDExNSAweDczICdzJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMTYgMHg3NCAndCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHhmYywgLyogMTExMTExMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgxYywgLyogMDAwMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTE3IDB4NzUgJ3UnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDExOCAweDc2ICd2JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMTkgMHg3NyAndycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZDYsIC8qIDExMDEwMTEwICovCi0JMHhkNiwgLyogMTEwMTAxMTAgKi8KLQkweGQ2LCAvKiAxMTAxMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTIwIDB4NzggJ3gnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEyMSAweDc5ICd5JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMjIgMHg3YSAneicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTIzIDB4N2IgJ3snICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MGUsIC8qIDAwMDAxMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEyNCAweDdjICd8JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMjUgMHg3ZCAnfScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3MCwgLyogMDExMTAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTI2IDB4N2UgJ34nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEyNyAweDdmICd/JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMjggMHg4MCAngCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4YzIsIC8qIDExMDAwMDEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMyLCAvKiAxMTAwMDAxMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4NzAsIC8qIDAxMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTI5IDB4ODEgJ4EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEzMCAweDgyICeCJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMzEgMHg4MyAngycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTMyIDB4ODQgJ4QnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEzMyAweDg1ICeFJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMzQgMHg4NiAnhicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTM1IDB4ODcgJ4cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDcwLCAvKiAwMTExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEzNiAweDg4ICeIJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxMCwgLyogMDAwMTAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxMzcgMHg4OSAniScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTM4IDB4OGEgJ4onICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDEzOSAweDhiICeLJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNDAgMHg4YyAnjCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTQxIDB4OGQgJ40nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE0MiAweDhlICeOJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTAsIC8qIDAwMDEwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNDMgMHg4ZiAnjycgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDEwLCAvKiAwMDAxMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTQ0IDB4OTAgJ5AnICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjIsIC8qIDAxMTAwMDEwICovCi0JMHg2OCwgLyogMDExMDEwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4NjgsIC8qIDAxMTAxMDAwICovCi0JMHg2MiwgLyogMDExMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE0NSAweDkxICeRJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGVjLCAvKiAxMTEwMTEwMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweDZlLCAvKiAwMTEwMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNDYgMHg5MiAnkicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzZSwgLyogMDAxMTExMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjZSwgLyogMTEwMDExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTQ3IDB4OTMgJ5MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDEwLCAvKiAwMDAxMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE0OCAweDk0ICeUJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNDkgMHg5NSAnlScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTUwIDB4OTYgJ5YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4NzYsIC8qIDAxMTEwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE1MSAweDk3ICeXJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNTIgMHg5OCAnmCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHg3OCwgLyogMDExMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTUzIDB4OTkgJ5knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE1NCAweDlhICeaJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNTUgMHg5YiAnmycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTU2IDB4OWMgJ5wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDM4LCAvKiAwMDExMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2NCwgLyogMDExMDAxMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGU2LCAvKiAxMTEwMDExMCAqLwotCTB4ZmMsIC8qIDExMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE1NyAweDlkICedJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNTggMHg5ZSAnnicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHhjNCwgLyogMTEwMDAxMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4ZGUsIC8qIDExMDExMTEwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTU5IDB4OWYgJ58nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MWIsIC8qIDAwMDExMDExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4NzAsIC8qIDAxMTEwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE2MCAweGEwICegJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc4LCAvKiAwMTExMTAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNjEgMHhhMSAnoScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTYyIDB4YTIgJ6InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE2MyAweGEzICejJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNjQgMHhhNCAnpCcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhkYywgLyogMTEwMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTY1IDB4YTUgJ6UnICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGU2LCAvKiAxMTEwMDExMCAqLwotCTB4ZjYsIC8qIDExMTEwMTEwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweGRlLCAvKiAxMTAxMTExMCAqLwotCTB4Y2UsIC8qIDExMDAxMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE2NiAweGE2ICemJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDNlLCAvKiAwMDExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNjcgMHhhNyAnpycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTY4IDB4YTggJ6gnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE2OSAweGE5ICepJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNzAgMHhhYSAnqicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTcxIDB4YWIgJ6snICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4ZTAsIC8qIDExMTAwMDAwICovCi0JMHg2MiwgLyogMDExMDAwMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHhkYywgLyogMTEwMTExMDAgKi8KLQkweDg2LCAvKiAxMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDNlLCAvKiAwMDExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE3MiAweGFjICesJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGUwLCAvKiAxMTEwMDAwMCAqLwotCTB4NjIsIC8qIDAxMTAwMDEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4Y2UsIC8qIDExMDAxMTEwICovCi0JMHg5YSwgLyogMTAwMTEwMTAgKi8KLQkweDNmLCAvKiAwMDExMTExMSAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHgwNiwgLyogMDAwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNzMgMHhhZCAnrScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTc0IDB4YWUgJ64nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE3NSAweGFmICevJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxNzYgMHhiMCAnsCcgKi8KLQkweDExLCAvKiAwMDAxMDAwMSAqLwotCTB4NDQsIC8qIDAxMDAwMTAwICovCi0JMHgxMSwgLyogMDAwMTAwMDEgKi8KLQkweDQ0LCAvKiAwMTAwMDEwMCAqLwotCTB4MTEsIC8qIDAwMDEwMDAxICovCi0JMHg0NCwgLyogMDEwMDAxMDAgKi8KLQkweDExLCAvKiAwMDAxMDAwMSAqLwotCTB4NDQsIC8qIDAxMDAwMTAwICovCi0JMHgxMSwgLyogMDAwMTAwMDEgKi8KLQkweDQ0LCAvKiAwMTAwMDEwMCAqLwotCTB4MTEsIC8qIDAwMDEwMDAxICovCi0JMHg0NCwgLyogMDEwMDAxMDAgKi8KLQkweDExLCAvKiAwMDAxMDAwMSAqLwotCTB4NDQsIC8qIDAxMDAwMTAwICovCi0JMHgxMSwgLyogMDAwMTAwMDEgKi8KLQkweDQ0LCAvKiAwMTAwMDEwMCAqLwotCi0JLyogMTc3IDB4YjEgJ7EnICovCi0JMHg1NSwgLyogMDEwMTAxMDEgKi8KLQkweGFhLCAvKiAxMDEwMTAxMCAqLwotCTB4NTUsIC8qIDAxMDEwMTAxICovCi0JMHhhYSwgLyogMTAxMDEwMTAgKi8KLQkweDU1LCAvKiAwMTAxMDEwMSAqLwotCTB4YWEsIC8qIDEwMTAxMDEwICovCi0JMHg1NSwgLyogMDEwMTAxMDEgKi8KLQkweGFhLCAvKiAxMDEwMTAxMCAqLwotCTB4NTUsIC8qIDAxMDEwMTAxICovCi0JMHhhYSwgLyogMTAxMDEwMTAgKi8KLQkweDU1LCAvKiAwMTAxMDEwMSAqLwotCTB4YWEsIC8qIDEwMTAxMDEwICovCi0JMHg1NSwgLyogMDEwMTAxMDEgKi8KLQkweGFhLCAvKiAxMDEwMTAxMCAqLwotCTB4NTUsIC8qIDAxMDEwMTAxICovCi0JMHhhYSwgLyogMTAxMDEwMTAgKi8KLQotCS8qIDE3OCAweGIyICeyJyAqLwotCTB4ZGQsIC8qIDExMDExMTAxICovCi0JMHg3NywgLyogMDExMTAxMTEgKi8KLQkweGRkLCAvKiAxMTAxMTEwMSAqLwotCTB4NzcsIC8qIDAxMTEwMTExICovCi0JMHhkZCwgLyogMTEwMTExMDEgKi8KLQkweDc3LCAvKiAwMTExMDExMSAqLwotCTB4ZGQsIC8qIDExMDExMTAxICovCi0JMHg3NywgLyogMDExMTAxMTEgKi8KLQkweGRkLCAvKiAxMTAxMTEwMSAqLwotCTB4NzcsIC8qIDAxMTEwMTExICovCi0JMHhkZCwgLyogMTEwMTExMDEgKi8KLQkweDc3LCAvKiAwMTExMDExMSAqLwotCTB4ZGQsIC8qIDExMDExMTAxICovCi0JMHg3NywgLyogMDExMTAxMTEgKi8KLQkweGRkLCAvKiAxMTAxMTEwMSAqLwotCTB4NzcsIC8qIDAxMTEwMTExICovCi0KLQkvKiAxNzkgMHhiMyAnsycgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMTgwIDB4YjQgJ7QnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDE4MSAweGI1ICe1JyAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmOCwgLyogMTExMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0KLQkvKiAxODIgMHhiNiAnticgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4ZjYsIC8qIDExMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMTgzIDB4YjcgJ7cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDE4NCAweGI4ICe4JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmOCwgLyogMTExMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0KLQkvKiAxODUgMHhiOSAnuScgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHhmNiwgLyogMTExMTAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4ZjYsIC8qIDExMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMTg2IDB4YmEgJ7onICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDE4NyAweGJiICe7JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDYsIC8qIDAwMDAwMTEwICovCi0JMHhmNiwgLyogMTExMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0KLQkvKiAxODggMHhiYyAnvCcgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHhmNiwgLyogMTExMTAxMTAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMTg5IDB4YmQgJ70nICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE5MCAweGJlICe+JyAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGY4LCAvKiAxMTExMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmOCwgLyogMTExMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxOTEgMHhiZiAnvycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjgsIC8qIDExMTExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMTkyIDB4YzAgJ8AnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDFmLCAvKiAwMDAxMTExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDE5MyAweGMxICfBJyAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxOTQgMHhjMiAnwicgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMTk1IDB4YzMgJ8MnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDFmLCAvKiAwMDAxMTExMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDE5NiAweGM0ICfEJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAxOTcgMHhjNSAnxScgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMTk4IDB4YzYgJ8YnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MWYsIC8qIDAwMDExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDFmLCAvKiAwMDAxMTExMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDE5OSAweGM3ICfHJyAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNywgLyogMDAxMTAxMTEgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0KLQkvKiAyMDAgMHhjOCAnyCcgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNywgLyogMDAxMTAxMTEgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4M2YsIC8qIDAwMTExMTExICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjAxIDB4YzkgJ8knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4M2YsIC8qIDAwMTExMTExICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDM3LCAvKiAwMDExMDExMSAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDIwMiAweGNhICfKJyAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweGY3LCAvKiAxMTExMDExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMDMgMHhjYiAnyycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjcsIC8qIDExMTEwMTExICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMjA0IDB4Y2MgJ8wnICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzcsIC8qIDAwMTEwMTExICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDM3LCAvKiAwMDExMDExMSAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDIwNSAweGNkICfNJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMDYgMHhjZSAnzicgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHhmNywgLyogMTExMTAxMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZjcsIC8qIDExMTEwMTExICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMjA3IDB4Y2YgJ88nICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIwOCAweGQwICfQJyAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMDkgMHhkMSAn0ScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMjEwIDB4ZDIgJ9InICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQotCS8qIDIxMSAweGQzICfTJyAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzZiwgLyogMDAxMTExMTEgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMTIgMHhkNCAn1CcgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxZiwgLyogMDAwMTExMTEgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MWYsIC8qIDAwMDExMTExICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjEzIDB4ZDUgJ9UnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MWYsIC8qIDAwMDExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDFmLCAvKiAwMDAxMTExMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDIxNCAweGQ2ICfWJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzZiwgLyogMDAxMTExMTEgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0KLQkvKiAyMTUgMHhkNyAn1ycgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCi0JLyogMjE2IDB4ZDggJ9gnICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQotCS8qIDIxNyAweGQ5ICfZJyAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHhmOCwgLyogMTExMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMTggMHhkYSAn2icgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MWYsIC8qIDAwMDExMTExICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCi0JLyogMjE5IDB4ZGIgJ9snICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQotCS8qIDIyMCAweGRjICfcJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0KLQkvKiAyMjEgMHhkZCAn3ScgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCTB4ZjAsIC8qIDExMTEwMDAwICovCi0JMHhmMCwgLyogMTExMTAwMDAgKi8KLQkweGYwLCAvKiAxMTExMDAwMCAqLwotCi0JLyogMjIyIDB4ZGUgJ94nICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQkweDBmLCAvKiAwMDAwMTExMSAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwZiwgLyogMDAwMDExMTEgKi8KLQotCS8qIDIyMyAweGRmICffJyAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHhmZiwgLyogMTExMTExMTEgKi8KLQkweGZmLCAvKiAxMTExMTExMSAqLwotCTB4ZmYsIC8qIDExMTExMTExICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMjQgMHhlMCAn4CcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweGRjLCAvKiAxMTAxMTEwMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHg3NiwgLyogMDExMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjI1IDB4ZTEgJ+EnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4NzgsIC8qIDAxMTExMDAwICovCi0JMHhjYywgLyogMTEwMDExMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweGNjLCAvKiAxMTAwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4Y2MsIC8qIDExMDAxMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIyNiAweGUyICfiJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweGMwLCAvKiAxMTAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMjcgMHhlMyAn4ycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHhmZSwgLyogMTExMTExMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjI4IDB4ZTQgJ+QnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4ZmUsIC8qIDExMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIyOSAweGU1ICflJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweDcwLCAvKiAwMTExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMzAgMHhlNiAn5icgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg3YywgLyogMDExMTExMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHhjMCwgLyogMTEwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjMxIDB4ZTcgJ+cnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIzMiAweGU4ICfoJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMzMgMHhlOSAn6ScgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHgzOCwgLyogMDAxMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjM0IDB4ZWEgJ+onICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4NmMsIC8qIDAxMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4ZWUsIC8qIDExMTAxMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIzNSAweGViICfrJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDFlLCAvKiAwMDAxMTExMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4M2UsIC8qIDAwMTExMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4NjYsIC8qIDAxMTAwMTEwICovCi0JMHg2NiwgLyogMDExMDAxMTAgKi8KLQkweDNjLCAvKiAwMDExMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMzYgMHhlYyAn7CcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweGRiLCAvKiAxMTAxMTAxMSAqLwotCTB4ZGIsIC8qIDExMDExMDExICovCi0JMHhkYiwgLyogMTEwMTEwMTEgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjM3IDB4ZWQgJ+0nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMywgLyogMDAwMDAwMTEgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHhkYiwgLyogMTEwMTEwMTEgKi8KLQkweGRiLCAvKiAxMTAxMTAxMSAqLwotCTB4ZjMsIC8qIDExMTEwMDExICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4YzAsIC8qIDExMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDIzOCAweGVlICfuJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDFjLCAvKiAwMDAxMTEwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4N2MsIC8qIDAxMTExMTAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDYwLCAvKiAwMTEwMDAwMCAqLwotCTB4NjAsIC8qIDAxMTAwMDAwICovCi0JMHgzMCwgLyogMDAxMTAwMDAgKi8KLQkweDFjLCAvKiAwMDAxMTEwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyMzkgMHhlZiAn7ycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdjLCAvKiAwMTExMTEwMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweGM2LCAvKiAxMTAwMDExMCAqLwotCTB4YzYsIC8qIDExMDAwMTEwICovCi0JMHhjNiwgLyogMTEwMDAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjQwIDB4ZjAgJ/AnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweGZlLCAvKiAxMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI0MSAweGYxICfxJyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNDIgMHhmMiAn8icgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDA2LCAvKiAwMDAwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjQzIDB4ZjMgJ/MnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MzAsIC8qIDAwMTEwMDAwICovCi0JMHg2MCwgLyogMDExMDAwMDAgKi8KLQkweDMwLCAvKiAwMDExMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI0NCAweGY0ICf0JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDBlLCAvKiAwMDAwMTExMCAqLwotCTB4MWIsIC8qIDAwMDExMDExICovCi0JMHgxYiwgLyogMDAwMTEwMTEgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0KLQkvKiAyNDUgMHhmNSAn9ScgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweGQ4LCAvKiAxMTAxMTAwMCAqLwotCTB4ZDgsIC8qIDExMDExMDAwICovCi0JMHhkOCwgLyogMTEwMTEwMDAgKi8KLQkweDcwLCAvKiAwMTExMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjQ2IDB4ZjYgJ/YnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI0NyAweGY3ICf3JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDc2LCAvKiAwMTExMDExMCAqLwotCTB4ZGMsIC8qIDExMDExMTAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNDggMHhmOCAn+CcgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MzgsIC8qIDAwMTExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjQ5IDB4ZjkgJ/knICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDE4LCAvKiAwMDAxMTAwMCAqLwotCTB4MTgsIC8qIDAwMDExMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI1MCAweGZhICf6JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNTEgMHhmYiAn+ycgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MGYsIC8qIDAwMDAxMTExICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgwYywgLyogMDAwMDExMDAgKi8KLQkweDBjLCAvKiAwMDAwMTEwMCAqLwotCTB4ZWMsIC8qIDExMTAxMTAwICovCi0JMHg2YywgLyogMDExMDExMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4M2MsIC8qIDAwMTExMTAwICovCi0JMHgxYywgLyogMDAwMTExMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjUyIDB4ZmMgJ/wnICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDZjLCAvKiAwMTEwMTEwMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDM2LCAvKiAwMDExMDExMCAqLwotCTB4MzYsIC8qIDAwMTEwMTEwICovCi0JMHgzNiwgLyogMDAxMTAxMTAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotCS8qIDI1MyAweGZkICf9JyAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgzYywgLyogMDAxMTExMDAgKi8KLQkweDY2LCAvKiAwMTEwMDExMCAqLwotCTB4MGMsIC8qIDAwMDAxMTAwICovCi0JMHgxOCwgLyogMDAwMTEwMDAgKi8KLQkweDMyLCAvKiAwMDExMDAxMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0KLQkvKiAyNTQgMHhmZSAn/icgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHg3ZSwgLyogMDExMTExMTAgKi8KLQkweDdlLCAvKiAwMTExMTExMCAqLwotCTB4N2UsIC8qIDAxMTExMTEwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCi0JLyogMjU1IDB4ZmYgJ/8nICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQkweDAwLCAvKiAwMDAwMDAwMCAqLwotCTB4MDAsIC8qIDAwMDAwMDAwICovCi0JMHgwMCwgLyogMDAwMDAwMDAgKi8KLQotfTsKLQotI2VuZGlmCisjZW5kaWYgLyogX1ZJREVPX0ZPTlRfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvX2ZvbnRfZGF0YS5oIGIvaW5jbHVkZS92aWRlb19mb250X2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2E4YjliCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlb19mb250X2RhdGEuaApAQCAtMCwwICsxLDQ2MzkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIFBhb2xvIFNjYWZmYXJkaSwgQUlSVkVOVCBTQU0gcy5wLmEgLSBSSU1JTkkoSVRBTFkpLCBhcnNlbmlvQHRpbi5pdAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX1ZJREVPX0ZPTlRfREFUQV8KKyNkZWZpbmUgX1ZJREVPX0ZPTlRfREFUQV8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdmlkZW9fZm9udGRhdGFbVklERU9fRk9OVF9TSVpFXSA9IHsKKworCS8qIDAgMHgwMCAnXkAnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEgMHgwMSAnXkEnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg4MSwgLyogMTAwMDAwMDEgKi8KKwkweGE1LCAvKiAxMDEwMDEwMSAqLworCTB4ODEsIC8qIDEwMDAwMDAxICovCisJMHg4MSwgLyogMTAwMDAwMDEgKi8KKwkweGJkLCAvKiAxMDExMTEwMSAqLworCTB4OTksIC8qIDEwMDExMDAxICovCisJMHg4MSwgLyogMTAwMDAwMDEgKi8KKwkweDgxLCAvKiAxMDAwMDAwMSAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIgMHgwMiAnXkInICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGRiLCAvKiAxMTAxMTAxMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGMzLCAvKiAxMTAwMDAxMSAqLworCTB4ZTcsIC8qIDExMTAwMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDMgMHgwMyAnXkMnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDQgMHgwNCAnXkQnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDUgMHgwNSAnXkUnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHhlNywgLyogMTExMDAxMTEgKi8KKwkweGU3LCAvKiAxMTEwMDExMSAqLworCTB4ZTcsIC8qIDExMTAwMTExICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDYgMHgwNiAnXkYnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDcgMHgwNyAnXkcnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDggMHgwOCAnXkgnICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhlNywgLyogMTExMDAxMTEgKi8KKwkweGMzLCAvKiAxMTAwMDAxMSAqLworCTB4YzMsIC8qIDExMDAwMDExICovCisJMHhlNywgLyogMTExMDAxMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKworCS8qIDkgMHgwOSAnXkknICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDQyLCAvKiAwMTAwMDAxMCAqLworCTB4NDIsIC8qIDAxMDAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEwIDB4MGEgJ15KJyAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGMzLCAvKiAxMTAwMDAxMSAqLworCTB4OTksIC8qIDEwMDExMDAxICovCisJMHhiZCwgLyogMTAxMTExMDEgKi8KKwkweGJkLCAvKiAxMDExMTEwMSAqLworCTB4OTksIC8qIDEwMDExMDAxICovCisJMHhjMywgLyogMTEwMDAwMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisKKwkvKiAxMSAweDBiICdeSycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxZSwgLyogMDAwMTExMTAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MWEsIC8qIDAwMDExMDEwICovCisJMHgzMiwgLyogMDAxMTAwMTAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTIgMHgwYyAnXkwnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEzIDB4MGQgJ15NJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNmLCAvKiAwMDExMTExMSAqLworCTB4MzMsIC8qIDAwMTEwMDExICovCisJMHgzZiwgLyogMDAxMTExMTEgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNCAweDBlICdeTicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZiwgLyogMDExMTExMTEgKi8KKwkweDYzLCAvKiAwMTEwMDAxMSAqLworCTB4N2YsIC8qIDAxMTExMTExICovCisJMHg2MywgLyogMDExMDAwMTEgKi8KKwkweDYzLCAvKiAwMTEwMDAxMSAqLworCTB4NjMsIC8qIDAxMTAwMDExICovCisJMHg2MywgLyogMDExMDAwMTEgKi8KKwkweDY3LCAvKiAwMTEwMDExMSAqLworCTB4ZTcsIC8qIDExMTAwMTExICovCisJMHhlNiwgLyogMTExMDAxMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTUgMHgwZiAnXk8nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZGIsIC8qIDExMDExMDExICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweGU3LCAvKiAxMTEwMDExMSAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHhkYiwgLyogMTEwMTEwMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE2IDB4MTAgJ15QJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg4MCwgLyogMTAwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweDgwLCAvKiAxMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNyAweDExICdeUScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDIsIC8qIDAwMDAwMDEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MWUsIC8qIDAwMDExMTEwICovCisJMHgzZSwgLyogMDAxMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4M2UsIC8qIDAwMTExMTEwICovCisJMHgxZSwgLyogMDAwMTExMTAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwMiwgLyogMDAwMDAwMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTggMHgxMiAnXlInICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE5IDB4MTMgJ15TJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMCAweDE0ICdeVCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZiwgLyogMDExMTExMTEgKi8KKwkweGRiLCAvKiAxMTAxMTAxMSAqLworCTB4ZGIsIC8qIDExMDExMDExICovCisJMHhkYiwgLyogMTEwMTEwMTEgKi8KKwkweDdiLCAvKiAwMTExMTAxMSAqLworCTB4MWIsIC8qIDAwMDExMDExICovCisJMHgxYiwgLyogMDAwMTEwMTEgKi8KKwkweDFiLCAvKiAwMDAxMTAxMSAqLworCTB4MWIsIC8qIDAwMDExMDExICovCisJMHgxYiwgLyogMDAwMTEwMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjEgMHgxNSAnXlUnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIyIDB4MTYgJ15WJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMyAweDE3ICdeVycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjQgMHgxOCAnXlgnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI1IDB4MTkgJ15ZJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNiAweDFhICdeWicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjcgMHgxYiAnXlsnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI4IDB4MWMgJ15cJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyOSAweDFkICdeXScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgyOCwgLyogMDAxMDEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDI4LCAvKiAwMDEwMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMzAgMHgxZSAnXl4nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDMxIDB4MWYgJ15fJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgxMCwgLyogMDAwMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzMiAweDIwICcgJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzMyAweDIxICchJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzNCAweDIyICciJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgyNCwgLyogMDAxMDAxMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzNSAweDIzICcjJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzNiAweDI0ICckJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4ODYsIC8qIDEwMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzNyAweDI1ICclJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDg2LCAvKiAxMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzOCAweDI2ICcmJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAzOSAweDI3ICcnJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0MCAweDI4ICcoJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0MSAweDI5ICcpJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0MiAweDJhICcqJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0MyAweDJiICcrJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0NCAweDJjICcsJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0NSAweDJkICctJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0NiAweDJlICcuJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0NyAweDJmICcvJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMiwgLyogMDAwMDAwMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweDgwLCAvKiAxMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0OCAweDMwICcwJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkNiwgLyogMTEwMTAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA0OSAweDMxICcxJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1MCAweDMyICcyJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1MSAweDMzICczJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1MiAweDM0ICc0JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MWMsIC8qIDAwMDExMTAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDFlLCAvKiAwMDAxMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1MyAweDM1ICc1JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1NCAweDM2ICc2JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1NSAweDM3ICc3JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1NiAweDM4ICc4JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1NyAweDM5ICc5JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1OCAweDNhICc6JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA1OSAweDNiICc7JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2MCAweDNjICc8JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2MSAweDNkICc9JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2MiAweDNlICc+JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2MyAweDNmICc/JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2NCAweDQwICdAJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZGUsIC8qIDExMDExMTEwICovCisJMHhkZSwgLyogMTEwMTExMTAgKi8KKwkweGRlLCAvKiAxMTAxMTExMCAqLworCTB4ZGMsIC8qIDExMDExMTAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2NSAweDQxICdBJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2NiAweDQyICdCJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2NyAweDQzICdDJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzIsIC8qIDExMDAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2OCAweDQ0ICdEJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA2OSAweDQ1ICdFJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2MiwgLyogMDExMDAwMTAgKi8KKwkweDY4LCAvKiAwMTEwMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHg2OCwgLyogMDExMDEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjIsIC8qIDAxMTAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3MCAweDQ2ICdGJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2MiwgLyogMDExMDAwMTAgKi8KKwkweDY4LCAvKiAwMTEwMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHg2OCwgLyogMDExMDEwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3MSAweDQ3ICdHJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhkZSwgLyogMTEwMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNhLCAvKiAwMDExMTAxMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3MiAweDQ4ICdIJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3MyAweDQ5ICdJJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3NCAweDRhICdKJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDFlLCAvKiAwMDAxMTExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3NSAweDRiICdLJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGU2LCAvKiAxMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGU2LCAvKiAxMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3NiAweDRjICdMJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjIsIC8qIDAxMTAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3NyAweDRkICdNJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZWUsIC8qIDExMTAxMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3OCAweDRlICdOJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZTYsIC8qIDExMTAwMTEwICovCisJMHhmNiwgLyogMTExMTAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZGUsIC8qIDExMDExMTEwICovCisJMHhjZSwgLyogMTEwMDExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA3OSAweDRmICdPJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4MCAweDUwICdQJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4MSAweDUxICdRJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkZSwgLyogMTEwMTExMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4MiAweDUyICdSJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGU2LCAvKiAxMTEwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4MyAweDUzICdTJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4NCAweDU0ICdUJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg1YSwgLyogMDEwMTEwMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4NSAweDU1ICdVJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4NiAweDU2ICdWJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4NyAweDU3ICdXJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkNiwgLyogMTEwMTAxMTAgKi8KKwkweGQ2LCAvKiAxMTAxMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhlZSwgLyogMTExMDExMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4OCAweDU4ICdYJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA4OSAweDU5ICdZJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5MCAweDVhICdaJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg4NiwgLyogMTAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4YzIsIC8qIDExMDAwMDEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5MSAweDViICdbJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5MiAweDVjICdcJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ODAsIC8qIDEwMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwMCAqLworCTB4MGUsIC8qIDAwMDAxMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDAyLCAvKiAwMDAwMDAxMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5MyAweDVkICddJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5NCAweDVlICdeJyAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5NSAweDVmICdfJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5NiAweDYwICdgJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5NyAweDYxICdhJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5OCAweDYyICdiJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiA5OSAweDYzICdjJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMDAgMHg2NCAnZCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxYywgLyogMDAwMTExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTAxIDB4NjUgJ2UnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEwMiAweDY2ICdmJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDFjLCAvKiAwMDAxMTEwMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzMiwgLyogMDAxMTAwMTAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMDMgMHg2NyAnZycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTA0IDB4NjggJ2gnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4ZTYsIC8qIDExMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEwNSAweDY5ICdpJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMDYgMHg2YSAnaicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTA3IDB4NmIgJ2snICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZTAsIC8qIDExMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4ZTYsIC8qIDExMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEwOCAweDZjICdsJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMDkgMHg2ZCAnbScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhlYywgLyogMTExMDExMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkNiwgLyogMTEwMTAxMTAgKi8KKwkweGQ2LCAvKiAxMTAxMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTEwIDB4NmUgJ24nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZGMsIC8qIDExMDExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDExMSAweDZmICdvJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMTIgMHg3MCAncCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTEzIDB4NzEgJ3EnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MWUsIC8qIDAwMDExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDExNCAweDcyICdyJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMTUgMHg3MyAncycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTE2IDB4NzQgJ3QnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4ZmMsIC8qIDExMTExMTAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MWMsIC8qIDAwMDExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDExNyAweDc1ICd1JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMTggMHg3NiAndicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTE5IDB4NzcgJ3cnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGQ2LCAvKiAxMTAxMDExMCAqLworCTB4ZDYsIC8qIDExMDEwMTEwICovCisJMHhkNiwgLyogMTEwMTAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEyMCAweDc4ICd4JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMjEgMHg3OSAneScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTIyIDB4N2EgJ3onICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEyMyAweDdiICd7JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDBlLCAvKiAwMDAwMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMjQgMHg3YyAnfCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTI1IDB4N2QgJ30nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4NzAsIC8qIDAxMTEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEyNiAweDdlICd+JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMjcgMHg3ZiAnfycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTI4IDB4ODAgJ4AnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGMyLCAvKiAxMTAwMDAxMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMiwgLyogMTEwMDAwMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDcwLCAvKiAwMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEyOSAweDgxICeBJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMzAgMHg4MiAngicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTMxIDB4ODMgJ4MnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEzMiAweDg0ICeEJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMzMgMHg4NSAnhScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTM0IDB4ODYgJ4YnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEzNSAweDg3ICeHJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3MCwgLyogMDExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMzYgMHg4OCAniCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTAsIC8qIDAwMDEwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTM3IDB4ODkgJ4knICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDEzOCAweDhhICeKJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxMzkgMHg4YiAniycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTQwIDB4OGMgJ4wnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE0MSAweDhkICeNJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNDIgMHg4ZSAnjicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDEwLCAvKiAwMDAxMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTQzIDB4OGYgJ48nICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgxMCwgLyogMDAwMTAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE0NCAweDkwICeQJyAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDYyLCAvKiAwMTEwMDAxMCAqLworCTB4NjgsIC8qIDAxMTAxMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDY4LCAvKiAwMTEwMTAwMCAqLworCTB4NjIsIC8qIDAxMTAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNDUgMHg5MSAnkScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhlYywgLyogMTExMDExMDAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHg2ZSwgLyogMDExMDExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTQ2IDB4OTIgJ5InICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2UsIC8qIDAwMTExMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2UsIC8qIDExMDAxMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE0NyAweDkzICeTJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxMCwgLyogMDAwMTAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNDggMHg5NCAnlCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTQ5IDB4OTUgJ5UnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE1MCAweDk2ICeWJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweDc2LCAvKiAwMTExMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNTEgMHg5NyAnlycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTUyIDB4OTggJ5gnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4NzgsIC8qIDAxMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE1MyAweDk5ICeZJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNTQgMHg5YSAnmicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTU1IDB4OWIgJ5snICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE1NiAweDljICecJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzOCwgLyogMDAxMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NjQsIC8qIDAxMTAwMTAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhlNiwgLyogMTExMDAxMTAgKi8KKwkweGZjLCAvKiAxMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNTcgMHg5ZCAnnScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTU4IDB4OWUgJ54nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4YzQsIC8qIDExMDAwMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGRlLCAvKiAxMTAxMTExMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE1OSAweDlmICefJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDFiLCAvKiAwMDAxMTAxMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweDcwLCAvKiAwMTExMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNjAgMHhhMCAnoCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3OCwgLyogMDExMTEwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTYxIDB4YTEgJ6EnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE2MiAweGEyICeiJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNjMgMHhhMyAnoycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTY0IDB4YTQgJ6QnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZGMsIC8qIDExMDExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE2NSAweGE1ICelJyAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhlNiwgLyogMTExMDAxMTAgKi8KKwkweGY2LCAvKiAxMTExMDExMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHhkZSwgLyogMTEwMTExMTAgKi8KKwkweGNlLCAvKiAxMTAwMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNjYgMHhhNiAnpicgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgzZSwgLyogMDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTY3IDB4YTcgJ6cnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE2OCAweGE4ICeoJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNjkgMHhhOSAnqScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTcwIDB4YWEgJ6onICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE3MSAweGFiICerJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGUwLCAvKiAxMTEwMDAwMCAqLworCTB4NjIsIC8qIDAxMTAwMDEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4ZGMsIC8qIDExMDExMTAwICovCisJMHg4NiwgLyogMTAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzZSwgLyogMDAxMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNzIgMHhhYyAnrCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhlMCwgLyogMTExMDAwMDAgKi8KKwkweDYyLCAvKiAwMTEwMDAxMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweGNlLCAvKiAxMTAwMTExMCAqLworCTB4OWEsIC8qIDEwMDExMDEwICovCisJMHgzZiwgLyogMDAxMTExMTEgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4MDYsIC8qIDAwMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTczIDB4YWQgJ60nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE3NCAweGFlICeuJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxNzUgMHhhZiAnrycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTc2IDB4YjAgJ7AnICovCisJMHgxMSwgLyogMDAwMTAwMDEgKi8KKwkweDQ0LCAvKiAwMTAwMDEwMCAqLworCTB4MTEsIC8qIDAwMDEwMDAxICovCisJMHg0NCwgLyogMDEwMDAxMDAgKi8KKwkweDExLCAvKiAwMDAxMDAwMSAqLworCTB4NDQsIC8qIDAxMDAwMTAwICovCisJMHgxMSwgLyogMDAwMTAwMDEgKi8KKwkweDQ0LCAvKiAwMTAwMDEwMCAqLworCTB4MTEsIC8qIDAwMDEwMDAxICovCisJMHg0NCwgLyogMDEwMDAxMDAgKi8KKwkweDExLCAvKiAwMDAxMDAwMSAqLworCTB4NDQsIC8qIDAxMDAwMTAwICovCisJMHgxMSwgLyogMDAwMTAwMDEgKi8KKwkweDQ0LCAvKiAwMTAwMDEwMCAqLworCTB4MTEsIC8qIDAwMDEwMDAxICovCisJMHg0NCwgLyogMDEwMDAxMDAgKi8KKworCS8qIDE3NyAweGIxICexJyAqLworCTB4NTUsIC8qIDAxMDEwMTAxICovCisJMHhhYSwgLyogMTAxMDEwMTAgKi8KKwkweDU1LCAvKiAwMTAxMDEwMSAqLworCTB4YWEsIC8qIDEwMTAxMDEwICovCisJMHg1NSwgLyogMDEwMTAxMDEgKi8KKwkweGFhLCAvKiAxMDEwMTAxMCAqLworCTB4NTUsIC8qIDAxMDEwMTAxICovCisJMHhhYSwgLyogMTAxMDEwMTAgKi8KKwkweDU1LCAvKiAwMTAxMDEwMSAqLworCTB4YWEsIC8qIDEwMTAxMDEwICovCisJMHg1NSwgLyogMDEwMTAxMDEgKi8KKwkweGFhLCAvKiAxMDEwMTAxMCAqLworCTB4NTUsIC8qIDAxMDEwMTAxICovCisJMHhhYSwgLyogMTAxMDEwMTAgKi8KKwkweDU1LCAvKiAwMTAxMDEwMSAqLworCTB4YWEsIC8qIDEwMTAxMDEwICovCisKKwkvKiAxNzggMHhiMiAnsicgKi8KKwkweGRkLCAvKiAxMTAxMTEwMSAqLworCTB4NzcsIC8qIDAxMTEwMTExICovCisJMHhkZCwgLyogMTEwMTExMDEgKi8KKwkweDc3LCAvKiAwMTExMDExMSAqLworCTB4ZGQsIC8qIDExMDExMTAxICovCisJMHg3NywgLyogMDExMTAxMTEgKi8KKwkweGRkLCAvKiAxMTAxMTEwMSAqLworCTB4NzcsIC8qIDAxMTEwMTExICovCisJMHhkZCwgLyogMTEwMTExMDEgKi8KKwkweDc3LCAvKiAwMTExMDExMSAqLworCTB4ZGQsIC8qIDExMDExMTAxICovCisJMHg3NywgLyogMDExMTAxMTEgKi8KKwkweGRkLCAvKiAxMTAxMTEwMSAqLworCTB4NzcsIC8qIDAxMTEwMTExICovCisJMHhkZCwgLyogMTEwMTExMDEgKi8KKwkweDc3LCAvKiAwMTExMDExMSAqLworCisJLyogMTc5IDB4YjMgJ7MnICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDE4MCAweGI0ICe0JyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAxODEgMHhiNSAntScgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCisJLyogMTgyIDB4YjYgJ7YnICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweGY2LCAvKiAxMTExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDE4MyAweGI3ICe3JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAxODQgMHhiOCAnuCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCisJLyogMTg1IDB4YjkgJ7knICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4ZjYsIC8qIDExMTEwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweGY2LCAvKiAxMTExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDE4NiAweGJhICe6JyAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAxODcgMHhiYiAnuycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDA2LCAvKiAwMDAwMDExMCAqLworCTB4ZjYsIC8qIDExMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCisJLyogMTg4IDB4YmMgJ7wnICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4ZjYsIC8qIDExMTEwMTEwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDE4OSAweGJkICe9JyAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxOTAgMHhiZSAnvicgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhmOCwgLyogMTExMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTkxIDB4YmYgJ78nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY4LCAvKiAxMTExMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDE5MiAweGMwICfAJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxZiwgLyogMDAwMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAxOTMgMHhjMSAnwScgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTk0IDB4YzIgJ8InICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDE5NSAweGMzICfDJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxZiwgLyogMDAwMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAxOTYgMHhjNCAnxCcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMTk3IDB4YzUgJ8UnICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDE5OCAweGM2ICfGJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDFmLCAvKiAwMDAxMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxZiwgLyogMDAwMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAxOTkgMHhjNyAnxycgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzcsIC8qIDAwMTEwMTExICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCisJLyogMjAwIDB4YzggJ8gnICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzcsIC8qIDAwMTEwMTExICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDNmLCAvKiAwMDExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIwMSAweGM5ICfJJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDNmLCAvKiAwMDExMTExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzNywgLyogMDAxMTAxMTEgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAyMDIgMHhjYSAnyicgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHhmNywgLyogMTExMTAxMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjAzIDB4Y2IgJ8snICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY3LCAvKiAxMTExMDExMSAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDIwNCAweGNjICfMJyAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM3LCAvKiAwMDExMDExMSAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgzNywgLyogMDAxMTAxMTEgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAyMDUgMHhjZCAnzScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjA2IDB4Y2UgJ84nICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4ZjcsIC8qIDExMTEwMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGY3LCAvKiAxMTExMDExMSAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDIwNyAweGNmICfPJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMDggMHhkMCAn0CcgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjA5IDB4ZDEgJ9EnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDIxMCAweGQyICfSJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisKKwkvKiAyMTEgMHhkMyAn0ycgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4M2YsIC8qIDAwMTExMTExICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjEyIDB4ZDQgJ9QnICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MWYsIC8qIDAwMDExMTExICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDFmLCAvKiAwMDAxMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIxMyAweGQ1ICfVJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDFmLCAvKiAwMDAxMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxZiwgLyogMDAwMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAyMTQgMHhkNiAn1icgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2YsIC8qIDAwMTExMTExICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCisJLyogMjE1IDB4ZDcgJ9cnICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKworCS8qIDIxNiAweGQ4ICfYJyAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisKKwkvKiAyMTcgMHhkOSAn2ScgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4ZjgsIC8qIDExMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjE4IDB4ZGEgJ9onICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDFmLCAvKiAwMDAxMTExMSAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKworCS8qIDIxOSAweGRiICfbJyAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisKKwkvKiAyMjAgMHhkYyAn3CcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCisJLyogMjIxIDB4ZGQgJ90nICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKwkweGYwLCAvKiAxMTExMDAwMCAqLworCTB4ZjAsIC8qIDExMTEwMDAwICovCisJMHhmMCwgLyogMTExMTAwMDAgKi8KKworCS8qIDIyMiAweGRlICfeJyAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisJMHgwZiwgLyogMDAwMDExMTEgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGYsIC8qIDAwMDAxMTExICovCisKKwkvKiAyMjMgMHhkZiAn3ycgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4ZmYsIC8qIDExMTExMTExICovCisJMHhmZiwgLyogMTExMTExMTEgKi8KKwkweGZmLCAvKiAxMTExMTExMSAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjI0IDB4ZTAgJ+AnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHhkYywgLyogMTEwMTExMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4NzYsIC8qIDAxMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIyNSAweGUxICfhJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDc4LCAvKiAwMTExMTAwMCAqLworCTB4Y2MsIC8qIDExMDAxMTAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHhjYywgLyogMTEwMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGNjLCAvKiAxMTAwMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMjYgMHhlMiAn4icgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHhjMCwgLyogMTEwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjI3IDB4ZTMgJ+MnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4ZmUsIC8qIDExMTExMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIyOCAweGU0ICfkJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGZlLCAvKiAxMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMjkgMHhlNSAn5ScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHg3MCwgLyogMDExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjMwIDB4ZTYgJ+YnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4N2MsIC8qIDAxMTExMTAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4YzAsIC8qIDExMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIzMSAweGU3ICfnJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMzIgMHhlOCAn6CcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjMzIDB4ZTkgJ+knICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4MzgsIC8qIDAwMTExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIzNCAweGVhICfqJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDZjLCAvKiAwMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweGVlLCAvKiAxMTEwMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMzUgMHhlYiAn6ycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxZSwgLyogMDAwMTExMTAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDNlLCAvKiAwMDExMTExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDY2LCAvKiAwMTEwMDExMCAqLworCTB4NjYsIC8qIDAxMTAwMTEwICovCisJMHgzYywgLyogMDAxMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjM2IDB4ZWMgJ+wnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHhkYiwgLyogMTEwMTEwMTEgKi8KKwkweGRiLCAvKiAxMTAxMTAxMSAqLworCTB4ZGIsIC8qIDExMDExMDExICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDIzNyAweGVkICftJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDMsIC8qIDAwMDAwMDExICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4ZGIsIC8qIDExMDExMDExICovCisJMHhkYiwgLyogMTEwMTEwMTEgKi8KKwkweGYzLCAvKiAxMTExMDAxMSAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweGMwLCAvKiAxMTAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyMzggMHhlZSAn7icgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxYywgLyogMDAwMTExMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDdjLCAvKiAwMTExMTEwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHg2MCwgLyogMDExMDAwMDAgKi8KKwkweDYwLCAvKiAwMTEwMDAwMCAqLworCTB4MzAsIC8qIDAwMTEwMDAwICovCisJMHgxYywgLyogMDAwMTExMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjM5IDB4ZWYgJ+8nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3YywgLyogMDExMTExMDAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHhjNiwgLyogMTEwMDAxMTAgKi8KKwkweGM2LCAvKiAxMTAwMDExMCAqLworCTB4YzYsIC8qIDExMDAwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI0MCAweGYwICfwJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHhmZSwgLyogMTExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNDEgMHhmMSAn8ScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjQyIDB4ZjIgJ/InICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwNiwgLyogMDAwMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI0MyAweGYzICfzJyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDMwLCAvKiAwMDExMDAwMCAqLworCTB4NjAsIC8qIDAxMTAwMDAwICovCisJMHgzMCwgLyogMDAxMTAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNDQgMHhmNCAn9CcgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwZSwgLyogMDAwMDExMTAgKi8KKwkweDFiLCAvKiAwMDAxMTAxMSAqLworCTB4MWIsIC8qIDAwMDExMDExICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCisJLyogMjQ1IDB4ZjUgJ/UnICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHhkOCwgLyogMTEwMTEwMDAgKi8KKwkweGQ4LCAvKiAxMTAxMTAwMCAqLworCTB4ZDgsIC8qIDExMDExMDAwICovCisJMHg3MCwgLyogMDExMTAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI0NiAweGY2ICf2JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNDcgMHhmNyAn9ycgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg3NiwgLyogMDExMTAxMTAgKi8KKwkweGRjLCAvKiAxMTAxMTEwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjQ4IDB4ZjggJ/gnICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDM4LCAvKiAwMDExMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI0OSAweGY5ICf5JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgxOCwgLyogMDAwMTEwMDAgKi8KKwkweDE4LCAvKiAwMDAxMTAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNTAgMHhmYSAn+icgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjUxIDB4ZmIgJ/snICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDBmLCAvKiAwMDAwMTExMSAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MGMsIC8qIDAwMDAxMTAwICovCisJMHgwYywgLyogMDAwMDExMDAgKi8KKwkweGVjLCAvKiAxMTEwMTEwMCAqLworCTB4NmMsIC8qIDAxMTAxMTAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDNjLCAvKiAwMDExMTEwMCAqLworCTB4MWMsIC8qIDAwMDExMTAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI1MiAweGZjICf8JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHg2YywgLyogMDExMDExMDAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgzNiwgLyogMDAxMTAxMTAgKi8KKwkweDM2LCAvKiAwMDExMDExMCAqLworCTB4MzYsIC8qIDAwMTEwMTEwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKKwkvKiAyNTMgMHhmZCAn/ScgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4M2MsIC8qIDAwMTExMTAwICovCisJMHg2NiwgLyogMDExMDAxMTAgKi8KKwkweDBjLCAvKiAwMDAwMTEwMCAqLworCTB4MTgsIC8qIDAwMDExMDAwICovCisJMHgzMiwgLyogMDAxMTAwMTAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCisJLyogMjU0IDB4ZmUgJ/4nICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4N2UsIC8qIDAxMTExMTEwICovCisJMHg3ZSwgLyogMDExMTExMTAgKi8KKwkweDdlLCAvKiAwMTExMTExMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKworCS8qIDI1NSAweGZmICf/JyAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisJMHgwMCwgLyogMDAwMDAwMDAgKi8KKwkweDAwLCAvKiAwMDAwMDAwMCAqLworCTB4MDAsIC8qIDAwMDAwMDAwICovCisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2hhc2h0YWJsZS5jIGIvbGliL2hhc2h0YWJsZS5jCmluZGV4IDY4OTU1NTAuLmI3YmEzNDEgMTAwNjQ0Ci0tLSBhL2xpYi9oYXNodGFibGUuYworKysgYi9saWIvaGFzaHRhYmxlLmMKQEAgLTQ3OCw3ICs0NzgsOCBAQAogfQogCiBzc2l6ZV90IGhleHBvcnRfcihzdHJ1Y3QgaHNlYXJjaF9kYXRhICpodGFiLCBjb25zdCBjaGFyIHNlcCwKLQkJIGNoYXIgKipyZXNwLCBzaXplX3Qgc2l6ZSkKKwkJIGNoYXIgKipyZXNwLCBzaXplX3Qgc2l6ZSwKKwkJIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQogewogCUVOVFJZICpsaXN0W2h0YWItPnNpemVdOwogCWNoYXIgKnJlcywgKnA7CkBAIC01MDIsNiArNTAzLDE2IEBACiAKIAkJaWYgKGh0YWItPnRhYmxlW2ldLnVzZWQgPiAwKSB7CiAJCQlFTlRSWSAqZXAgPSAmaHRhYi0+dGFibGVbaV0uZW50cnk7CisJCQlpbnQgYXJnLCBmb3VuZCA9IDA7CisKKwkJCWZvciAoYXJnID0gMDsgYXJnIDwgYXJnYzsgKythcmcpIHsKKwkJCQlpZiAoc3RyY21wKGFyZ3ZbYXJnXSwgZXAtPmtleSkgPT0gMCkgeworCQkJCQlmb3VuZCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmICgoYXJnYyA+IDApICYmIChmb3VuZCA9PSAwKSkKKwkJCQljb250aW51ZTsKIAogCQkJbGlzdFtuKytdID0gZXA7CiAKQEAgLTUzOSw3ICs1NTAsNyBAQAogCS8qIENoZWNrIGlmIHRoZSB1c2VyIHN1cHBsaWVkIGJ1ZmZlciBzaXplIGlzIHN1ZmZpY2llbnQgKi8KIAlpZiAoc2l6ZSkgewogCQlpZiAoc2l6ZSA8IHRvdGxlbiArIDEpIHsJLyogcHJvdmlkZWQgYnVmZmVyIHRvbyBzbWFsbCAqLwotCQkJZGVidWcoIiMjIyBidWZmZXIgdG9vIHNtYWxsOiAlZCwgYnV0IG5lZWQgJWRcbiIsCisJCQlwcmludGYoIkVudiBleHBvcnQgYnVmZmVyIHRvbyBzbWFsbDogJWQsIGJ1dCBuZWVkICVkXG4iLAogCQkJCXNpemUsIHRvdGxlbiArIDEpOwogCQkJX19zZXRfZXJybm8oRU5PTUVNKTsKIAkJCXJldHVybiAoLTEpOwpkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvbmFuZF9ib290LmMgYi9uYW5kX3NwbC9uYW5kX2Jvb3QuYwppbmRleCA2MTVlZjI1Li5iZWUxMDI5IDEwMDY0NAotLS0gYS9uYW5kX3NwbC9uYW5kX2Jvb3QuYworKysgYi9uYW5kX3NwbC9uYW5kX2Jvb3QuYwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAJaW50IGVjY2J5dGVzID0gQ09ORklHX1NZU19OQU5EX0VDQ0JZVEVTOwogCWludCBlY2NzdGVwcyA9IENPTkZJR19TWVNfTkFORF9FQ0NTVEVQUzsKIAl1aW50OF90ICpwID0gZHN0OwotCWludCBzdGF0OwogCiAJbmFuZF9jb21tYW5kKG10ZCwgYmxvY2ssIHBhZ2UsIDAsIE5BTkRfQ01EX1JFQUQwKTsKIApAQCAtMjE3LDcgKzIxNiw3IEBACiAJCSAqIGZyb20gY29ycmVjdF9kYXRhKCkuIFdlIGp1c3QgaG9wZSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMKIAkJICogYXJlIGNvcnJlY3RlZCBieSB0aGlzIHJvdXRpbmUuCiAJCSAqLwotCQlzdGF0ID0gdGhpcy0+ZWNjLmNvcnJlY3QobXRkLCBwLCAmZWNjX2NvZGVbaV0sICZlY2NfY2FsY1tpXSk7CisJCXRoaXMtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY19jb2RlW2ldLCAmZWNjX2NhbGNbaV0pOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjY4LDcgKzI2Nyw2IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCBuYW5kX2NoaXA7CiAJbmFuZF9pbmZvX3QgbmFuZF9pbmZvOwotCWludCByZXQ7CiAJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSB2b2lkICgqdWJvb3QpKHZvaWQpOwogCiAJLyoKQEAgLTI4Nyw4ICsyODUsOCBAQAogCS8qCiAJICogTG9hZCBVLUJvb3QgaW1hZ2UgZnJvbSBOQU5EIGludG8gUkFNCiAJICovCi0JcmV0ID0gbmFuZF9sb2FkKCZuYW5kX2luZm8sIENPTkZJR19TWVNfTkFORF9VX0JPT1RfT0ZGUywgQ09ORklHX1NZU19OQU5EX1VfQk9PVF9TSVpFLAotCQkJKHVjaGFyICopQ09ORklHX1NZU19OQU5EX1VfQk9PVF9EU1QpOworCW5hbmRfbG9hZCgmbmFuZF9pbmZvLCBDT05GSUdfU1lTX05BTkRfVV9CT09UX09GRlMsIENPTkZJR19TWVNfTkFORF9VX0JPT1RfU0laRSwKKwkJICAodWNoYXIgKilDT05GSUdfU1lTX05BTkRfVV9CT09UX0RTVCk7CiAKICNpZmRlZiBDT05GSUdfTkFORF9FTlZfRFNUCiAJbmFuZF9sb2FkKCZuYW5kX2luZm8sIENPTkZJR19FTlZfT0ZGU0VULCBDT05GSUdfRU5WX1NJWkUsCmRpZmYgLS1naXQgYS9wb3N0L2xpYl9wb3dlcnBjL2ZwdS8yMDAwMTEyMi0xLmMgYi9wb3N0L2xpYl9wb3dlcnBjL2ZwdS8yMDAwMTEyMi0xLmMKaW5kZXggNGFmMzAwZC4uNWI0ZjQyYyAxMDA2NDQKLS0tIGEvcG9zdC9saWJfcG93ZXJwYy9mcHUvMjAwMDExMjItMS5jCisrKyBiL3Bvc3QvbGliX3Bvd2VycGMvZnB1LzIwMDAxMTIyLTEuYwpAQCAtMzQsMTIgKzM0LDExIEBACiAKIGludCBmcHVfcG9zdF90ZXN0X21hdGgxICh2b2lkKQogewotCXZvbGF0aWxlIGRvdWJsZSBhLCAqcDsKKwl2b2xhdGlsZSBkb3VibGUgYTsKIAlkb3VibGUgYywgZDsKIAl2b2xhdGlsZSBkb3VibGUgYjsKIAogCWQgPSAxLjA7Ci0JcCA9ICZiOwogCiAJZG8KIAl7CmRpZmYgLS1naXQgYS9zcGwvTWFrZWZpbGUgYi9zcGwvTWFrZWZpbGUKaW5kZXggYzgzMTdmYS4uNmFjNDJhMiAxMDA2NDQKLS0tIGEvc3BsL01ha2VmaWxlCisrKyBiL3NwbC9NYWtlZmlsZQpAQCAtNTQsNiArNTQsNyBAQAogTElCUy0kKENPTkZJR19TUExfTElCR0VORVJJQ19TVVBQT1JUKSArPSBsaWIvbGliZ2VuZXJpYy5vCiBMSUJTLSQoQ09ORklHX1NQTF9QT1dFUl9TVVBQT1JUKSArPSBkcml2ZXJzL3Bvd2VyL2xpYnBvd2VyLm8KIExJQlMtJChDT05GSUdfU1BMX05BTkRfU1VQUE9SVCkgKz0gZHJpdmVycy9tdGQvbmFuZC9saWJuYW5kLm8KK0xJQlMtJChDT05GSUdfU1BMX09ORU5BTkRfU1VQUE9SVCkgKz0gZHJpdmVycy9tdGQvb25lbmFuZC9saWJvbmVuYW5kLm8KIExJQlMtJChDT05GSUdfU1BMX0RNQV9TVVBQT1JUKSArPSBkcml2ZXJzL2RtYS9saWJkbWEubwogTElCUy0kKENPTkZJR19TUExfUE9TVF9NRU1fU1VQUE9SVCkgKz0gcG9zdC9kcml2ZXJzL21lbW9yeS5vCiAKQEAgLTYzLDYgKzY0LDkgQEAKIGlmZXEgKCQoU09DKSxvbWFwNCkKIExJQlMteSArPSAkKENQVURJUikvb21hcC1jb21tb24vbGlib21hcC1jb21tb24ubwogZW5kaWYKK2lmZXEgKCQoU09DKSxvbWFwNSkKK0xJQlMteSArPSAkKENQVURJUikvb21hcC1jb21tb24vbGlib21hcC1jb21tb24ubworZW5kaWYKIAogU1RBUlQgOj0gJChhZGRwcmVmaXggJChTUExUUkVFKS8sJChTVEFSVCkpCiBMSUJTIDo9ICQoYWRkcHJlZml4ICQoU1BMVFJFRSkvLCQoc29ydCAkKExJQlMteSkpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvLmdpdGlnbm9yZSBiL3Rvb2xzLy5naXRpZ25vcmUKaW5kZXggMDdmMjFhMy4uOThhNWM3OCAxMDA2NDQKLS0tIGEvdG9vbHMvLmdpdGlnbm9yZQorKysgYi90b29scy8uZ2l0aWdub3JlCkBAIC00LDYgKzQsNyBAQAogL2ltZzJzcmVjCiAvbWtpbWFnZQogL21wYzg2eF9jbGsKKy9teHNib290CiAvbmNiCiAvbmNwCiAvdWJzaGExCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZSBiL3Rvb2xzL01ha2VmaWxlCmluZGV4IGRmNTZhMjUuLmJkMGUwY2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2VmaWxlCisrKyBiL3Rvb2xzL01ha2VmaWxlCkBAIC02Nyw2ICs2Nyw3IEBACiBCSU5fRklMRVMtJChDT05GSUdfQ01EX0xPQURTKSArPSBpbWcyc3JlYyQoU0ZYKQogQklOX0ZJTEVTLSQoQ09ORklHX1hXQVlfU1dBUF9CWVRFUykgKz0geHdheS1zd2FwLWJ5dGVzJChTRlgpCiBCSU5fRklMRVMteSArPSBta2ltYWdlJChTRlgpCitCSU5fRklMRVMtJChDT05GSUdfTVgyOCkgKz0gbXhzYm9vdCQoU0ZYKQogQklOX0ZJTEVTLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5jYiQoU0ZYKQogQklOX0ZJTEVTLSQoQ09ORklHX1NIQTFfQ0hFQ0tfVUJfSU1HKSArPSB1YnNoYTEkKFNGWCkKIApAQCAtOTEsNiArOTIsNyBAQAogTk9QRURfT0JKX0ZJTEVTLXkgKz0gaW14aW1hZ2UubwogTk9QRURfT0JKX0ZJTEVTLXkgKz0gb21hcGltYWdlLm8KIE5PUEVEX09CSl9GSUxFUy15ICs9IG1raW1hZ2UubworT0JKX0ZJTEVTLSQoQ09ORklHX01YMjgpICs9IG14c2Jvb3QubwogT0JKX0ZJTEVTLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5jYi5vCiBOT1BFRF9PQkpfRklMRVMteSArPSBvc19zdXBwb3J0Lm8KIE9CSl9GSUxFUy0kKENPTkZJR19TSEExX0NIRUNLX1VCX0lNRykgKz0gdWJzaGExLm8KQEAgLTExMSw4ICsxMTMsMTEgQEAKIAogIyBHZW5lcmF0ZWQgTENEL3ZpZGVvIGxvZ28KIExPR09fSCA9ICQoT0JKVFJFRSkvaW5jbHVkZS9ibXBfbG9nby5oCitMT0dPX0RBVEFfSCA9ICQoT0JKVFJFRSkvaW5jbHVkZS9ibXBfbG9nb19kYXRhLmgKIExPR08tJChDT05GSUdfTENEX0xPR08pICs9ICQoTE9HT19IKQorTE9HTy0kKENPTkZJR19MQ0RfTE9HTykgKz0gJChMT0dPX0RBVEFfSCkKIExPR08tJChDT05GSUdfVklERU9fTE9HTykgKz0gJChMT0dPX0gpCitMT0dPLSQoQ09ORklHX1ZJREVPX0xPR08pICs9ICQoTE9HT19EQVRBX0gpCiAKIGlmZXEgKCQoTE9HT19CTVApLCkKIExPR09fQk1QPSBsb2dvcy9kZW54LmJtcApAQCAtMjA2LDYgKzIxMSwxMCBAQAogCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCiAJJChIT1NUU1RSSVApICRACiAKKyQob2JqKW14c2Jvb3QkKFNGWCk6CSQob2JqKW14c2Jvb3QubworCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCisJJChIT1NUU1RSSVApICRACisKICQob2JqKW5jYiQoU0ZYKToJJChvYmopbmNiLm8KIAkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAkXgogCSQoSE9TVFNUUklQKSAkQApAQCAtMjM2LDcgKzI0NSwxMCBAQAogZW5kaWYKIAogJChMT0dPX0gpOgkkKG9iailibXBfbG9nbyAkKExPR09fQk1QKQotCSQob2JqKS4vYm1wX2xvZ28gJChMT0dPX0JNUCkgPiRACisJJChvYmopLi9ibXBfbG9nbyAtLWdlbi1pbmZvICQoTE9HT19CTVApID4gJEAKKworJChMT0dPX0RBVEFfSCk6CSQob2JqKWJtcF9sb2dvICQoTE9HT19CTVApCisJJChvYmopLi9ibXBfbG9nbyAtLWdlbi1kYXRhICQoTE9HT19CTVApID4gJEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS90b29scy9ibXBfbG9nby5jIGIvdG9vbHMvYm1wX2xvZ28uYwppbmRleCA0NzIyOGQyLi5iMmFkM2Q1IDEwMDY0NAotLS0gYS90b29scy9ibXBfbG9nby5jCisrKyBiL3Rvb2xzL2JtcF9sb2dvLmMKQEAgLTEsNSArMSwxMCBAQAogI2luY2x1ZGUgImNvbXBpbGVyLmgiCiAKK2VudW0geworCU1PREVfR0VOX0lORk8sCisJTU9ERV9HRU5fREFUQQorfTsKKwogdHlwZWRlZiBzdHJ1Y3QgYml0bWFwX3MgewkJLyogYml0bWFwIGRlc2NyaXB0aW9uICovCiAJdWludDE2X3Qgd2lkdGg7CiAJdWludDE2X3QgaGVpZ2h0OwpAQCAtOSw2ICsxNCwxMSBAQAogCiAjZGVmaW5lIERFRkFVTFRfQ01BUF9TSVpFCTE2CS8qIHNpemUgb2YgZGVmYXVsdCBjb2xvciBtYXAJKi8KIAordm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKQoreworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstLWdlbi1pbmZvfC0tZ2VuLWRhdGFdIGZpbGVcbiIsIHByb2cpOworfQorCiAvKgogICogTmV1dHJhbGl6ZSBsaXR0bGUgZW5kaWFucy4KICAqLwpAQCAtMzksMjEgKzQ5LDUyIEBACiAJZXhpdCAoRVhJVF9GQUlMVVJFKTsKIH0KIAordm9pZCBnZW5faW5mbyhiaXRtYXBfdCAqYiwgdWludDE2X3Qgbl9jb2xvcnMpCit7CisJcHJpbnRmKCIvKlxuIgorCQkiICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgXCJ0b29scy9ibXBfbG9nb1wiXG4iCisJCSIgKlxuIgorCQkiICogRE8gTk9UIEVESVRcbiIKKwkJIiAqXG4iCisJCSIgKi9cblxuXG4iCisJCSIjaWZuZGVmIF9fQk1QX0xPR09fSF9fXG4iCisJCSIjZGVmaW5lIF9fQk1QX0xPR09fSF9fXG5cbiIKKwkJIiNkZWZpbmUgQk1QX0xPR09fV0lEVEhcdFx0JWRcbiIKKwkJIiNkZWZpbmUgQk1QX0xPR09fSEVJR0hUXHRcdCVkXG4iCisJCSIjZGVmaW5lIEJNUF9MT0dPX0NPTE9SU1x0XHQlZFxuIgorCQkiI2RlZmluZSBCTVBfTE9HT19PRkZTRVRcdFx0JWRcblxuIgorCQkiZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGJtcF9sb2dvX3BhbGV0dGVbXTtcbiIKKwkJImV4dGVybiB1bnNpZ25lZCBjaGFyIGJtcF9sb2dvX2JpdG1hcFtdO1xuXG4iCisJCSIjZW5kaWYgLyogX19CTVBfTE9HT19IX18gKi9cbiIsCisJCWItPndpZHRoLCBiLT5oZWlnaHQsIG5fY29sb3JzLAorCQlERUZBVUxUX0NNQVBfU0laRSk7Cit9CisKIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWludAlpLCB4OworCWludAltb2RlLCBpLCB4OwogCUZJTEUJKmZwOwogCWJpdG1hcF90IGJtcDsKIAliaXRtYXBfdCAqYiA9ICZibXA7CiAJdWludDE2X3QgZGF0YV9vZmZzZXQsIG5fY29sb3JzOwogCi0JaWYgKGFyZ2MgPCAyKSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIlVzYWdlOiAlcyBmaWxlXG4iLCBhcmd2WzBdKTsKKwlpZiAoYXJnYyA8IDMpIHsKKwkJdXNhZ2UoYXJndlswXSk7CiAJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CiAJfQogCi0JaWYgKChmcCA9IGZvcGVuIChhcmd2WzFdLCAicmIiKSkgPT0gTlVMTCkgewotCQlwZXJyb3IgKGFyZ3ZbMV0pOworCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLWdlbi1pbmZvIikpCisJCW1vZGUgPSBNT0RFX0dFTl9JTkZPOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tZ2VuLWRhdGEiKSkKKwkJbW9kZSA9IE1PREVfR0VOX0RBVEE7CisJZWxzZSB7CisJCXVzYWdlKGFyZ3ZbMF0pOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJZnAgPSBmb3Blbihhcmd2WzJdLCAicmIiKTsKKwlpZiAoIWZwKSB7CisJCXBlcnJvcihhcmd2WzJdKTsKIAkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKIAl9CiAKQEAgLTkyLDI4ICsxMzMsMjYgQEAKIAkJbl9jb2xvcnMgPSAyNTYgLSBERUZBVUxUX0NNQVBfU0laRTsKIAl9CiAKLQlwcmludGYgKCIvKlxuIgorCWlmIChtb2RlID09IE1PREVfR0VOX0lORk8pIHsKKwkJZ2VuX2luZm8oYiwgbl9jb2xvcnMpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcmludGYoIi8qXG4iCiAJCSIgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBcInRvb2xzL2JtcF9sb2dvXCJcbiIKIAkJIiAqXG4iCiAJCSIgKiBETyBOT1QgRURJVFxuIgogCQkiICpcbiIKIAkJIiAqL1xuXG5cbiIKLQkJIiNpZm5kZWYgX19CTVBfTE9HT19IX19cbiIKLQkJIiNkZWZpbmUgX19CTVBfTE9HT19IX19cblxuIgotCQkiI2RlZmluZSBCTVBfTE9HT19XSURUSFx0XHQlZFxuIgotCQkiI2RlZmluZSBCTVBfTE9HT19IRUlHSFRcdFx0JWRcbiIKLQkJIiNkZWZpbmUgQk1QX0xPR09fQ09MT1JTXHRcdCVkXG4iCi0JCSIjZGVmaW5lIEJNUF9MT0dPX09GRlNFVFx0XHQlZFxuIgotCQkiXG4iLAotCQliLT53aWR0aCwgYi0+aGVpZ2h0LCBuX2NvbG9ycywKLQkJREVGQVVMVF9DTUFQX1NJWkUpOworCQkiI2lmbmRlZiBfX0JNUF9MT0dPX0RBVEFfSF9fXG4iCisJCSIjZGVmaW5lIF9fQk1QX0xPR09fREFUQV9IX19cblxuIik7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KIAlpZiAoKGItPmRhdGEgPSAodWludDhfdCAqKW1hbGxvYyhiLT53aWR0aCAqIGItPmhlaWdodCkpID09IE5VTEwpCiAJCWVycm9yICgiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGZpbGUiLCBmcCk7CiAKIAkvKiByZWFkIGFuZCBwcmludCB0aGUgcGFsZXR0ZSBpbmZvcm1hdGlvbiAqLwotCXByaW50ZiAoInVuc2lnbmVkIHNob3J0IGJtcF9sb2dvX3BhbGV0dGVbXSA9IHtcbiIpOworCXByaW50ZigidW5zaWduZWQgc2hvcnQgYm1wX2xvZ29fcGFsZXR0ZVtdID0ge1xuIik7CiAKIAlmb3IgKGk9MDsgaTxuX2NvbG9yczsgKytpKSB7CiAJCWItPnBhbGV0dGVbKGludCkoaSozKzIpXSA9IGZnZXRjKGZwKTsKQEAgLTEzNywxNCArMTc2LDEzIEBACiAJcHJpbnRmICgiXG4iKTsKIAlwcmludGYgKCJ9O1xuIik7CiAJcHJpbnRmICgiXG4iKTsKLQlwcmludGYgKCJ1bnNpZ25lZCBjaGFyIGJtcF9sb2dvX2JpdG1hcFtdID0ge1xuIik7CisJcHJpbnRmKCJ1bnNpZ25lZCBjaGFyIGJtcF9sb2dvX2JpdG1hcFtdID0ge1xuIik7CiAJZm9yIChpPShiLT5oZWlnaHQtMSkqYi0+d2lkdGg7IGk+PTA7IGktPWItPndpZHRoKSB7CiAJCWZvciAoeCA9IDA7IHggPCBiLT53aWR0aDsgeCsrKSB7CiAJCQliLT5kYXRhWyh1aW50MTZfdCkgaSArIHhdID0gKHVpbnQ4X3QpIGZnZXRjIChmcCkgXAogCQkJCQkJKyBERUZBVUxUX0NNQVBfU0laRTsKIAkJfQogCX0KLQlmY2xvc2UgKGZwKTsKIAogCWZvciAoaT0wOyBpPChiLT5oZWlnaHQqYi0+d2lkdGgpOyArK2kpIHsKIAkJaWYgKChpJTgpID09IDApCkBAIC0xNTYsOCArMTk0LDEwIEBACiAJfQogCXByaW50ZiAoIlxuIgogCQkifTtcblxuIgotCQkiI2VuZGlmIC8qIF9fQk1QX0xPR09fSF9fICovXG4iCisJCSIjZW5kaWYgLyogX19CTVBfTE9HT19EQVRBX0hfXyAqL1xuIgogCSk7CiAKLQlyZXR1cm4gKDApOworb3V0OgorCWZjbG9zZShmcCk7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9jaGVja3BhdGNoLnBsIGIvdG9vbHMvY2hlY2twYXRjaC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMDQ4YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvY2hlY2twYXRjaC5wbApAQCAtMCwwICsxLDMzMzcgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gKHRoZSBmaWxlIGhhbmRsaW5nIGJpdCkKKyMgKGMpIDIwMDUsIEpvZWwgU2Nob3BwIDxqc2Nob3BwQGF1c3Rpbi5pYm0uY29tPiAodGhlIHVnbHkgYml0KQorIyAoYykgMjAwNywyMDA4LCBBbmR5IFdoaXRjcm9mdCA8YXB3QHVrLmlibS5jb20+IChuZXcgY29uZGl0aW9ucywgdGVzdCBzdWl0ZSkKKyMgKGMpIDIwMDgtMjAxMCBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgorCit1c2Ugc3RyaWN0OworCitteSAkUCA9ICQwOworJFAgPX4gc0AuKi9AQGc7CisKK215ICRWID0gJzAuMzInOworCit1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOworCitteSAkcXVpZXQgPSAwOworbXkgJHRyZWUgPSAxOworbXkgJGNoa19zaWdub2ZmID0gMTsKK215ICRjaGtfcGF0Y2ggPSAxOworbXkgJHRzdF9vbmx5OworbXkgJGVtYWNzID0gMDsKK215ICR0ZXJzZSA9IDA7CitteSAkZmlsZSA9IDA7CitteSAkY2hlY2sgPSAwOworbXkgJHN1bW1hcnkgPSAxOworbXkgJG1haWxiYWNrID0gMDsKK215ICRzdW1tYXJ5X2ZpbGUgPSAwOworbXkgJHNob3dfdHlwZXMgPSAwOworbXkgJHJvb3Q7CitteSAlZGVidWc7CitteSAlaWdub3JlX3R5cGUgPSAoKTsKK215IEBpZ25vcmUgPSAoKTsKK215ICRoZWxwID0gMDsKK215ICRjb25maWd1cmF0aW9uX2ZpbGUgPSAiLmNoZWNrcGF0Y2guY29uZiI7CisKK3N1YiBoZWxwIHsKKwlteSAoJGV4aXRjb2RlKSA9IEBfOworCisJcHJpbnQgPDwgIkVPTSI7CitVc2FnZTogJFAgW09QVElPTl0uLi4gW0ZJTEVdLi4uCitWZXJzaW9uOiAkVgorCitPcHRpb25zOgorICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICBxdWlldAorICAtLW5vLXRyZWUgICAgICAgICAgICAgICAgICBydW4gd2l0aG91dCBhIGtlcm5lbCB0cmVlCisgIC0tbm8tc2lnbm9mZiAgICAgICAgICAgICAgIGRvIG5vdCBjaGVjayBmb3IgJ1NpZ25lZC1vZmYtYnknIGxpbmUKKyAgLS1wYXRjaCAgICAgICAgICAgICAgICAgICAgdHJlYXQgRklMRSBhcyBwYXRjaGZpbGUgKGRlZmF1bHQpCisgIC0tZW1hY3MgICAgICAgICAgICAgICAgICAgIGVtYWNzIGNvbXBpbGUgd2luZG93IGZvcm1hdAorICAtLXRlcnNlICAgICAgICAgICAgICAgICAgICBvbmUgbGluZSBwZXIgcmVwb3J0CisgIC1mLCAtLWZpbGUgICAgICAgICAgICAgICAgIHRyZWF0IEZJTEUgYXMgcmVndWxhciBzb3VyY2UgZmlsZQorICAtLXN1YmplY3RpdmUsIC0tc3RyaWN0ICAgICBlbmFibGUgbW9yZSBzdWJqZWN0aXZlIHRlc3RzCisgIC0taWdub3JlIFRZUEUoLFRZUEUyLi4uKSAgIGlnbm9yZSB2YXJpb3VzIGNvbW1hIHNlcGFyYXRlZCBtZXNzYWdlIHR5cGVzCisgIC0tc2hvdy10eXBlcyAgICAgICAgICAgICAgIHNob3cgdGhlIG1lc3NhZ2UgInR5cGVzIiBpbiB0aGUgb3V0cHV0CisgIC0tcm9vdD1QQVRIICAgICAgICAgICAgICAgIFBBVEggdG8gdGhlIGtlcm5lbCB0cmVlIHJvb3QKKyAgLS1uby1zdW1tYXJ5ICAgICAgICAgICAgICAgc3VwcHJlc3MgdGhlIHBlci1maWxlIHN1bW1hcnkKKyAgLS1tYWlsYmFjayAgICAgICAgICAgICAgICAgb25seSBwcm9kdWNlIGEgcmVwb3J0IGluIGNhc2Ugb2Ygd2FybmluZ3MvZXJyb3JzCisgIC0tc3VtbWFyeS1maWxlICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGZpbGVuYW1lIGluIHN1bW1hcnkKKyAgLS1kZWJ1ZyBLRVk9WzB8MV0gICAgICAgICAgdHVybiBvbi9vZmYgZGVidWdnaW5nIG9mIEtFWSwgd2hlcmUgS0VZIGlzIG9uZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzJywgJ3Bvc3NpYmxlJywgJ3R5cGUnLCBhbmQgJ2F0dHInIChkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsbCBvZmYpCisgIC0tdGVzdC1vbmx5PVdPUkQgICAgICAgICAgIHJlcG9ydCBvbmx5IHdhcm5pbmdzL2Vycm9ycyBjb250YWluaW5nIFdPUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbGx5CisgIC1oLCAtLWhlbHAsIC0tdmVyc2lvbiAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisKK1doZW4gRklMRSBpcyAtIHJlYWQgc3RhbmRhcmQgaW5wdXQuCitFT00KKworCWV4aXQoJGV4aXRjb2RlKTsKK30KKworbXkgJGNvbmYgPSB3aGljaF9jb25mKCRjb25maWd1cmF0aW9uX2ZpbGUpOworaWYgKC1mICRjb25mKSB7CisJbXkgQGNvbmZfYXJnczsKKwlvcGVuKG15ICRjb25mZmlsZSwgJzwnLCAiJGNvbmYiKQorCSAgICBvciB3YXJuICIkUDogQ2FuJ3QgZmluZCBhIHJlYWRhYmxlICRjb25maWd1cmF0aW9uX2ZpbGUgZmlsZSAkIVxuIjsKKworCXdoaWxlICg8JGNvbmZmaWxlPikgeworCQlteSAkbGluZSA9ICRfOworCisJCSRsaW5lID1+IHMvXHMqXG4/JC8vZzsKKwkJJGxpbmUgPX4gcy9eXHMqLy9nOworCQkkbGluZSA9fiBzL1xzKy8gL2c7CisKKwkJbmV4dCBpZiAoJGxpbmUgPX4gbS9eXHMqIy8pOworCQluZXh0IGlmICgkbGluZSA9fiBtL15ccyokLyk7CisKKwkJbXkgQHdvcmRzID0gc3BsaXQoIiAiLCAkbGluZSk7CisJCWZvcmVhY2ggbXkgJHdvcmQgKEB3b3JkcykgeworCQkJbGFzdCBpZiAoJHdvcmQgPX4gbS9eIy8pOworCQkJcHVzaCAoQGNvbmZfYXJncywgJHdvcmQpOworCQl9CisJfQorCWNsb3NlKCRjb25mZmlsZSk7CisJdW5zaGlmdChAQVJHViwgQGNvbmZfYXJncykgaWYgQGNvbmZfYXJnczsKK30KKworR2V0T3B0aW9ucygKKwkncXxxdWlldCsnCT0+IFwkcXVpZXQsCisJJ3RyZWUhJwkJPT4gXCR0cmVlLAorCSdzaWdub2ZmIScJPT4gXCRjaGtfc2lnbm9mZiwKKwkncGF0Y2ghJwk9PiBcJGNoa19wYXRjaCwKKwknZW1hY3MhJwk9PiBcJGVtYWNzLAorCSd0ZXJzZSEnCT0+IFwkdGVyc2UsCisJJ2Z8ZmlsZSEnCT0+IFwkZmlsZSwKKwknc3ViamVjdGl2ZSEnCT0+IFwkY2hlY2ssCisJJ3N0cmljdCEnCT0+IFwkY2hlY2ssCisJJ2lnbm9yZT1zJwk9PiBcQGlnbm9yZSwKKwknc2hvdy10eXBlcyEnCT0+IFwkc2hvd190eXBlcywKKwkncm9vdD1zJwk9PiBcJHJvb3QsCisJJ3N1bW1hcnkhJwk9PiBcJHN1bW1hcnksCisJJ21haWxiYWNrIScJPT4gXCRtYWlsYmFjaywKKwknc3VtbWFyeS1maWxlIScJPT4gXCRzdW1tYXJ5X2ZpbGUsCisKKwknZGVidWc9cycJPT4gXCVkZWJ1ZywKKwkndGVzdC1vbmx5PXMnCT0+IFwkdHN0X29ubHksCisJJ2h8aGVscCcJPT4gXCRoZWxwLAorCSd2ZXJzaW9uJwk9PiBcJGhlbHAKKykgb3IgaGVscCgxKTsKKworaGVscCgwKSBpZiAoJGhlbHApOworCitteSAkZXhpdCA9IDA7CisKK2lmICgkI0FSR1YgPCAwKSB7CisJcHJpbnQgIiRQOiBubyBpbnB1dCBmaWxlc1xuIjsKKwlleGl0KDEpOworfQorCitAaWdub3JlID0gc3BsaXQoLywvLCBqb2luKCcsJyxAaWdub3JlKSk7Citmb3JlYWNoIG15ICR3b3JkIChAaWdub3JlKSB7CisJJHdvcmQgPX4gcy9ccypcbj8kLy9nOworCSR3b3JkID1+IHMvXlxzKi8vZzsKKwkkd29yZCA9fiBzL1xzKy8gL2c7CisJJHdvcmQgPX4gdHIvW2Etel0vW0EtWl0vOworCisJbmV4dCBpZiAoJHdvcmQgPX4gbS9eXHMqIy8pOworCW5leHQgaWYgKCR3b3JkID1+IG0vXlxzKiQvKTsKKworCSRpZ25vcmVfdHlwZXskd29yZH0rKzsKK30KKworbXkgJGRiZ192YWx1ZXMgPSAwOworbXkgJGRiZ19wb3NzaWJsZSA9IDA7CitteSAkZGJnX3R5cGUgPSAwOworbXkgJGRiZ19hdHRyID0gMDsKK2ZvciBteSAka2V5IChrZXlzICVkZWJ1ZykgeworCSMjIG5vIGNyaXRpYworCWV2YWwgIlwke2RiZ18ka2V5fSA9ICckZGVidWd7JGtleX0nOyI7CisJZGllICIkQCIgaWYgKCRAKTsKK30KKworbXkgJHJwdF9jbGVhbmVycyA9IDA7CisKK2lmICgkdGVyc2UpIHsKKwkkZW1hY3MgPSAxOworCSRxdWlldCsrOworfQorCitpZiAoJHRyZWUpIHsKKwlpZiAoZGVmaW5lZCAkcm9vdCkgeworCQlpZiAoIXRvcF9vZl9rZXJuZWxfdHJlZSgkcm9vdCkpIHsKKwkJCWRpZSAiJFA6ICRyb290OiAtLXJvb3QgZG9lcyBub3QgcG9pbnQgYXQgYSB2YWxpZCB0cmVlXG4iOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHRvcF9vZl9rZXJuZWxfdHJlZSgnLicpKSB7CisJCQkkcm9vdCA9ICcuJzsKKwkJfSBlbHNpZiAoJDAgPX4gbUAoLiopL3NjcmlwdHMvW14vXSokQCAmJgorCQkJCQkJdG9wX29mX2tlcm5lbF90cmVlKCQxKSkgeworCQkJJHJvb3QgPSAkMTsKKwkJfQorCX0KKworCWlmICghZGVmaW5lZCAkcm9vdCkgeworCQlwcmludCAiTXVzdCBiZSBydW4gZnJvbSB0aGUgdG9wLWxldmVsIGRpci4gb2YgYSBrZXJuZWwgdHJlZVxuIjsKKwkJZXhpdCgyKTsKKwl9Cit9CisKK215ICRlbWl0dGVkX2NvcnJ1cHQgPSAwOworCitvdXIgJElkZW50CT0gcXJ7CisJCQlbQS1aYS16X11bQS1aYS16XGRfXSoKKwkJCSg/OlxzKlwjXCNccypbQS1aYS16X11bQS1aYS16XGRfXSopKgorCQl9eDsKK291ciAkU3RvcmFnZQk9IHFye2V4dGVybnxzdGF0aWN8YXNtbGlua2FnZX07CitvdXIgJFNwYXJzZQk9IHFyeworCQkJX191c2VyfAorCQkJX19rZXJuZWx8CisJCQlfX2ZvcmNlfAorCQkJX19pb21lbXwKKwkJCV9fbXVzdF9jaGVja3wKKwkJCV9faW5pdF9yZWZva3wKKwkJCV9fa3Byb2Jlc3wKKwkJCV9fcmVmfAorCQkJX19yY3UKKwkJfXg7CisKKyMgTm90ZXMgdG8gJEF0dHJpYnV0ZToKKyMgV2UgbmVlZCBcYiBhZnRlciAnaW5pdCcgb3RoZXJ3aXNlICdpbml0Y29uc3QnIHdpbGwgY2F1c2UgYSBmYWxzZSBwb3NpdGl2ZSBpbiBhIGNoZWNrCitvdXIgJEF0dHJpYnV0ZQk9IHFyeworCQkJY29uc3R8CisJCQlfX3BlcmNwdXwKKwkJCV9fbm9jYXN0fAorCQkJX19zYWZlfAorCQkJX19iaXR3aXNlX198CisJCQlfX3BhY2tlZF9ffAorCQkJX19wYWNrZWQyX198CisJCQlfX25ha2VkfAorCQkJX19tYXliZV91bnVzZWR8CisJCQlfX2Fsd2F5c191bnVzZWR8CisJCQlfX25vcmV0dXJufAorCQkJX191c2VkfAorCQkJX19jb2xkfAorCQkJX19ub2Nsb25lfAorCQkJX19kZXByZWNhdGVkfAorCQkJX19yZWFkX21vc3RseXwKKwkJCV9fa3Byb2Jlc3wKKwkJCV9fKD86bWVtfGNwdXxkZXZ8KSg/OmluaXRkYXRhfGluaXRjb25zdHxpbml0XGIpfAorCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkfAorCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcHwKKwkJCV9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXB8CisJCQlfX3dlYWsKKwkJICB9eDsKK291ciAkTW9kaWZpZXI7CitvdXIgJElubGluZQk9IHFye2lubGluZXxfX2Fsd2F5c19pbmxpbmV8bm9pbmxpbmV9Oworb3VyICRNZW1iZXIJPSBxcnstPiRJZGVudHxcLiRJZGVudHxcW1teXV0qXF19Oworb3VyICRMdmFsCT0gcXJ7JElkZW50KD86JE1lbWJlcikqfTsKKworb3VyICRDb25zdGFudAk9IHFyeyg/OlswLTldK3wweFswLTlhLWZBLUZdKylbVUxdKn07CitvdXIgJEFzc2lnbm1lbnQJPSBxcnsoPzpcKlw9fC89fCU9fFwrPXwtPXw8PD18Pj49fCY9fFxePXxcfD18PSl9Oworb3VyICRDb21wYXJlICAgID0gcXJ7PD18Pj18PT18IT18PHw+fTsKK291ciAkT3BlcmF0b3JzCT0gcXJ7CisJCQk8PXw+PXw9PXwhPXwKKwkJCT0+fC0+fDw8fD4+fDx8PnwhfH58CisJCQkmJnxcfFx8fCx8XF58XCtcK3wtLXwmfFx8fFwrfC18XCp8XC98JQorCQkgIH14OworCitvdXIgJE5vbnB0clR5cGU7CitvdXIgJFR5cGU7CitvdXIgJERlY2xhcmU7CisKK291ciAkVVRGOAk9IHFyIHsKKwlbXHgwOVx4MEFceDBEXHgyMC1ceDdFXSAgICAgICAgICAgICAgIyBBU0NJSQorCXwgW1x4QzItXHhERl1bXHg4MC1ceEJGXSAgICAgICAgICAgICAjIG5vbi1vdmVybG9uZyAyLWJ5dGUKKwl8ICBceEUwW1x4QTAtXHhCRl1bXHg4MC1ceEJGXSAgICAgICAgIyBleGNsdWRpbmcgb3ZlcmxvbmdzCisJfCBbXHhFMS1ceEVDXHhFRVx4RUZdW1x4ODAtXHhCRl17Mn0gICMgc3RyYWlnaHQgMy1ieXRlCisJfCAgXHhFRFtceDgwLVx4OUZdW1x4ODAtXHhCRl0gICAgICAgICMgZXhjbHVkaW5nIHN1cnJvZ2F0ZXMKKwl8ICBceEYwW1x4OTAtXHhCRl1bXHg4MC1ceEJGXXsyfSAgICAgIyBwbGFuZXMgMS0zCisJfCBbXHhGMS1ceEYzXVtceDgwLVx4QkZdezN9ICAgICAgICAgICMgcGxhbmVzIDQtMTUKKwl8ICBceEY0W1x4ODAtXHg4Rl1bXHg4MC1ceEJGXXsyfSAgICAgIyBwbGFuZSAxNgorfXg7CisKK291ciAkdHlwZVR5cGVkZWZzID0gcXJ7KD94OgorCSg/Ol9fKT8oPzp1fHN8YmV8bGUpKD86OHwxNnwzMnw2NCl8CisJYXRvbWljX3QKKyl9OworCitvdXIgJGxvZ0Z1bmN0aW9ucyA9IHFyeyg/eDoKKwlwcmludGsoPzpfcmF0ZWxpbWl0ZWR8X29uY2V8KXwKKwlbYS16MC05XStfKD86cHJpbnRrfGVtZXJnfGFsZXJ0fGNyaXR8ZXJyfHdhcm5pbmd8d2Fybnxub3RpY2V8aW5mb3xkZWJ1Z3xkYmd8dmRiZ3xkZXZlbHxjb250fFdBUk4pKD86X3JhdGVsaW1pdGVkfF9vbmNlfCl8CisJV0FSTig/Ol9SQVRFTElNSVR8X09OQ0V8KXwKKwlwYW5pY3wKKwlNT0RVTEVfW0EtWl9dKworKX07CisKK291ciAkc2lnbmF0dXJlX3RhZ3MgPSBxcnsoP3hpOgorCVNpZ25lZC1vZmYtYnk6fAorCUFja2VkLWJ5OnwKKwlUZXN0ZWQtYnk6fAorCVJldmlld2VkLWJ5OnwKKwlSZXBvcnRlZC1ieTp8CisJVG86fAorCUNjOgorKX07CisKK291ciBAdHlwZUxpc3QgPSAoCisJcXJ7dm9pZH0sCisJcXJ7KD86dW5zaWduZWRccyspP2NoYXJ9LAorCXFyeyg/OnVuc2lnbmVkXHMrKT9zaG9ydH0sCisJcXJ7KD86dW5zaWduZWRccyspP2ludH0sCisJcXJ7KD86dW5zaWduZWRccyspP2xvbmd9LAorCXFyeyg/OnVuc2lnbmVkXHMrKT9sb25nXHMraW50fSwKKwlxcnsoPzp1bnNpZ25lZFxzKyk/bG9uZ1xzK2xvbmd9LAorCXFyeyg/OnVuc2lnbmVkXHMrKT9sb25nXHMrbG9uZ1xzK2ludH0sCisJcXJ7dW5zaWduZWR9LAorCXFye2Zsb2F0fSwKKwlxcntkb3VibGV9LAorCXFye2Jvb2x9LAorCXFye3N0cnVjdFxzKyRJZGVudH0sCisJcXJ7dW5pb25ccyskSWRlbnR9LAorCXFye2VudW1ccyskSWRlbnR9LAorCXFyeyR7SWRlbnR9X3R9LAorCXFyeyR7SWRlbnR9X2hhbmRsZXJ9LAorCXFyeyR7SWRlbnR9X2hhbmRsZXJfZm59LAorKTsKK291ciBAbW9kaWZpZXJMaXN0ID0gKAorCXFye2Zhc3RjYWxsfSwKKyk7CisKK291ciAkYWxsb3dlZF9hc21faW5jbHVkZXMgPSBxcnsoP3g6CisJaXJxfAorCW1lbW9yeQorKX07CisjIG1lbW9yeS5oOiBBUk0gaGFzIGEgY3VzdG9tIG9uZQorCitzdWIgYnVpbGRfdHlwZXMgeworCW15ICRtb2RzID0gIig/eDogIFxuIiAuIGpvaW4oInxcbiAgIiwgQG1vZGlmaWVyTGlzdCkgLiAiXG4pIjsKKwlteSAkYWxsID0gIig/eDogIFxuIiAuIGpvaW4oInxcbiAgIiwgQHR5cGVMaXN0KSAuICJcbikiOworCSRNb2RpZmllcgk9IHFyeyg/OiRBdHRyaWJ1dGV8JFNwYXJzZXwkbW9kcyl9OworCSROb25wdHJUeXBlCT0gcXJ7CisJCQkoPzokTW9kaWZpZXJccyt8Y29uc3RccyspKgorCQkJKD86CisJCQkJKD86dHlwZW9mfF9fdHlwZW9mX18pXHMqXChccypcKipccyokSWRlbnRccypcKXwKKwkJCQkoPzokdHlwZVR5cGVkZWZzXGIpfAorCQkJCSg/OiR7YWxsfVxiKQorCQkJKQorCQkJKD86XHMrJE1vZGlmaWVyfFxzK2NvbnN0KSoKKwkJICB9eDsKKwkkVHlwZQk9IHFyeworCQkJJE5vbnB0clR5cGUKKwkJCSg/Oltcc1wqXStccypjb25zdHxbXHNcKl0rfCg/OlxzKlxbXHMqXF0pKyk/CisJCQkoPzpccyskSW5saW5lfFxzKyRNb2RpZmllcikqCisJCSAgfXg7CisJJERlY2xhcmUJPSBxcnsoPzokU3RvcmFnZVxzKyk/JFR5cGV9OworfQorYnVpbGRfdHlwZXMoKTsKKworb3VyICRtYXRjaF9iYWxhbmNlZF9wYXJlbnRoZXNlcyA9IHFyLyhcKCg/OlteXChcKV0rfCgtMSkpKlwpKS87CisKK291ciAkVHlwZWNhc3QJPSBxcntccyooXChccyokTm9ucHRyVHlwZVxzKlwpKXswLDF9XHMqfTsKK291ciAkTHZhbE9yRnVuYwk9IHFyeygkTHZhbClccyooJG1hdGNoX2JhbGFuY2VkX3BhcmVudGhlc2VzezAsMX0pXHMqfTsKKworc3ViIGRlcGFyZW50aGVzaXplIHsKKwlteSAoJHN0cmluZykgPSBAXzsKKwlyZXR1cm4gIiIgaWYgKCFkZWZpbmVkKCRzdHJpbmcpKTsKKwkkc3RyaW5nID1+IHNAXlxzKlwoXHMqQEBnOworCSRzdHJpbmcgPX4gc0BccypcKVxzKiRAQGc7CisJJHN0cmluZyA9fiBzQFxzK0AgQGc7CisJcmV0dXJuICRzdHJpbmc7Cit9CisKKyRjaGtfc2lnbm9mZiA9IDAgaWYgKCRmaWxlKTsKKworbXkgQGRlcF9pbmNsdWRlcyA9ICgpOworbXkgQGRlcF9mdW5jdGlvbnMgPSAoKTsKK215ICRyZW1vdmFsID0gIkRvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCI7CitpZiAoJHRyZWUgJiYgLWYgIiRyb290LyRyZW1vdmFsIikgeworCW9wZW4obXkgJFJFTU9WRSwgJzwnLCAiJHJvb3QvJHJlbW92YWwiKSB8fAorCQkJCWRpZSAiJFA6ICRyZW1vdmFsOiBvcGVuIGZhaWxlZCAtICQhXG4iOworCXdoaWxlICg8JFJFTU9WRT4pIHsKKwkJaWYgKC9eQ2hlY2s6XHMrKC4qXFMpLykgeworCQkJZm9yIG15ICRlbnRyeSAoc3BsaXQoL1ssIF0rLywgJDEpKSB7CisJCQkJaWYgKCRlbnRyeSA9fiBtQGluY2x1ZGUvKC4qKUApIHsKKwkJCQkJcHVzaChAZGVwX2luY2x1ZGVzLCAkMSk7CisKKwkJCQl9IGVsc2lmICgkZW50cnkgIX4gbUAvQCkgeworCQkJCQlwdXNoKEBkZXBfZnVuY3Rpb25zLCAkZW50cnkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwljbG9zZSgkUkVNT1ZFKTsKK30KKworbXkgQHJhd2xpbmVzID0gKCk7CitteSBAbGluZXMgPSAoKTsKK215ICR2bmFtZTsKK2ZvciBteSAkZmlsZW5hbWUgKEBBUkdWKSB7CisJbXkgJEZJTEU7CisJaWYgKCRmaWxlKSB7CisJCW9wZW4oJEZJTEUsICctfCcsICJkaWZmIC11IC9kZXYvbnVsbCAkZmlsZW5hbWUiKSB8fAorCQkJZGllICIkUDogJGZpbGVuYW1lOiBkaWZmIGZhaWxlZCAtICQhXG4iOworCX0gZWxzaWYgKCRmaWxlbmFtZSBlcSAnLScpIHsKKwkJb3BlbigkRklMRSwgJzwmU1RESU4nKTsKKwl9IGVsc2UgeworCQlvcGVuKCRGSUxFLCAnPCcsICIkZmlsZW5hbWUiKSB8fAorCQkJZGllICIkUDogJGZpbGVuYW1lOiBvcGVuIGZhaWxlZCAtICQhXG4iOworCX0KKwlpZiAoJGZpbGVuYW1lIGVxICctJykgeworCQkkdm5hbWUgPSAnWW91ciBwYXRjaCc7CisJfSBlbHNlIHsKKwkJJHZuYW1lID0gJGZpbGVuYW1lOworCX0KKwl3aGlsZSAoPCRGSUxFPikgeworCQljaG9tcDsKKwkJcHVzaChAcmF3bGluZXMsICRfKTsKKwl9CisJY2xvc2UoJEZJTEUpOworCWlmICghcHJvY2VzcygkZmlsZW5hbWUpKSB7CisJCSRleGl0ID0gMTsKKwl9CisJQHJhd2xpbmVzID0gKCk7CisJQGxpbmVzID0gKCk7Cit9CisKK2V4aXQoJGV4aXQpOworCitzdWIgdG9wX29mX2tlcm5lbF90cmVlIHsKKwlteSAoJHJvb3QpID0gQF87CisKKwlteSBAdHJlZV9jaGVjayA9ICgKKwkJIkNPUFlJTkciLCAiQ1JFRElUUyIsICJLYnVpbGQiLCAiTUFJTlRBSU5FUlMiLCAiTWFrZWZpbGUiLAorCQkiUkVBRE1FIiwgIkRvY3VtZW50YXRpb24iLCAiYXJjaCIsICJpbmNsdWRlIiwgImRyaXZlcnMiLAorCQkiZnMiLCAiaW5pdCIsICJpcGMiLCAia2VybmVsIiwgImxpYiIsICJzY3JpcHRzIiwKKwkpOworCisJZm9yZWFjaCBteSAkY2hlY2sgKEB0cmVlX2NoZWNrKSB7CisJCWlmICghIC1lICRyb290IC4gJy8nIC4gJGNoZWNrKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKKyAgICB9CisKK3N1YiBwYXJzZV9lbWFpbCB7CisJbXkgKCRmb3JtYXR0ZWRfZW1haWwpID0gQF87CisKKwlteSAkbmFtZSA9ICIiOworCW15ICRhZGRyZXNzID0gIiI7CisJbXkgJGNvbW1lbnQgPSAiIjsKKworCWlmICgkZm9ybWF0dGVkX2VtYWlsID1+IC9eKC4qKTwoXFMrXEBcUyspPiguKikkLykgeworCQkkbmFtZSA9ICQxOworCQkkYWRkcmVzcyA9ICQyOworCQkkY29tbWVudCA9ICQzIGlmIGRlZmluZWQgJDM7CisJfSBlbHNpZiAoJGZvcm1hdHRlZF9lbWFpbCA9fiAvXlxzKjwoXFMrXEBcUyspPiguKikkLykgeworCQkkYWRkcmVzcyA9ICQxOworCQkkY29tbWVudCA9ICQyIGlmIGRlZmluZWQgJDI7CisJfSBlbHNpZiAoJGZvcm1hdHRlZF9lbWFpbCA9fiAvKFxTK1xAXFMrKSguKikkLykgeworCQkkYWRkcmVzcyA9ICQxOworCQkkY29tbWVudCA9ICQyIGlmIGRlZmluZWQgJDI7CisJCSRmb3JtYXR0ZWRfZW1haWwgPX4gcy8kYWRkcmVzcy4qJC8vOworCQkkbmFtZSA9ICRmb3JtYXR0ZWRfZW1haWw7CisJCSRuYW1lID1+IHMvXlxzK3xccyskLy9nOworCQkkbmFtZSA9fiBzL15cInxcIiQvL2c7CisJCSMgSWYgdGhlcmUncyBhIG5hbWUgbGVmdCBhZnRlciBzdHJpcHBpbmcgc3BhY2VzIGFuZAorCQkjIGxlYWRpbmcgcXVvdGVzLCBhbmQgdGhlIGFkZHJlc3MgZG9lc24ndCBoYXZlIGJvdGgKKwkJIyBsZWFkaW5nIGFuZCB0cmFpbGluZyBhbmdsZSBicmFja2V0cywgdGhlIGFkZHJlc3MKKwkJIyBpcyBpbnZhbGlkLiBpZToKKwkJIyAgICJqb2Ugc21pdGggam9lQHNtaXRoLmNvbSIgYmFkCisJCSMgICAiam9lIHNtaXRoIDxqb2VAc21pdGguY29tIiBiYWQKKwkJaWYgKCRuYW1lIG5lICIiICYmICRhZGRyZXNzICF+IC9ePFtePl0rPiQvKSB7CisJCQkkbmFtZSA9ICIiOworCQkJJGFkZHJlc3MgPSAiIjsKKwkJCSRjb21tZW50ID0gIiI7CisJCX0KKwl9CisKKwkkbmFtZSA9fiBzL15ccyt8XHMrJC8vZzsKKwkkbmFtZSA9fiBzL15cInxcIiQvL2c7CisJJGFkZHJlc3MgPX4gcy9eXHMrfFxzKyQvL2c7CisJJGFkZHJlc3MgPX4gcy9eXDx8XD4kLy9nOworCisJaWYgKCRuYW1lID1+IC9bXlx3IFwtXS9pKSB7ICMjaGFzICJtdXN0IHF1b3RlIiBjaGFycworCQkkbmFtZSA9fiBzLyg/PCFcXCkiL1xcIi9nOyAjI2VzY2FwZSBxdW90ZXMKKwkJJG5hbWUgPSAiXCIkbmFtZVwiIjsKKwl9CisKKwlyZXR1cm4gKCRuYW1lLCAkYWRkcmVzcywgJGNvbW1lbnQpOworfQorCitzdWIgZm9ybWF0X2VtYWlsIHsKKwlteSAoJG5hbWUsICRhZGRyZXNzKSA9IEBfOworCisJbXkgJGZvcm1hdHRlZF9lbWFpbDsKKworCSRuYW1lID1+IHMvXlxzK3xccyskLy9nOworCSRuYW1lID1+IHMvXlwifFwiJC8vZzsKKwkkYWRkcmVzcyA9fiBzL15ccyt8XHMrJC8vZzsKKworCWlmICgkbmFtZSA9fiAvW15cdyBcLV0vaSkgeyAjI2hhcyAibXVzdCBxdW90ZSIgY2hhcnMKKwkJJG5hbWUgPX4gcy8oPzwhXFwpIi9cXCIvZzsgIyNlc2NhcGUgcXVvdGVzCisJCSRuYW1lID0gIlwiJG5hbWVcIiI7CisJfQorCisJaWYgKCIkbmFtZSIgZXEgIiIpIHsKKwkJJGZvcm1hdHRlZF9lbWFpbCA9ICIkYWRkcmVzcyI7CisJfSBlbHNlIHsKKwkJJGZvcm1hdHRlZF9lbWFpbCA9ICIkbmFtZSA8JGFkZHJlc3M+IjsKKwl9CisKKwlyZXR1cm4gJGZvcm1hdHRlZF9lbWFpbDsKK30KKworc3ViIHdoaWNoX2NvbmYgeworCW15ICgkY29uZikgPSBAXzsKKworCWZvcmVhY2ggbXkgJHBhdGggKHNwbGl0KC86LywgIi46JEVOVntIT01FfTouc2NyaXB0cyIpKSB7CisJCWlmICgtZSAiJHBhdGgvJGNvbmYiKSB7CisJCQlyZXR1cm4gIiRwYXRoLyRjb25mIjsKKwkJfQorCX0KKworCXJldHVybiAiIjsKK30KKworc3ViIGV4cGFuZF90YWJzIHsKKwlteSAoJHN0cikgPSBAXzsKKworCW15ICRyZXMgPSAnJzsKKwlteSAkbiA9IDA7CisJZm9yIG15ICRjIChzcGxpdCgvLywgJHN0cikpIHsKKwkJaWYgKCRjIGVxICJcdCIpIHsKKwkJCSRyZXMgLj0gJyAnOworCQkJJG4rKzsKKwkJCWZvciAoOyAoJG4gJSA4KSAhPSAwOyAkbisrKSB7CisJCQkJJHJlcyAuPSAnICc7CisJCQl9CisJCQluZXh0OworCQl9CisJCSRyZXMgLj0gJGM7CisJCSRuKys7CisJfQorCisJcmV0dXJuICRyZXM7Cit9CitzdWIgY29weV9zcGFjaW5nIHsKKwkobXkgJHJlcyA9IHNoaWZ0KSA9fiB0ci9cdC8gL2M7CisJcmV0dXJuICRyZXM7Cit9CisKK3N1YiBsaW5lX3N0YXRzIHsKKwlteSAoJGxpbmUpID0gQF87CisKKwkjIERyb3AgdGhlIGRpZmYgbGluZSBsZWFkZXIgYW5kIGV4cGFuZCB0YWJzCisJJGxpbmUgPX4gcy9eLi8vOworCSRsaW5lID0gZXhwYW5kX3RhYnMoJGxpbmUpOworCisJIyBQaWNrIHRoZSBpbmRlbnQgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGxpbmUuCisJbXkgKCR3aGl0ZSkgPSAoJGxpbmUgPX4gL14oXHMqKS8pOworCisJcmV0dXJuIChsZW5ndGgoJGxpbmUpLCBsZW5ndGgoJHdoaXRlKSk7Cit9CisKK215ICRzYW5pdGlzZV9xdW90ZSA9ICcnOworCitzdWIgc2FuaXRpc2VfbGluZV9yZXNldCB7CisJbXkgKCRpbl9jb21tZW50KSA9IEBfOworCisJaWYgKCRpbl9jb21tZW50KSB7CisJCSRzYW5pdGlzZV9xdW90ZSA9ICcqLyc7CisJfSBlbHNlIHsKKwkJJHNhbml0aXNlX3F1b3RlID0gJyc7CisJfQorfQorc3ViIHNhbml0aXNlX2xpbmUgeworCW15ICgkbGluZSkgPSBAXzsKKworCW15ICRyZXMgPSAnJzsKKwlteSAkbCA9ICcnOworCisJbXkgJHFsZW4gPSAwOworCW15ICRvZmYgPSAwOworCW15ICRjOworCisJIyBBbHdheXMgY29weSBvdmVyIHRoZSBkaWZmIG1hcmtlci4KKwkkcmVzID0gc3Vic3RyKCRsaW5lLCAwLCAxKTsKKworCWZvciAoJG9mZiA9IDE7ICRvZmYgPCBsZW5ndGgoJGxpbmUpOyAkb2ZmKyspIHsKKwkJJGMgPSBzdWJzdHIoJGxpbmUsICRvZmYsIDEpOworCisJCSMgQ29tbWVudHMgd2UgYXJlIHdhY2tpbmcgY29tcGxldGx5IGluY2x1ZGluZyB0aGUgYmVnaW4KKwkJIyBhbmQgZW5kLCBhbGwgdG8gJDsuCisJCWlmICgkc2FuaXRpc2VfcXVvdGUgZXEgJycgJiYgc3Vic3RyKCRsaW5lLCAkb2ZmLCAyKSBlcSAnLyonKSB7CisJCQkkc2FuaXRpc2VfcXVvdGUgPSAnKi8nOworCisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMiwgIiQ7JDsiKTsKKwkJCSRvZmYrKzsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnKi8nICYmIHN1YnN0cigkbGluZSwgJG9mZiwgMikgZXEgJyovJykgeworCQkJJHNhbml0aXNlX3F1b3RlID0gJyc7CisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMiwgIiQ7JDsiKTsKKwkJCSRvZmYrKzsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnJyAmJiBzdWJzdHIoJGxpbmUsICRvZmYsIDIpIGVxICcvLycpIHsKKwkJCSRzYW5pdGlzZV9xdW90ZSA9ICcvLyc7CisKKwkJCXN1YnN0cigkcmVzLCAkb2ZmLCAyLCAkc2FuaXRpc2VfcXVvdGUpOworCQkJJG9mZisrOworCQkJbmV4dDsKKwkJfQorCisJCSMgQSBcIGluIGEgc3RyaW5nIG1lYW5zIGlnbm9yZSB0aGUgbmV4dCBjaGFyYWN0ZXIuCisJCWlmICgoJHNhbml0aXNlX3F1b3RlIGVxICInIiB8fCAkc2FuaXRpc2VfcXVvdGUgZXEgJyInKSAmJgorCQkgICAgJGMgZXEgIlxcIikgeworCQkJc3Vic3RyKCRyZXMsICRvZmYsIDIsICdYWCcpOworCQkJJG9mZisrOworCQkJbmV4dDsKKwkJfQorCQkjIFJlZ3VsYXIgcXVvdGVzLgorCQlpZiAoJGMgZXEgIiciIHx8ICRjIGVxICciJykgeworCQkJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnJykgeworCQkJCSRzYW5pdGlzZV9xdW90ZSA9ICRjOworCisJCQkJc3Vic3RyKCRyZXMsICRvZmYsIDEsICRjKTsKKwkJCQluZXh0OworCQkJfSBlbHNpZiAoJHNhbml0aXNlX3F1b3RlIGVxICRjKSB7CisJCQkJJHNhbml0aXNlX3F1b3RlID0gJyc7CisJCQl9CisJCX0KKworCQkjcHJpbnQgImM8JGM+IFNRPCRzYW5pdGlzZV9xdW90ZT5cbiI7CisJCWlmICgkb2ZmICE9IDAgJiYgJHNhbml0aXNlX3F1b3RlIGVxICcqLycgJiYgJGMgbmUgIlx0IikgeworCQkJc3Vic3RyKCRyZXMsICRvZmYsIDEsICQ7KTsKKwkJfSBlbHNpZiAoJG9mZiAhPSAwICYmICRzYW5pdGlzZV9xdW90ZSBlcSAnLy8nICYmICRjIG5lICJcdCIpIHsKKwkJCXN1YnN0cigkcmVzLCAkb2ZmLCAxLCAkOyk7CisJCX0gZWxzaWYgKCRvZmYgIT0gMCAmJiAkc2FuaXRpc2VfcXVvdGUgJiYgJGMgbmUgIlx0IikgeworCQkJc3Vic3RyKCRyZXMsICRvZmYsIDEsICdYJyk7CisJCX0gZWxzZSB7CisJCQlzdWJzdHIoJHJlcywgJG9mZiwgMSwgJGMpOworCQl9CisJfQorCisJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnLy8nKSB7CisJCSRzYW5pdGlzZV9xdW90ZSA9ICcnOworCX0KKworCSMgVGhlIHBhdGhuYW1lIG9uIGEgI2luY2x1ZGUgbWF5IGJlIHN1cnJvdW5kZWQgYnkgJzwnIGFuZCAnPicuCisJaWYgKCRyZXMgPX4gL14uXHMqXCNccyppbmNsdWRlXHMrXDwoLiopXD4vKSB7CisJCW15ICRjbGVhbiA9ICdYJyB4IGxlbmd0aCgkMSk7CisJCSRyZXMgPX4gc0BcPC4qXD5APCRjbGVhbj5AOworCisJIyBUaGUgd2hvbGUgb2YgYSAjZXJyb3IgaXMgYSBzdHJpbmcuCisJfSBlbHNpZiAoJHJlcyA9fiAvXi5ccypcI1xzKig/OmVycm9yfHdhcm5pbmcpXHMrKC4qKVxiLykgeworCQlteSAkY2xlYW4gPSAnWCcgeCBsZW5ndGgoJDEpOworCQkkcmVzID1+IHNAKFwjXHMqKD86ZXJyb3J8d2FybmluZylccyspLipAJDEkY2xlYW5AOworCX0KKworCXJldHVybiAkcmVzOworfQorCitzdWIgY3R4X3N0YXRlbWVudF9ibG9jayB7CisJbXkgKCRsaW5lbnIsICRyZW1haW4sICRvZmYpID0gQF87CisJbXkgJGxpbmUgPSAkbGluZW5yIC0gMTsKKwlteSAkYmxrID0gJyc7CisJbXkgJHNvZmYgPSAkb2ZmOworCW15ICRjb2ZmID0gJG9mZiAtIDE7CisJbXkgJGNvZmZfc2V0ID0gMDsKKworCW15ICRsb2ZmID0gMDsKKworCW15ICR0eXBlID0gJyc7CisJbXkgJGxldmVsID0gMDsKKwlteSBAc3RhY2sgPSAoKTsKKwlteSAkcDsKKwlteSAkYzsKKwlteSAkbGVuID0gMDsKKworCW15ICRyZW1haW5kZXI7CisJd2hpbGUgKDEpIHsKKwkJQHN0YWNrID0gKFsnJywgMF0pIGlmICgkI3N0YWNrID09IC0xKTsKKworCQkjd2FybiAiQ1NCOiBibGs8JGJsaz4gcmVtYWluPCRyZW1haW4+XG4iOworCQkjIElmIHdlIGFyZSBhYm91dCB0byBkcm9wIG9mZiB0aGUgZW5kLCBwdWxsIGluIG1vcmUKKwkJIyBjb250ZXh0LgorCQlpZiAoJG9mZiA+PSAkbGVuKSB7CisJCQlmb3IgKDsgJHJlbWFpbiA+IDA7ICRsaW5lKyspIHsKKwkJCQlsYXN0IGlmICghZGVmaW5lZCAkbGluZXNbJGxpbmVdKTsKKwkJCQluZXh0IGlmICgkbGluZXNbJGxpbmVdID1+IC9eLS8pOworCQkJCSRyZW1haW4tLTsKKwkJCQkkbG9mZiA9ICRsZW47CisJCQkJJGJsayAuPSAkbGluZXNbJGxpbmVdIC4gIlxuIjsKKwkJCQkkbGVuID0gbGVuZ3RoKCRibGspOworCQkJCSRsaW5lKys7CisJCQkJbGFzdDsKKwkJCX0KKwkJCSMgQmFpbCBpZiB0aGVyZSBpcyBubyBmdXJ0aGVyIGNvbnRleHQuCisJCQkjd2FybiAiQ1NCOiBibGs8JGJsaz4gb2ZmPCRvZmY+IGxlbjwkbGVuPlxuIjsKKwkJCWlmICgkb2ZmID49ICRsZW4pIHsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCSRwID0gJGM7CisJCSRjID0gc3Vic3RyKCRibGssICRvZmYsIDEpOworCQkkcmVtYWluZGVyID0gc3Vic3RyKCRibGssICRvZmYpOworCisJCSN3YXJuICJDU0I6IGM8JGM+IHR5cGU8JHR5cGU+IGxldmVsPCRsZXZlbD4gcmVtYWluZGVyPCRyZW1haW5kZXI+IGNvZmZfc2V0PCRjb2ZmX3NldD5cbiI7CisKKwkJIyBIYW5kbGUgbmVzdGVkICNpZi8jZWxzZS4KKwkJaWYgKCRyZW1haW5kZXIgPX4gL14jXHMqKD86aWZuZGVmfGlmZGVmfGlmKVxzLykgeworCQkJcHVzaChAc3RhY2ssIFsgJHR5cGUsICRsZXZlbCBdKTsKKwkJfSBlbHNpZiAoJHJlbWFpbmRlciA9fiAvXiNccyooPzplbHNlfGVsaWYpXGIvKSB7CisJCQkoJHR5cGUsICRsZXZlbCkgPSBAeyRzdGFja1skI3N0YWNrIC0gMV19OworCQl9IGVsc2lmICgkcmVtYWluZGVyID1+IC9eI1xzKmVuZGlmXGIvKSB7CisJCQkoJHR5cGUsICRsZXZlbCkgPSBAe3BvcChAc3RhY2spfTsKKwkJfQorCisJCSMgU3RhdGVtZW50IGVuZHMgYXQgdGhlICc7JyBvciBhIGNsb3NlICd9JyBhdCB0aGUKKwkJIyBvdXRlcm1vc3QgbGV2ZWwuCisJCWlmICgkbGV2ZWwgPT0gMCAmJiAkYyBlcSAnOycpIHsKKwkJCWxhc3Q7CisJCX0KKworCQkjIEFuIGVsc2UgaXMgcmVhbGx5IGEgY29uZGl0aW9uYWwgYXMgbG9uZyBhcyBpdHMgbm90IGVsc2UgaWYKKwkJaWYgKCRsZXZlbCA9PSAwICYmICRjb2ZmX3NldCA9PSAwICYmCisJCQkJKCFkZWZpbmVkKCRwKSB8fCAkcCA9fiAvKD86XHN8XH18XCspLykgJiYKKwkJCQkkcmVtYWluZGVyID1+IC9eKGVsc2UpKD86XHN8eykvICYmCisJCQkJJHJlbWFpbmRlciAhfiAvXmVsc2VccytpZlxiLykgeworCQkJJGNvZmYgPSAkb2ZmICsgbGVuZ3RoKCQxKSAtIDE7CisJCQkkY29mZl9zZXQgPSAxOworCQkJI3dhcm4gIkNTQjogbWFyayBjb2ZmPCRjb2ZmPiBzb2ZmPCRzb2ZmPiAxPCQxPlxuIjsKKwkJCSN3YXJuICJbIiAuIHN1YnN0cigkYmxrLCAkc29mZiwgJGNvZmYgLSAkc29mZiArIDEpIC4gIl1cbiI7CisJCX0KKworCQlpZiAoKCR0eXBlIGVxICcnIHx8ICR0eXBlIGVxICcoJykgJiYgJGMgZXEgJygnKSB7CisJCQkkbGV2ZWwrKzsKKwkJCSR0eXBlID0gJygnOworCQl9CisJCWlmICgkdHlwZSBlcSAnKCcgJiYgJGMgZXEgJyknKSB7CisJCQkkbGV2ZWwtLTsKKwkJCSR0eXBlID0gKCRsZXZlbCAhPSAwKT8gJygnIDogJyc7CisKKwkJCWlmICgkbGV2ZWwgPT0gMCAmJiAkY29mZiA8ICRzb2ZmKSB7CisJCQkJJGNvZmYgPSAkb2ZmOworCQkJCSRjb2ZmX3NldCA9IDE7CisJCQkJI3dhcm4gIkNTQjogbWFyayBjb2ZmPCRjb2ZmPlxuIjsKKwkJCX0KKwkJfQorCQlpZiAoKCR0eXBlIGVxICcnIHx8ICR0eXBlIGVxICd7JykgJiYgJGMgZXEgJ3snKSB7CisJCQkkbGV2ZWwrKzsKKwkJCSR0eXBlID0gJ3snOworCQl9CisJCWlmICgkdHlwZSBlcSAneycgJiYgJGMgZXEgJ30nKSB7CisJCQkkbGV2ZWwtLTsKKwkJCSR0eXBlID0gKCRsZXZlbCAhPSAwKT8gJ3snIDogJyc7CisKKwkJCWlmICgkbGV2ZWwgPT0gMCkgeworCQkJCWlmIChzdWJzdHIoJGJsaywgJG9mZiArIDEsIDEpIGVxICc7JykgeworCQkJCQkkb2ZmKys7CisJCQkJfQorCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJJG9mZisrOworCX0KKwkjIFdlIGFyZSB0cnVseSBhdCB0aGUgZW5kLCBzbyBzaHVmZmxlIHRvIHRoZSBuZXh0IGxpbmUuCisJaWYgKCRvZmYgPT0gJGxlbikgeworCQkkbG9mZiA9ICRsZW4gKyAxOworCQkkbGluZSsrOworCQkkcmVtYWluLS07CisJfQorCisJbXkgJHN0YXRlbWVudCA9IHN1YnN0cigkYmxrLCAkc29mZiwgJG9mZiAtICRzb2ZmICsgMSk7CisJbXkgJGNvbmRpdGlvbiA9IHN1YnN0cigkYmxrLCAkc29mZiwgJGNvZmYgLSAkc29mZiArIDEpOworCisJI3dhcm4gIlNUQVRFTUVOVDwkc3RhdGVtZW50PlxuIjsKKwkjd2FybiAiQ09ORElUSU9OPCRjb25kaXRpb24+XG4iOworCisJI3ByaW50ICJjb2ZmPCRjb2ZmPiBzb2ZmPCRvZmY+IGxvZmY8JGxvZmY+XG4iOworCisJcmV0dXJuICgkc3RhdGVtZW50LCAkY29uZGl0aW9uLAorCQkJJGxpbmUsICRyZW1haW4gKyAxLCAkb2ZmIC0gJGxvZmYgKyAxLCAkbGV2ZWwpOworfQorCitzdWIgc3RhdGVtZW50X2xpbmVzIHsKKwlteSAoJHN0bXQpID0gQF87CisKKwkjIFN0cmlwIHRoZSBkaWZmIGxpbmUgcHJlZml4ZXMgYW5kIHJpcCBibGFuayBsaW5lcyBhdCBzdGFydCBhbmQgZW5kLgorCSRzdG10ID1+IHMvKF58XG4pLi8kMS9nOworCSRzdG10ID1+IHMvXlxzKi8vOworCSRzdG10ID1+IHMvXHMqJC8vOworCisJbXkgQHN0bXRfbGluZXMgPSAoJHN0bXQgPX4gL1xuL2cpOworCisJcmV0dXJuICQjc3RtdF9saW5lcyArIDI7Cit9CisKK3N1YiBzdGF0ZW1lbnRfcmF3bGluZXMgeworCW15ICgkc3RtdCkgPSBAXzsKKworCW15IEBzdG10X2xpbmVzID0gKCRzdG10ID1+IC9cbi9nKTsKKworCXJldHVybiAkI3N0bXRfbGluZXMgKyAyOworfQorCitzdWIgc3RhdGVtZW50X2Jsb2NrX3NpemUgeworCW15ICgkc3RtdCkgPSBAXzsKKworCSRzdG10ID1+IHMvKF58XG4pLi8kMS9nOworCSRzdG10ID1+IHMvXlxzKnsvLzsKKwkkc3RtdCA9fiBzL31ccyokLy87CisJJHN0bXQgPX4gcy9eXHMqLy87CisJJHN0bXQgPX4gcy9ccyokLy87CisKKwlteSBAc3RtdF9saW5lcyA9ICgkc3RtdCA9fiAvXG4vZyk7CisJbXkgQHN0bXRfc3RhdGVtZW50cyA9ICgkc3RtdCA9fiAvOy9nKTsKKworCW15ICRzdG10X2xpbmVzID0gJCNzdG10X2xpbmVzICsgMjsKKwlteSAkc3RtdF9zdGF0ZW1lbnRzID0gJCNzdG10X3N0YXRlbWVudHMgKyAxOworCisJaWYgKCRzdG10X2xpbmVzID4gJHN0bXRfc3RhdGVtZW50cykgeworCQlyZXR1cm4gJHN0bXRfbGluZXM7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRzdG10X3N0YXRlbWVudHM7CisJfQorfQorCitzdWIgY3R4X3N0YXRlbWVudF9mdWxsIHsKKwlteSAoJGxpbmVuciwgJHJlbWFpbiwgJG9mZikgPSBAXzsKKwlteSAoJHN0YXRlbWVudCwgJGNvbmRpdGlvbiwgJGxldmVsKTsKKworCW15IChAY2h1bmtzKTsKKworCSMgR3JhYiB0aGUgZmlyc3QgY29uZGl0aW9uYWwvYmxvY2sgcGFpci4KKwkoJHN0YXRlbWVudCwgJGNvbmRpdGlvbiwgJGxpbmVuciwgJHJlbWFpbiwgJG9mZiwgJGxldmVsKSA9CisJCQkJY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkcmVtYWluLCAkb2ZmKTsKKwkjcHJpbnQgIkY6IGM8JGNvbmRpdGlvbj4gczwkc3RhdGVtZW50PiByZW1haW48JHJlbWFpbj5cbiI7CisJcHVzaChAY2h1bmtzLCBbICRjb25kaXRpb24sICRzdGF0ZW1lbnQgXSk7CisJaWYgKCEoJHJlbWFpbiA+IDAgJiYgJGNvbmRpdGlvbiA9fiAvXlxzKig/OlxuWystXSk/XHMqKD86aWZ8ZWxzZXxkbylcYi9zKSkgeworCQlyZXR1cm4gKCRsZXZlbCwgJGxpbmVuciwgQGNodW5rcyk7CisJfQorCisJIyBQdWxsIGluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uYWwvYmxvY2sgcGFpcnMgYW5kIHNlZSBpZiB0aGV5CisJIyBjb3VsZCBjb250aW51ZSB0aGUgc3RhdGVtZW50LgorCWZvciAoOzspIHsKKwkJKCRzdGF0ZW1lbnQsICRjb25kaXRpb24sICRsaW5lbnIsICRyZW1haW4sICRvZmYsICRsZXZlbCkgPQorCQkJCWN0eF9zdGF0ZW1lbnRfYmxvY2soJGxpbmVuciwgJHJlbWFpbiwgJG9mZik7CisJCSNwcmludCAiQzogYzwkY29uZGl0aW9uPiBzPCRzdGF0ZW1lbnQ+IHJlbWFpbjwkcmVtYWluPlxuIjsKKwkJbGFzdCBpZiAoISgkcmVtYWluID4gMCAmJiAkY29uZGl0aW9uID1+IC9eKD86XHMqXG5bKy1dKSpccyooPzplbHNlfGRvKVxiL3MpKTsKKwkJI3ByaW50ICJDOiBwdXNoXG4iOworCQlwdXNoKEBjaHVua3MsIFsgJGNvbmRpdGlvbiwgJHN0YXRlbWVudCBdKTsKKwl9CisKKwlyZXR1cm4gKCRsZXZlbCwgJGxpbmVuciwgQGNodW5rcyk7Cit9CisKK3N1YiBjdHhfYmxvY2tfZ2V0IHsKKwlteSAoJGxpbmVuciwgJHJlbWFpbiwgJG91dGVyLCAkb3BlbiwgJGNsb3NlLCAkb2ZmKSA9IEBfOworCW15ICRsaW5lOworCW15ICRzdGFydCA9ICRsaW5lbnIgLSAxOworCW15ICRibGsgPSAnJzsKKwlteSBAbzsKKwlteSBAYzsKKwlteSBAcmVzID0gKCk7CisKKwlteSAkbGV2ZWwgPSAwOworCW15IEBzdGFjayA9ICgkbGV2ZWwpOworCWZvciAoJGxpbmUgPSAkc3RhcnQ7ICRyZW1haW4gPiAwOyAkbGluZSsrKSB7CisJCW5leHQgaWYgKCRyYXdsaW5lc1skbGluZV0gPX4gL14tLyk7CisJCSRyZW1haW4tLTsKKworCQkkYmxrIC49ICRyYXdsaW5lc1skbGluZV07CisKKwkJIyBIYW5kbGUgbmVzdGVkICNpZi8jZWxzZS4KKwkJaWYgKCRsaW5lc1skbGluZV0gPX4gL14uXHMqI1xzKig/OmlmbmRlZnxpZmRlZnxpZilccy8pIHsKKwkJCXB1c2goQHN0YWNrLCAkbGV2ZWwpOworCQl9IGVsc2lmICgkbGluZXNbJGxpbmVdID1+IC9eLlxzKiNccyooPzplbHNlfGVsaWYpXGIvKSB7CisJCQkkbGV2ZWwgPSAkc3RhY2tbJCNzdGFjayAtIDFdOworCQl9IGVsc2lmICgkbGluZXNbJGxpbmVdID1+IC9eLlxzKiNccyplbmRpZlxiLykgeworCQkJJGxldmVsID0gcG9wKEBzdGFjayk7CisJCX0KKworCQlmb3JlYWNoIG15ICRjIChzcGxpdCgvLywgJGxpbmVzWyRsaW5lXSkpIHsKKwkJCSMjcHJpbnQgIkM8JGM+TDwkbGV2ZWw+PCRvcGVuJGNsb3NlPk88JG9mZj5cbiI7CisJCQlpZiAoJG9mZiA+IDApIHsKKwkJCQkkb2ZmLS07CisJCQkJbmV4dDsKKwkJCX0KKworCQkJaWYgKCRjIGVxICRjbG9zZSAmJiAkbGV2ZWwgPiAwKSB7CisJCQkJJGxldmVsLS07CisJCQkJbGFzdCBpZiAoJGxldmVsID09IDApOworCQkJfSBlbHNpZiAoJGMgZXEgJG9wZW4pIHsKKwkJCQkkbGV2ZWwrKzsKKwkJCX0KKwkJfQorCisJCWlmICghJG91dGVyIHx8ICRsZXZlbCA8PSAxKSB7CisJCQlwdXNoKEByZXMsICRyYXdsaW5lc1skbGluZV0pOworCQl9CisKKwkJbGFzdCBpZiAoJGxldmVsID09IDApOworCX0KKworCXJldHVybiAoJGxldmVsLCBAcmVzKTsKK30KK3N1YiBjdHhfYmxvY2tfb3V0ZXIgeworCW15ICgkbGluZW5yLCAkcmVtYWluKSA9IEBfOworCisJbXkgKCRsZXZlbCwgQHIpID0gY3R4X2Jsb2NrX2dldCgkbGluZW5yLCAkcmVtYWluLCAxLCAneycsICd9JywgMCk7CisJcmV0dXJuIEByOworfQorc3ViIGN0eF9ibG9jayB7CisJbXkgKCRsaW5lbnIsICRyZW1haW4pID0gQF87CisKKwlteSAoJGxldmVsLCBAcikgPSBjdHhfYmxvY2tfZ2V0KCRsaW5lbnIsICRyZW1haW4sIDAsICd7JywgJ30nLCAwKTsKKwlyZXR1cm4gQHI7Cit9CitzdWIgY3R4X3N0YXRlbWVudCB7CisJbXkgKCRsaW5lbnIsICRyZW1haW4sICRvZmYpID0gQF87CisKKwlteSAoJGxldmVsLCBAcikgPSBjdHhfYmxvY2tfZ2V0KCRsaW5lbnIsICRyZW1haW4sIDAsICcoJywgJyknLCAkb2ZmKTsKKwlyZXR1cm4gQHI7Cit9CitzdWIgY3R4X2Jsb2NrX2xldmVsIHsKKwlteSAoJGxpbmVuciwgJHJlbWFpbikgPSBAXzsKKworCXJldHVybiBjdHhfYmxvY2tfZ2V0KCRsaW5lbnIsICRyZW1haW4sIDAsICd7JywgJ30nLCAwKTsKK30KK3N1YiBjdHhfc3RhdGVtZW50X2xldmVsIHsKKwlteSAoJGxpbmVuciwgJHJlbWFpbiwgJG9mZikgPSBAXzsKKworCXJldHVybiBjdHhfYmxvY2tfZ2V0KCRsaW5lbnIsICRyZW1haW4sIDAsICcoJywgJyknLCAkb2ZmKTsKK30KKworc3ViIGN0eF9sb2NhdGVfY29tbWVudCB7CisJbXkgKCRmaXJzdF9saW5lLCAkZW5kX2xpbmUpID0gQF87CisKKwkjIENhdGNoIGEgY29tbWVudCBvbiB0aGUgZW5kIG9mIHRoZSBsaW5lIGl0c2VsZi4KKwlteSAoJGN1cnJlbnRfY29tbWVudCkgPSAoJHJhd2xpbmVzWyRlbmRfbGluZSAtIDFdID1+IG1ALiooL1wqLipcKi8pXHMqKD86XFxccyopPyRAKTsKKwlyZXR1cm4gJGN1cnJlbnRfY29tbWVudCBpZiAoZGVmaW5lZCAkY3VycmVudF9jb21tZW50KTsKKworCSMgTG9vayB0aHJvdWdoIHRoZSBjb250ZXh0IGFuZCB0cnkgYW5kIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYQorCSMgY29tbWVudC4KKwlteSAkaW5fY29tbWVudCA9IDA7CisJJGN1cnJlbnRfY29tbWVudCA9ICcnOworCWZvciAobXkgJGxpbmVuciA9ICRmaXJzdF9saW5lOyAkbGluZW5yIDwgJGVuZF9saW5lOyAkbGluZW5yKyspIHsKKwkJbXkgJGxpbmUgPSAkcmF3bGluZXNbJGxpbmVuciAtIDFdOworCQkjd2FybiAiICAgICAgICAgICAkbGluZVxuIjsKKwkJaWYgKCRsaW5lbnIgPT0gJGZpcnN0X2xpbmUgYW5kICRsaW5lID1+IG1AXi5ccypcKkApIHsKKwkJCSRpbl9jb21tZW50ID0gMTsKKwkJfQorCQlpZiAoJGxpbmUgPX4gbUAvXCpAKSB7CisJCQkkaW5fY29tbWVudCA9IDE7CisJCX0KKwkJaWYgKCEkaW5fY29tbWVudCAmJiAkY3VycmVudF9jb21tZW50IG5lICcnKSB7CisJCQkkY3VycmVudF9jb21tZW50ID0gJyc7CisJCX0KKwkJJGN1cnJlbnRfY29tbWVudCAuPSAkbGluZSAuICJcbiIgaWYgKCRpbl9jb21tZW50KTsKKwkJaWYgKCRsaW5lID1+IG1AXCovQCkgeworCQkJJGluX2NvbW1lbnQgPSAwOworCQl9CisJfQorCisJY2hvbXAoJGN1cnJlbnRfY29tbWVudCk7CisJcmV0dXJuKCRjdXJyZW50X2NvbW1lbnQpOworfQorc3ViIGN0eF9oYXNfY29tbWVudCB7CisJbXkgKCRmaXJzdF9saW5lLCAkZW5kX2xpbmUpID0gQF87CisJbXkgJGNtdCA9IGN0eF9sb2NhdGVfY29tbWVudCgkZmlyc3RfbGluZSwgJGVuZF9saW5lKTsKKworCSMjcHJpbnQgIkxJTkU6ICRyYXdsaW5lc1skZW5kX2xpbmUgLSAxIF1cbiI7CisJIyNwcmludCAiQ01NVDogJGNtdFxuIjsKKworCXJldHVybiAoJGNtdCBuZSAnJyk7Cit9CisKK3N1YiByYXdfbGluZSB7CisJbXkgKCRsaW5lbnIsICRjbnQpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gJGxpbmVuciAtIDE7CisJJGNudCsrOworCisJbXkgJGxpbmU7CisJd2hpbGUgKCRjbnQpIHsKKwkJJGxpbmUgPSAkcmF3bGluZXNbJG9mZnNldCsrXTsKKwkJbmV4dCBpZiAoZGVmaW5lZCgkbGluZSkgJiYgJGxpbmUgPX4gL14tLyk7CisJCSRjbnQtLTsKKwl9CisKKwlyZXR1cm4gJGxpbmU7Cit9CisKK3N1YiBjYXRfdmV0IHsKKwlteSAoJHZldCkgPSBAXzsKKwlteSAoJHJlcywgJGNvZGVkKTsKKworCSRyZXMgPSAnJzsKKwl3aGlsZSAoJHZldCA9fiAvKFteWzpjbnRybDpdXSopKFtbOmNudHJsOl1dfCQpL2cpIHsKKwkJJHJlcyAuPSAkMTsKKwkJaWYgKCQyIG5lICcnKSB7CisJCQkkY29kZWQgPSBzcHJpbnRmKCJeJWMiLCB1bnBhY2soJ0MnLCAkMikgKyA2NCk7CisJCQkkcmVzIC49ICRjb2RlZDsKKwkJfQorCX0KKwkkcmVzID1+IHMvJC9cJC87CisKKwlyZXR1cm4gJHJlczsKK30KKworbXkgJGF2X3ByZXByb2Nlc3NvciA9IDA7CitteSAkYXZfcGVuZGluZzsKK215IEBhdl9wYXJlbl90eXBlOworbXkgJGF2X3BlbmRfY29sb247CisKK3N1YiBhbm5vdGF0ZV9yZXNldCB7CisJJGF2X3ByZXByb2Nlc3NvciA9IDA7CisJJGF2X3BlbmRpbmcgPSAnXyc7CisJQGF2X3BhcmVuX3R5cGUgPSAoJ0UnKTsKKwkkYXZfcGVuZF9jb2xvbiA9ICdPJzsKK30KKworc3ViIGFubm90YXRlX3ZhbHVlcyB7CisJbXkgKCRzdHJlYW0sICR0eXBlKSA9IEBfOworCisJbXkgJHJlczsKKwlteSAkdmFyID0gJ18nIHggbGVuZ3RoKCRzdHJlYW0pOworCW15ICRjdXIgPSAkc3RyZWFtOworCisJcHJpbnQgIiRzdHJlYW1cbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisKKwl3aGlsZSAobGVuZ3RoKCRjdXIpKSB7CisJCUBhdl9wYXJlbl90eXBlID0gKCdFJykgaWYgKCQjYXZfcGFyZW5fdHlwZSA8IDApOworCQlwcmludCAiIDwiIC4gam9pbignJywgQGF2X3BhcmVuX3R5cGUpIC4KKwkJCQkiPiA8JHR5cGU+IDwkYXZfcGVuZGluZz4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQlpZiAoJGN1ciA9fiAvXihccyspL28pIHsKKwkJCXByaW50ICJXUygkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQlpZiAoJDEgPX4gL1xuLyAmJiAkYXZfcHJlcHJvY2Vzc29yKSB7CisJCQkJJHR5cGUgPSBwb3AoQGF2X3BhcmVuX3R5cGUpOworCQkJCSRhdl9wcmVwcm9jZXNzb3IgPSAwOworCQkJfQorCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXChccyokVHlwZVxzKilcKS8gJiYgJGF2X3BlbmRpbmcgZXEgJ18nKSB7CisJCQlwcmludCAiQ0FTVCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQlwdXNoKEBhdl9wYXJlbl90eXBlLCAkdHlwZSk7CisJCQkkdHlwZSA9ICdDJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKCRUeXBlKVxzKig/OiRJZGVudHwsfFwpfFwofFxzKiQpLykgeworCQkJcHJpbnQgIkRFQ0xBUkUoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnVCc7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkTW9kaWZpZXIpXHMqLykgeworCQkJcHJpbnQgIk1PRElGSUVSKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ1QnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXCNccypkZWZpbmVccyokSWRlbnQpKFwoPykvbykgeworCQkJcHJpbnQgIkRFRklORSgkMSwkMilcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKwkJCXB1c2goQGF2X3BhcmVuX3R5cGUsICR0eXBlKTsKKwkJCWlmICgkMiBuZSAnJykgeworCQkJCSRhdl9wZW5kaW5nID0gJ04nOworCQkJfQorCQkJJHR5cGUgPSAnRSc7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcI1xzKig/OnVuZGVmXHMqJElkZW50fGluY2x1ZGVcYikpL28pIHsKKwkJCXByaW50ICJVTkRFRigkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKwkJCXB1c2goQGF2X3BhcmVuX3R5cGUsICR0eXBlKTsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKFwjXHMqKD86aWZkZWZ8aWZuZGVmfGlmKSkvbykgeworCQkJcHJpbnQgIlBSRV9TVEFSVCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJHR5cGUpOworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJHR5cGUpOworCQkJJHR5cGUgPSAnRSc7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcI1xzKig/OmVsc2V8ZWxpZikpL28pIHsKKwkJCXByaW50ICJQUkVfUkVTVEFSVCgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CisJCQkkYXZfcHJlcHJvY2Vzc29yID0gMTsKKworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJGF2X3BhcmVuX3R5cGVbJCNhdl9wYXJlbl90eXBlXSk7CisKKwkJCSR0eXBlID0gJ0UnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXCNccyooPzplbmRpZikpL28pIHsKKwkJCXByaW50ICJQUkVfRU5EKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKworCQkJJGF2X3ByZXByb2Nlc3NvciA9IDE7CisKKwkJCSMgQXNzdW1lIGFsbCBhcm1zIG9mIHRoZSBjb25kaXRpb25hbCBlbmQgYXMgdGhpcworCQkJIyBvbmUgZG9lcywgYW5kIGNvbnRpbnVlIGFzIGlmIHRoZSAjZW5kaWYgd2FzIG5vdCBoZXJlLgorCQkJcG9wKEBhdl9wYXJlbl90eXBlKTsKKwkJCXB1c2goQGF2X3BhcmVuX3R5cGUsICR0eXBlKTsKKwkJCSR0eXBlID0gJ0UnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXFxcbikvbykgeworCQkJcHJpbnQgIlBSRUNPTlQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oX19hdHRyaWJ1dGVfXylccypcKD8vbykgeworCQkJcHJpbnQgIkFUVFIoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJGF2X3BlbmRpbmcgPSAkdHlwZTsKKwkJCSR0eXBlID0gJ04nOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oc2l6ZW9mKVxzKihcKCk/L28pIHsKKwkJCXByaW50ICJTSVpFT0YoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJaWYgKGRlZmluZWQgJDIpIHsKKwkJCQkkYXZfcGVuZGluZyA9ICdWJzsKKwkJCX0KKwkJCSR0eXBlID0gJ04nOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oaWZ8d2hpbGV8Zm9yKVxiL28pIHsKKwkJCXByaW50ICJDT05EKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSRhdl9wZW5kaW5nID0gJ0UnOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fi9eKGNhc2UpL28pIHsKKwkJCXByaW50ICJDQVNFKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSRhdl9wZW5kX2NvbG9uID0gJ0MnOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fi9eKHJldHVybnxlbHNlfGdvdG98dHlwZW9mfF9fdHlwZW9mX18pXGIvbykgeworCQkJcHJpbnQgIktFWVdPUkQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcKCkvbykgeworCQkJcHJpbnQgIlBBUkVOKCckMScpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJcHVzaChAYXZfcGFyZW5fdHlwZSwgJGF2X3BlbmRpbmcpOworCQkJJGF2X3BlbmRpbmcgPSAnXyc7CisJCQkkdHlwZSA9ICdOJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKFwpKS9vKSB7CisJCQlteSAkbmV3X3R5cGUgPSBwb3AoQGF2X3BhcmVuX3R5cGUpOworCQkJaWYgKCRuZXdfdHlwZSBuZSAnXycpIHsKKwkJCQkkdHlwZSA9ICRuZXdfdHlwZTsKKwkJCQlwcmludCAiUEFSRU4oJyQxJykgLT4gJHR5cGVcbiIKKwkJCQkJCQlpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgIlBBUkVOKCckMScpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJfQorCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oJElkZW50KVxzKlwoL28pIHsKKwkJCXByaW50ICJGVU5DKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ1YnOworCQkJJGF2X3BlbmRpbmcgPSAnVic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkSWRlbnRccyopOig/OlxzKlxkK1xzKigsfD18OykpPy8pIHsKKwkJCWlmIChkZWZpbmVkICQyICYmICR0eXBlIGVxICdDJyB8fCAkdHlwZSBlcSAnVCcpIHsKKwkJCQkkYXZfcGVuZF9jb2xvbiA9ICdCJzsKKwkJCX0gZWxzaWYgKCR0eXBlIGVxICdFJykgeworCQkJCSRhdl9wZW5kX2NvbG9uID0gJ0wnOworCQkJfQorCQkJcHJpbnQgIklERU5UX0NPTE9OKCQxLCR0eXBlPiRhdl9wZW5kX2NvbG9uKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ1YnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oJElkZW50fCRDb25zdGFudCkvbykgeworCQkJcHJpbnQgIklERU5UKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ1YnOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oJEFzc2lnbm1lbnQpL28pIHsKKwkJCXByaW50ICJBU1NJR04oJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fi9eKDt8e3x9KS8pIHsKKwkJCXByaW50ICJFTkQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnRSc7CisJCQkkYXZfcGVuZF9jb2xvbiA9ICdPJzsKKworCQl9IGVsc2lmICgkY3VyID1+L14oLCkvKSB7CisJCQlwcmludCAiQ09NTUEoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnQyc7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcPykvbykgeworCQkJcHJpbnQgIlFVRVNUSU9OKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKwkJCSR0eXBlID0gJ04nOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oOikvbykgeworCQkJcHJpbnQgIkNPTE9OKCQxLCRhdl9wZW5kX2NvbG9uKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKKworCQkJc3Vic3RyKCR2YXIsIGxlbmd0aCgkcmVzKSwgMSwgJGF2X3BlbmRfY29sb24pOworCQkJaWYgKCRhdl9wZW5kX2NvbG9uIGVxICdDJyB8fCAkYXZfcGVuZF9jb2xvbiBlcSAnTCcpIHsKKwkJCQkkdHlwZSA9ICdFJzsKKwkJCX0gZWxzZSB7CisJCQkJJHR5cGUgPSAnTic7CisJCQl9CisJCQkkYXZfcGVuZF9jb2xvbiA9ICdPJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKFxbKS9vKSB7CisJCQlwcmludCAiQ0xPU0UoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigtKD8hWy0+XSl8XCsoPyFcKyl8XCp8XCZcJnxcJikvbykgeworCQkJbXkgJHZhcmlhbnQ7CisKKwkJCXByaW50ICJPUFYoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJaWYgKCR0eXBlIGVxICdWJykgeworCQkJCSR2YXJpYW50ID0gJ0InOworCQkJfSBlbHNlIHsKKwkJCQkkdmFyaWFudCA9ICdVJzsKKwkJCX0KKworCQkJc3Vic3RyKCR2YXIsIGxlbmd0aCgkcmVzKSwgMSwgJHZhcmlhbnQpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkT3BlcmF0b3JzKS9vKSB7CisJCQlwcmludCAiT1AoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQkJaWYgKCQxIG5lICcrKycgJiYgJDEgbmUgJy0tJykgeworCQkJCSR0eXBlID0gJ04nOworCQkJfQorCisJCX0gZWxzaWYgKCRjdXIgPX4gLyheLikvbykgeworCQkJcHJpbnQgIkMoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOworCQl9CisJCWlmIChkZWZpbmVkICQxKSB7CisJCQkkY3VyID0gc3Vic3RyKCRjdXIsIGxlbmd0aCgkMSkpOworCQkJJHJlcyAuPSAkdHlwZSB4IGxlbmd0aCgkMSk7CisJCX0KKwl9CisKKwlyZXR1cm4gKCRyZXMsICR2YXIpOworfQorCitzdWIgcG9zc2libGUgeworCW15ICgkcG9zc2libGUsICRsaW5lKSA9IEBfOworCW15ICRub3RQZXJtaXR0ZWQgPSBxcnsoPzoKKwkJXig/OgorCQkJJE1vZGlmaWVyfAorCQkJJFN0b3JhZ2V8CisJCQkkVHlwZXwKKwkJCURFRklORV9cUysKKwkJKSR8CisJCV4oPzoKKwkJCWdvdG98CisJCQlyZXR1cm58CisJCQljYXNlfAorCQkJZWxzZXwKKwkJCWFzbXxfX2FzbV9ffAorCQkJZG8KKwkJKSg/OlxzfCQpfAorCQleKD86dHlwZWRlZnxzdHJ1Y3R8ZW51bSlcYgorCSAgICApfXg7CisJd2FybiAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMik7CisJaWYgKCRwb3NzaWJsZSAhfiAkbm90UGVybWl0dGVkKSB7CisJCSMgQ2hlY2sgZm9yIG1vZGlmaWVycy4KKwkJJHBvc3NpYmxlID1+IHMvXHMqJFN0b3JhZ2VccyovL2c7CisJCSRwb3NzaWJsZSA9fiBzL1xzKiRTcGFyc2VccyovL2c7CisJCWlmICgkcG9zc2libGUgPX4gL15ccyokLykgeworCisJCX0gZWxzaWYgKCRwb3NzaWJsZSA9fiAvXHMvKSB7CisJCQkkcG9zc2libGUgPX4gcy9ccyokVHlwZVxzKi8vZzsKKwkJCWZvciBteSAkbW9kaWZpZXIgKHNwbGl0KCcgJywgJHBvc3NpYmxlKSkgeworCQkJCWlmICgkbW9kaWZpZXIgIX4gJG5vdFBlcm1pdHRlZCkgeworCQkJCQl3YXJuICJNT0RJRklFUjogJG1vZGlmaWVyICgkcG9zc2libGUpICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUpOworCQkJCQlwdXNoKEBtb2RpZmllckxpc3QsICRtb2RpZmllcik7CisJCQkJfQorCQkJfQorCisJCX0gZWxzZSB7CisJCQl3YXJuICJQT1NTSUJMRTogJHBvc3NpYmxlICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUpOworCQkJcHVzaChAdHlwZUxpc3QsICRwb3NzaWJsZSk7CisJCX0KKwkJYnVpbGRfdHlwZXMoKTsKKwl9IGVsc2UgeworCQl3YXJuICJOT1RQT1NTOiAkcG9zc2libGUgKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDEpOworCX0KK30KKworbXkgJHByZWZpeCA9ICcnOworCitzdWIgc2hvd190eXBlIHsKKyAgICAgICByZXR1cm4gIWRlZmluZWQgJGlnbm9yZV90eXBleyRfWzBdfTsKK30KKworc3ViIHJlcG9ydCB7CisJaWYgKCFzaG93X3R5cGUoJF9bMV0pIHx8CisJICAgIChkZWZpbmVkICR0c3Rfb25seSAmJiAkX1syXSAhfiAvXFEkdHN0X29ubHlcRS8pKSB7CisJCXJldHVybiAwOworCX0KKwlteSAkbGluZTsKKwlpZiAoJHNob3dfdHlwZXMpIHsKKwkJJGxpbmUgPSAiJHByZWZpeCRfWzBdOiRfWzFdOiAkX1syXVxuIjsKKwl9IGVsc2UgeworCQkkbGluZSA9ICIkcHJlZml4JF9bMF06ICRfWzJdXG4iOworCX0KKwkkbGluZSA9IChzcGxpdCgnXG4nLCAkbGluZSkpWzBdIC4gIlxuIiBpZiAoJHRlcnNlKTsKKworCXB1c2gob3VyIEByZXBvcnQsICRsaW5lKTsKKworCXJldHVybiAxOworfQorc3ViIHJlcG9ydF9kdW1wIHsKKwlvdXIgQHJlcG9ydDsKK30KKworc3ViIEVSUk9SIHsKKwlpZiAocmVwb3J0KCJFUlJPUiIsICRfWzBdLCAkX1sxXSkpIHsKKwkJb3VyICRjbGVhbiA9IDA7CisJCW91ciAkY250X2Vycm9yKys7CisJfQorfQorc3ViIFdBUk4geworCWlmIChyZXBvcnQoIldBUk5JTkciLCAkX1swXSwgJF9bMV0pKSB7CisJCW91ciAkY2xlYW4gPSAwOworCQlvdXIgJGNudF93YXJuKys7CisJfQorfQorc3ViIENISyB7CisJaWYgKCRjaGVjayAmJiByZXBvcnQoIkNIRUNLIiwgJF9bMF0sICRfWzFdKSkgeworCQlvdXIgJGNsZWFuID0gMDsKKwkJb3VyICRjbnRfY2hrKys7CisJfQorfQorCitzdWIgY2hlY2tfYWJzb2x1dGVfZmlsZSB7CisJbXkgKCRhYnNvbHV0ZSwgJGhlcmVjdXJyKSA9IEBfOworCW15ICRmaWxlID0gJGFic29sdXRlOworCisJIyNwcmludCAiYWJzb2x1dGU8JGFic29sdXRlPlxuIjsKKworCSMgU2VlIGlmIGFueSBzdWZmaXggb2YgdGhpcyBwYXRoIGlzIGEgcGF0aCB3aXRoaW4gdGhlIHRyZWUuCisJd2hpbGUgKCRmaWxlID1+IHNAXlteL10qL0BAKSB7CisJCWlmICgtZiAiJHJvb3QvJGZpbGUiKSB7CisJCQkjI3ByaW50ICJmaWxlPCRmaWxlPlxuIjsKKwkJCWxhc3Q7CisJCX0KKwl9CisJaWYgKCEgLWYgXykgIHsKKwkJcmV0dXJuIDA7CisJfQorCisJIyBJdCBpcywgc28gc2VlIGlmIHRoZSBwcmVmaXggaXMgYWNjZXB0YWJsZS4KKwlteSAkcHJlZml4ID0gJGFic29sdXRlOworCXN1YnN0cigkcHJlZml4LCAtbGVuZ3RoKCRmaWxlKSkgPSAnJzsKKworCSMjcHJpbnQgInByZWZpeDwkcHJlZml4PlxuIjsKKwlpZiAoJHByZWZpeCBuZSAiLi4uLyIpIHsKKwkJV0FSTigiVVNFX1JFTEFUSVZFX1BBVEgiLAorCQkgICAgICJ1c2UgcmVsYXRpdmUgcGF0aG5hbWUgaW5zdGVhZCBvZiBhYnNvbHV0ZSBpbiBjaGFuZ2Vsb2cgdGV4dFxuIiAuICRoZXJlY3Vycik7CisJfQorfQorCitzdWIgcHJvY2VzcyB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisKKwlteSAkbGluZW5yPTA7CisJbXkgJHByZXZsaW5lPSIiOworCW15ICRwcmV2cmF3bGluZT0iIjsKKwlteSAkc3Rhc2hsaW5lPSIiOworCW15ICRzdGFzaHJhd2xpbmU9IiI7CisKKwlteSAkbGVuZ3RoOworCW15ICRpbmRlbnQ7CisJbXkgJHByZXZpbmRlbnQ9MDsKKwlteSAkc3Rhc2hpbmRlbnQ9MDsKKworCW91ciAkY2xlYW4gPSAxOworCW15ICRzaWdub2ZmID0gMDsKKwlteSAkaXNfcGF0Y2ggPSAwOworCisJb3VyIEByZXBvcnQgPSAoKTsKKwlvdXIgJGNudF9saW5lcyA9IDA7CisJb3VyICRjbnRfZXJyb3IgPSAwOworCW91ciAkY250X3dhcm4gPSAwOworCW91ciAkY250X2NoayA9IDA7CisKKwkjIFRyYWNlIHRoZSByZWFsIGZpbGUvbGluZSBhcyB3ZSBnby4KKwlteSAkcmVhbGZpbGUgPSAnJzsKKwlteSAkcmVhbGxpbmUgPSAwOworCW15ICRyZWFsY250ID0gMDsKKwlteSAkaGVyZSA9ICcnOworCW15ICRpbl9jb21tZW50ID0gMDsKKwlteSAkY29tbWVudF9lZGdlID0gMDsKKwlteSAkZmlyc3RfbGluZSA9IDA7CisJbXkgJHAxX3ByZWZpeCA9ICcnOworCisJbXkgJHByZXZfdmFsdWVzID0gJ0UnOworCisJIyBzdXBwcmVzc2lvbiBmbGFncworCW15ICVzdXBwcmVzc19pZmJyYWNlczsKKwlteSAlc3VwcHJlc3Nfd2hpbGV0cmFpbGVyczsKKwlteSAlc3VwcHJlc3NfZXhwb3J0OworCisJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggc2FuaXRpemluZyB0aGUgbGluZXMuCisJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggbG9va2luZyBmb3IgYW55IF9fc2V0dXAgZG9jdW1lbnRhdGlvbi4KKwkjCisJbXkgQHNldHVwX2RvY3MgPSAoKTsKKwlteSAkc2V0dXBfZG9jcyA9IDA7CisKKwlzYW5pdGlzZV9saW5lX3Jlc2V0KCk7CisJbXkgJGxpbmU7CisJZm9yZWFjaCBteSAkcmF3bGluZSAoQHJhd2xpbmVzKSB7CisJCSRsaW5lbnIrKzsKKwkJJGxpbmUgPSAkcmF3bGluZTsKKworCQlpZiAoJHJhd2xpbmU9fi9eXCtcK1wrXHMrKFxTKykvKSB7CisJCQkkc2V0dXBfZG9jcyA9IDA7CisJCQlpZiAoJDEgPX4gbUBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCRAKSB7CisJCQkJJHNldHVwX2RvY3MgPSAxOworCQkJfQorCQkJI25leHQ7CisJCX0KKwkJaWYgKCRyYXdsaW5lPX4vXlxAXEAgLVxkKyg/OixcZCspPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CisJCQkkcmVhbGxpbmU9JDEtMTsKKwkJCWlmIChkZWZpbmVkICQyKSB7CisJCQkJJHJlYWxjbnQ9JDMrMTsKKwkJCX0gZWxzZSB7CisJCQkJJHJlYWxjbnQ9MSsxOworCQkJfQorCQkJJGluX2NvbW1lbnQgPSAwOworCisJCQkjIEd1ZXN0aW1hdGUgaWYgdGhpcyBpcyBhIGNvbnRpbnVpbmcgY29tbWVudC4gIFJ1bgorCQkJIyB0aGUgY29udGV4dCBsb29raW5nIGZvciBhIGNvbW1lbnQgImVkZ2UiLiAgSWYgdGhpcworCQkJIyBlZGdlIGlzIGEgY2xvc2UgY29tbWVudCB0aGVuIHdlIG11c3QgYmUgaW4gYSBjb21tZW50CisJCQkjIGF0IGNvbnRleHQgc3RhcnQuCisJCQlteSAkZWRnZTsKKwkJCW15ICRjbnQgPSAkcmVhbGNudDsKKwkJCWZvciAobXkgJGxuID0gJGxpbmVuciArIDE7ICRjbnQgPiAwOyAkbG4rKykgeworCQkJCW5leHQgaWYgKGRlZmluZWQgJHJhd2xpbmVzWyRsbiAtIDFdICYmCisJCQkJCSAkcmF3bGluZXNbJGxuIC0gMV0gPX4gL14tLyk7CisJCQkJJGNudC0tOworCQkJCSNwcmludCAiUkFXPCRyYXdsaW5lc1skbG4gLSAxXT5cbiI7CisJCQkJbGFzdCBpZiAoIWRlZmluZWQgJHJhd2xpbmVzWyRsbiAtIDFdKTsKKwkJCQlpZiAoJHJhd2xpbmVzWyRsbiAtIDFdID1+IG1AKC9cKnxcKi8pQCAmJgorCQkJCSAgICAkcmF3bGluZXNbJGxuIC0gMV0gIX4gbUAiW14iXSooPzovXCp8XCovKVteIl0qIkApIHsKKwkJCQkJKCRlZGdlKSA9ICQxOworCQkJCQlsYXN0OworCQkJCX0KKwkJCX0KKwkJCWlmIChkZWZpbmVkICRlZGdlICYmICRlZGdlIGVxICcqLycpIHsKKwkJCQkkaW5fY29tbWVudCA9IDE7CisJCQl9CisKKwkJCSMgR3Vlc3RpbWF0ZSBpZiB0aGlzIGlzIGEgY29udGludWluZyBjb21tZW50LiAgSWYgdGhpcworCQkJIyBpcyB0aGUgc3RhcnQgb2YgYSBkaWZmIGJsb2NrIGFuZCB0aGlzIGxpbmUgc3RhcnRzCisJCQkjICcgKicgdGhlbiBpdCBpcyB2ZXJ5IGxpa2VseSBhIGNvbW1lbnQuCisJCQlpZiAoIWRlZmluZWQgJGVkZ2UgJiYKKwkJCSAgICAkcmF3bGluZXNbJGxpbmVucl0gPX4gbUBeLlxzKig/OlwqXCorfCBcKikoPzpcc3wkKUApCisJCQl7CisJCQkJJGluX2NvbW1lbnQgPSAxOworCQkJfQorCisJCQkjI3ByaW50ICJDT01NRU5UOiRpbl9jb21tZW50IGVkZ2U8JGVkZ2U+ICRyYXdsaW5lXG4iOworCQkJc2FuaXRpc2VfbGluZV9yZXNldCgkaW5fY29tbWVudCk7CisKKwkJfSBlbHNpZiAoJHJlYWxjbnQgJiYgJHJhd2xpbmUgPX4gL14oPzpcK3wgfCQpLykgeworCQkJIyBTdGFuZGFyZGlzZSB0aGUgc3RyaW5ncyBhbmQgY2hhcnMgd2l0aGluIHRoZSBpbnB1dCB0bworCQkJIyBzaW1wbGlmeSBtYXRjaGluZyAtLSBvbmx5IGJvdGhlciB3aXRoIHBvc2l0aXZlIGxpbmVzLgorCQkJJGxpbmUgPSBzYW5pdGlzZV9saW5lKCRyYXdsaW5lKTsKKwkJfQorCQlwdXNoKEBsaW5lcywgJGxpbmUpOworCisJCWlmICgkcmVhbGNudCA+IDEpIHsKKwkJCSRyZWFsY250LS0gaWYgKCRsaW5lID1+IC9eKD86XCt8IHwkKS8pOworCQl9IGVsc2UgeworCQkJJHJlYWxjbnQgPSAwOworCQl9CisKKwkJI3ByaW50ICI9PT4kcmF3bGluZVxuIjsKKwkJI3ByaW50ICItLT4kbGluZVxuIjsKKworCQlpZiAoJHNldHVwX2RvY3MgJiYgJGxpbmUgPX4gL15cKy8pIHsKKwkJCXB1c2goQHNldHVwX2RvY3MsICRsaW5lKTsKKwkJfQorCX0KKworCSRwcmVmaXggPSAnJzsKKworCSRyZWFsY250ID0gMDsKKwkkbGluZW5yID0gMDsKKwlmb3JlYWNoIG15ICRsaW5lIChAbGluZXMpIHsKKwkJJGxpbmVucisrOworCisJCW15ICRyYXdsaW5lID0gJHJhd2xpbmVzWyRsaW5lbnIgLSAxXTsKKworI2V4dHJhY3QgdGhlIGxpbmUgcmFuZ2UgaW4gdGhlIGZpbGUgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQKKwkJaWYgKCRsaW5lPX4vXlxAXEAgLVxkKyg/OixcZCspPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CisJCQkkaXNfcGF0Y2ggPSAxOworCQkJJGZpcnN0X2xpbmUgPSAkbGluZW5yICsgMTsKKwkJCSRyZWFsbGluZT0kMS0xOworCQkJaWYgKGRlZmluZWQgJDIpIHsKKwkJCQkkcmVhbGNudD0kMysxOworCQkJfSBlbHNlIHsKKwkJCQkkcmVhbGNudD0xKzE7CisJCQl9CisJCQlhbm5vdGF0ZV9yZXNldCgpOworCQkJJHByZXZfdmFsdWVzID0gJ0UnOworCisJCQklc3VwcHJlc3NfaWZicmFjZXMgPSAoKTsKKwkJCSVzdXBwcmVzc193aGlsZXRyYWlsZXJzID0gKCk7CisJCQklc3VwcHJlc3NfZXhwb3J0ID0gKCk7CisJCQluZXh0OworCisjIHRyYWNrIHRoZSBsaW5lIG51bWJlciBhcyB3ZSBtb3ZlIHRocm91Z2ggdGhlIGh1bmssIG5vdGUgdGhhdAorIyBuZXcgdmVyc2lvbnMgb2YgR05VIGRpZmYgb21pdCB0aGUgbGVhZGluZyBzcGFjZSBvbiBjb21wbGV0ZWx5CisjIGJsYW5rIGNvbnRleHQgbGluZXMgc28gd2UgbmVlZCB0byBjb3VudCB0aGF0IHRvby4KKwkJfSBlbHNpZiAoJGxpbmUgPX4gL14oIHxcK3wkKS8pIHsKKwkJCSRyZWFsbGluZSsrOworCQkJJHJlYWxjbnQtLSBpZiAoJHJlYWxjbnQgIT0gMCk7CisKKwkJCSMgTWVhc3VyZSB0aGUgbGluZSBsZW5ndGggYW5kIGluZGVudC4KKwkJCSgkbGVuZ3RoLCAkaW5kZW50KSA9IGxpbmVfc3RhdHMoJHJhd2xpbmUpOworCisJCQkjIFRyYWNrIHRoZSBwcmV2aW91cyBsaW5lLgorCQkJKCRwcmV2bGluZSwgJHN0YXNobGluZSkgPSAoJHN0YXNobGluZSwgJGxpbmUpOworCQkJKCRwcmV2aW5kZW50LCAkc3Rhc2hpbmRlbnQpID0gKCRzdGFzaGluZGVudCwgJGluZGVudCk7CisJCQkoJHByZXZyYXdsaW5lLCAkc3Rhc2hyYXdsaW5lKSA9ICgkc3Rhc2hyYXdsaW5lLCAkcmF3bGluZSk7CisKKwkJCSN3YXJuICJsaW5lPCRsaW5lPlxuIjsKKworCQl9IGVsc2lmICgkcmVhbGNudCA9PSAxKSB7CisJCQkkcmVhbGNudC0tOworCQl9CisKKwkJbXkgJGh1bmtfbGluZSA9ICgkcmVhbGNudCAhPSAwKTsKKworI21ha2UgdXAgdGhlIGhhbmRsZSBmb3IgYW55IGVycm9yIHdlIHJlcG9ydCBvbiB0aGlzIGxpbmUKKwkJJHByZWZpeCA9ICIkZmlsZW5hbWU6JHJlYWxsaW5lOiAiIGlmICgkZW1hY3MgJiYgJGZpbGUpOworCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokbGluZW5yOiAiIGlmICgkZW1hY3MgJiYgISRmaWxlKTsKKworCQkkaGVyZSA9ICIjJGxpbmVucjogIiBpZiAoISRmaWxlKTsKKwkJJGhlcmUgPSAiIyRyZWFsbGluZTogIiBpZiAoJGZpbGUpOworCisJCSMgZXh0cmFjdCB0aGUgZmlsZW5hbWUgYXMgaXQgcGFzc2VzCisJCWlmICgkbGluZSA9fiAvXmRpZmYgLS1naXQuKj8oXFMrKSQvKSB7CisJCQkkcmVhbGZpbGUgPSAkMTsKKwkJCSRyZWFsZmlsZSA9fiBzQF4oW14vXSopL0BAOworCisJCX0gZWxzaWYgKCRsaW5lID1+IC9eXCtcK1wrXHMrKFxTKykvKSB7CisJCQkkcmVhbGZpbGUgPSAkMTsKKwkJCSRyZWFsZmlsZSA9fiBzQF4oW14vXSopL0BAOworCisJCQkkcDFfcHJlZml4ID0gJDE7CisJCQlpZiAoISRmaWxlICYmICR0cmVlICYmICRwMV9wcmVmaXggbmUgJycgJiYKKwkJCSAgICAtZSAiJHJvb3QvJHAxX3ByZWZpeCIpIHsKKwkJCQlXQVJOKCJQQVRDSF9QUkVGSVgiLAorCQkJCSAgICAgInBhdGNoIHByZWZpeCAnJHAxX3ByZWZpeCcgZXhpc3RzLCBhcHBlYXJzIHRvIGJlIGEgLXAwIHBhdGNoXG4iKTsKKwkJCX0KKworCQkJaWYgKCRyZWFsZmlsZSA9fiBtQF5pbmNsdWRlL2FzbS9AKSB7CisJCQkJRVJST1IoIk1PRElGSUVEX0lOQ0xVREVfQVNNIiwKKwkJCQkgICAgICAiZG8gbm90IG1vZGlmeSBmaWxlcyBpbiBpbmNsdWRlL2FzbSwgY2hhbmdlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmaWxlcyBpbiBpbmNsdWRlL2FzbS08YXJjaGl0ZWN0dXJlPlxuIiAuICIkaGVyZSRyYXdsaW5lXG4iKTsKKwkJCX0KKwkJCW5leHQ7CisJCX0KKworCQkkaGVyZSAuPSAiRklMRTogJHJlYWxmaWxlOiRyZWFsbGluZToiIGlmICgkcmVhbGNudCAhPSAwKTsKKworCQlteSAkaGVyZWxpbmUgPSAiJGhlcmVcbiRyYXdsaW5lXG4iOworCQlteSAkaGVyZWN1cnIgPSAiJGhlcmVcbiRyYXdsaW5lXG4iOworCQlteSAkaGVyZXByZXYgPSAiJGhlcmVcbiRwcmV2cmF3bGluZVxuJHJhd2xpbmVcbiI7CisKKwkJJGNudF9saW5lcysrIGlmICgkcmVhbGNudCAhPSAwKTsKKworIyBDaGVjayBmb3IgaW5jb3JyZWN0IGZpbGUgcGVybWlzc2lvbnMKKwkJaWYgKCRsaW5lID1+IC9ebmV3IChmaWxlICk/bW9kZS4qWzc1MzFdXGR7MCwyfSQvKSB7CisJCQlteSAkcGVybWhlcmUgPSAkaGVyZSAuICJGSUxFOiAkcmVhbGZpbGVcbiI7CisJCQlpZiAoJHJlYWxmaWxlID1+IC8oTWFrZWZpbGV8S2NvbmZpZ3xcLmN8XC5ofFwuU3xcLnRtcGwpJC8pIHsKKwkJCQlFUlJPUigiRVhFQ1VURV9QRVJNSVNTSU9OUyIsCisJCQkJICAgICAgImRvIG5vdCBzZXQgZXhlY3V0ZSBwZXJtaXNzaW9ucyBmb3Igc291cmNlIGZpbGVzXG4iIC4gJHBlcm1oZXJlKTsKKwkJCX0KKwkJfQorCisjIENoZWNrIHRoZSBwYXRjaCBmb3IgYSBzaWdub2ZmOgorCQlpZiAoJGxpbmUgPX4gL15ccypzaWduZWQtb2ZmLWJ5Oi9pKSB7CisJCQkkc2lnbm9mZisrOworCQl9CisKKyMgQ2hlY2sgc2lnbmF0dXJlIHN0eWxlcworCQlpZiAoJGxpbmUgPX4gL14oXHMqKSgkc2lnbmF0dXJlX3RhZ3MpKFxzKikoLiopLykgeworCQkJbXkgJHNwYWNlX2JlZm9yZSA9ICQxOworCQkJbXkgJHNpZ25fb2ZmID0gJDI7CisJCQlteSAkc3BhY2VfYWZ0ZXIgPSAkMzsKKwkJCW15ICRlbWFpbCA9ICQ0OworCQkJbXkgJHVjZmlyc3Rfc2lnbl9vZmYgPSB1Y2ZpcnN0KGxjKCRzaWduX29mZikpOworCisJCQlpZiAoZGVmaW5lZCAkc3BhY2VfYmVmb3JlICYmICRzcGFjZV9iZWZvcmUgbmUgIiIpIHsKKwkJCQlXQVJOKCJCQURfU0lHTl9PRkYiLAorCQkJCSAgICAgIkRvIG5vdCB1c2Ugd2hpdGVzcGFjZSBiZWZvcmUgJHVjZmlyc3Rfc2lnbl9vZmZcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQkJaWYgKCRzaWduX29mZiA9fiAvLWJ5OiQvaSAmJiAkc2lnbl9vZmYgbmUgJHVjZmlyc3Rfc2lnbl9vZmYpIHsKKwkJCQlXQVJOKCJCQURfU0lHTl9PRkYiLAorCQkJCSAgICAgIickdWNmaXJzdF9zaWduX29mZicgaXMgdGhlIHByZWZlcnJlZCBzaWduYXR1cmUgZm9ybVxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCQlpZiAoIWRlZmluZWQgJHNwYWNlX2FmdGVyIHx8ICRzcGFjZV9hZnRlciBuZSAiICIpIHsKKwkJCQlXQVJOKCJCQURfU0lHTl9PRkYiLAorCQkJCSAgICAgIlVzZSBhIHNpbmdsZSBzcGFjZSBhZnRlciAkdWNmaXJzdF9zaWduX29mZlxuIiAuICRoZXJlY3Vycik7CisJCQl9CisKKwkJCW15ICgkZW1haWxfbmFtZSwgJGVtYWlsX2FkZHJlc3MsICRjb21tZW50KSA9IHBhcnNlX2VtYWlsKCRlbWFpbCk7CisJCQlteSAkc3VnZ2VzdGVkX2VtYWlsID0gZm9ybWF0X2VtYWlsKCgkZW1haWxfbmFtZSwgJGVtYWlsX2FkZHJlc3MpKTsKKwkJCWlmICgkc3VnZ2VzdGVkX2VtYWlsIGVxICIiKSB7CisJCQkJRVJST1IoIkJBRF9TSUdOX09GRiIsCisJCQkJICAgICAgIlVucmVjb2duaXplZCBlbWFpbCBhZGRyZXNzOiAnJGVtYWlsJ1xuIiAuICRoZXJlY3Vycik7CisJCQl9IGVsc2UgeworCQkJCW15ICRkZXF1b3RlZCA9ICRzdWdnZXN0ZWRfZW1haWw7CisJCQkJJGRlcXVvdGVkID1+IHMvXiIvLzsKKwkJCQkkZGVxdW90ZWQgPX4gcy8iIDwvIDwvOworCQkJCSMgRG9uJ3QgZm9yY2UgZW1haWwgdG8gaGF2ZSBxdW90ZXMKKwkJCQkjIEFsbG93IGp1c3QgYW4gYW5nbGUgYnJhY2tldGVkIGFkZHJlc3MKKwkJCQlpZiAoIiRkZXF1b3RlZCRjb21tZW50IiBuZSAkZW1haWwgJiYKKwkJCQkgICAgIjwkZW1haWxfYWRkcmVzcz4kY29tbWVudCIgbmUgJGVtYWlsICYmCisJCQkJICAgICIkc3VnZ2VzdGVkX2VtYWlsJGNvbW1lbnQiIG5lICRlbWFpbCkgeworCQkJCQlXQVJOKCJCQURfU0lHTl9PRkYiLAorCQkJCQkgICAgICJlbWFpbCBhZGRyZXNzICckZW1haWwnIG1pZ2h0IGJlIGJldHRlciBhcyAnJHN1Z2dlc3RlZF9lbWFpbCRjb21tZW50J1xuIiAuICRoZXJlY3Vycik7CisJCQkJfQorCQkJfQorCQl9CisKKyMgQ2hlY2sgZm9yIHdyYXBwYWdlIHdpdGhpbiBhIHZhbGlkIGh1bmsgb2YgdGhlIGZpbGUKKwkJaWYgKCRyZWFsY250ICE9IDAgJiYgJGxpbmUgIX4gbXteKD86XCt8LXwgfFxcIE5vIG5ld2xpbmV8JCl9KSB7CisJCQlFUlJPUigiQ09SUlVQVEVEX1BBVENIIiwKKwkJCSAgICAgICJwYXRjaCBzZWVtcyB0byBiZSBjb3JydXB0IChsaW5lIHdyYXBwZWQ/KVxuIiAuCisJCQkJJGhlcmVjdXJyKSBpZiAoISRlbWl0dGVkX2NvcnJ1cHQrKyk7CisJCX0KKworIyBDaGVjayBmb3IgYWJzb2x1dGUga2VybmVsIHBhdGhzLgorCQlpZiAoJHRyZWUpIHsKKwkJCXdoaWxlICgkbGluZSA9fiBteyg/Ol58XHMpKC9cUyopfWcpIHsKKwkJCQlteSAkZmlsZSA9ICQxOworCisJCQkJaWYgKCRmaWxlID1+IG17XiguKj8pKD86OlxkKykrOj8kfSAmJgorCQkJCSAgICBjaGVja19hYnNvbHV0ZV9maWxlKCQxLCAkaGVyZWN1cnIpKSB7CisJCQkJCSMKKwkJCQl9IGVsc2UgeworCQkJCQljaGVja19hYnNvbHV0ZV9maWxlKCRmaWxlLCAkaGVyZWN1cnIpOworCQkJCX0KKwkJCX0KKwkJfQorCisjIFVURi04IHJlZ2V4IGZvdW5kIGF0IGh0dHA6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvcXVlc3Rpb25zL3FhLWZvcm1zLXV0Zi04LmVuLnBocAorCQlpZiAoKCRyZWFsZmlsZSA9fiAvXiQvIHx8ICRsaW5lID1+IC9eXCsvKSAmJgorCQkgICAgJHJhd2xpbmUgIX4gbS9eJFVURjgqJC8pIHsKKwkJCW15ICgkdXRmOF9wcmVmaXgpID0gKCRyYXdsaW5lID1+IC9eKCRVVEY4KikvKTsKKworCQkJbXkgJGJsYW5rID0gY29weV9zcGFjaW5nKCRyYXdsaW5lKTsKKwkJCW15ICRwdHIgPSBzdWJzdHIoJGJsYW5rLCAwLCBsZW5ndGgoJHV0ZjhfcHJlZml4KSkgLiAiXiI7CisJCQlteSAkaGVyZXB0ciA9ICIkaGVyZWxpbmUkcHRyXG4iOworCisJCQlDSEsoIklOVkFMSURfVVRGOCIsCisJCQkgICAgIkludmFsaWQgVVRGLTgsIHBhdGNoIGFuZCBjb21taXQgbWVzc2FnZSBzaG91bGQgYmUgZW5jb2RlZCBpbiBVVEYtOFxuIiAuICRoZXJlcHRyKTsKKwkJfQorCisjIGlnbm9yZSBub24taHVuayBsaW5lcyBhbmQgbGluZXMgYmVpbmcgcmVtb3ZlZAorCQluZXh0IGlmICghJGh1bmtfbGluZSB8fCAkbGluZSA9fiAvXi0vKTsKKworI3RyYWlsaW5nIHdoaXRlc3BhY2UKKwkJaWYgKCRsaW5lID1+IC9eXCsuKlwwMTUvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJHJhd2xpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJET1NfTElORV9FTkRJTkdTIiwKKwkJCSAgICAgICJET1MgbGluZSBlbmRpbmdzXG4iIC4gJGhlcmV2ZXQpOworCisJCX0gZWxzaWYgKCRyYXdsaW5lID1+IC9eXCsuKlxTXHMrJC8gfHwgJHJhd2xpbmUgPX4gL15cK1xzKyQvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJHJhd2xpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJUUkFJTElOR19XSElURVNQQUNFIiwKKwkJCSAgICAgICJ0cmFpbGluZyB3aGl0ZXNwYWNlXG4iIC4gJGhlcmV2ZXQpOworCQkJJHJwdF9jbGVhbmVycyA9IDE7CisJCX0KKworIyBjaGVjayBmb3IgS2NvbmZpZyBoZWxwIHRleHQgaGF2aW5nIGEgcmVhbCBkZXNjcmlwdGlvbgorIyBPbmx5IGFwcGxpZXMgd2hlbiBhZGRpbmcgdGhlIGVudHJ5IG9yaWdpbmFsbHksIGFmdGVyIHRoYXQgd2UgZG8gbm90IGhhdmUKKyMgc3VmZmljaWVudCBjb250ZXh0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGluZGVlZCBsb25nIGVub3VnaC4KKwkJaWYgKCRyZWFsZmlsZSA9fiAvS2NvbmZpZy8gJiYKKwkJICAgICRsaW5lID1+IC9cK1xzKig/Oi0tLSk/aGVscCg/Oi0tLSk/JC8pIHsKKwkJCW15ICRsZW5ndGggPSAwOworCQkJbXkgJGNudCA9ICRyZWFsY250OworCQkJbXkgJGxuID0gJGxpbmVuciArIDE7CisJCQlteSAkZjsKKwkJCW15ICRpc19lbmQgPSAwOworCQkJd2hpbGUgKCRjbnQgPiAwICYmIGRlZmluZWQgJGxpbmVzWyRsbiAtIDFdKSB7CisJCQkJJGYgPSAkbGluZXNbJGxuIC0gMV07CisJCQkJJGNudC0tIGlmICgkbGluZXNbJGxuIC0gMV0gIX4gL14tLyk7CisJCQkJJGlzX2VuZCA9ICRsaW5lc1skbG4gLSAxXSA9fiAvXlwrLzsKKwkJCQkkbG4rKzsKKworCQkJCW5leHQgaWYgKCRmID1+IC9eLS8pOworCQkJCSRmID1+IHMvXi4vLzsKKwkJCQkkZiA9fiBzLyMuKi8vOworCQkJCSRmID1+IHMvXlxzKy8vOworCQkJCW5leHQgaWYgKCRmID1+IC9eJC8pOworCQkJCWlmICgkZiA9fiAvXlxzKmNvbmZpZ1xzLykgeworCQkJCQkkaXNfZW5kID0gMTsKKwkJCQkJbGFzdDsKKwkJCQl9CisJCQkJJGxlbmd0aCsrOworCQkJfQorCQkJV0FSTigiQ09ORklHX0RFU0NSSVBUSU9OIiwKKwkJCSAgICAgInBsZWFzZSB3cml0ZSBhIHBhcmFncmFwaCB0aGF0IGRlc2NyaWJlcyB0aGUgY29uZmlnIHN5bWJvbCBmdWxseVxuIiAuICRoZXJlY3VycikgaWYgKCRpc19lbmQgJiYgJGxlbmd0aCA8IDQpOworCQkJI3ByaW50ICJpc19lbmQ8JGlzX2VuZD4gbGVuZ3RoPCRsZW5ndGg+XG4iOworCQl9CisKKyMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8Y3xzfFN8cGx8c2gpJC8pOworCisjODAgY29sdW1uIGxpbWl0CisJCWlmICgkbGluZSA9fiAvXlwrLyAmJiAkcHJldnJhd2xpbmUgIX4gL1wvXCpcKi8gJiYKKwkJICAgICRyYXdsaW5lICF+IC9eLlxzKlwqXHMqXEAkSWRlbnRccy8gJiYKKwkJICAgICEoJGxpbmUgPX4gL15cK1xzKiRsb2dGdW5jdGlvbnNccypcKFxzKig/OihLRVJOX1xTK1xzKnxbXiJdKikpPyJbWFx0XSoiXHMqKD86fCx8XClccyo7KVxzKiQvIHx8CisJCSAgICAkbGluZSA9fiAvXlwrXHMqIlteIl0qIlxzKig/OlxzKnwsfFwpXHMqOylccyokLykgJiYKKwkJICAgICRsZW5ndGggPiA4MCkKKwkJeworCQkJV0FSTigiTE9OR19MSU5FIiwKKwkJCSAgICAgImxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBzcGFjZXMgYmVmb3JlIGEgcXVvdGVkIG5ld2xpbmUKKwkJaWYgKCRyYXdsaW5lID1+IC9eLipcIi4qXHNcXG4vKSB7CisJCQlXQVJOKCJRVU9URURfV0hJVEVTUEFDRV9CRUZPUkVfTkVXTElORSIsCisJCQkgICAgICJ1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIGJlZm9yZSBhIHF1b3RlZCBuZXdsaW5lXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBhZGRpbmcgbGluZXMgd2l0aG91dCBhIG5ld2xpbmUuCisJCWlmICgkbGluZSA9fiAvXlwrLyAmJiBkZWZpbmVkICRsaW5lc1skbGluZW5yXSAmJiAkbGluZXNbJGxpbmVucl0gPX4gL15cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlLykgeworCQkJV0FSTigiTUlTU0lOR19FT0ZfTkVXTElORSIsCisJCQkgICAgICJhZGRpbmcgYSBsaW5lIHdpdGhvdXQgbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBCbGFja2ZpbjogdXNlIGhpL2xvIG1hY3JvcworCQlpZiAoJHJlYWxmaWxlID1+IG1AYXJjaC9ibGFja2Zpbi8uKlwuUyRAKSB7CisJCQlpZiAoJGxpbmUgPX4gL1wuW2xMXVtbOnNwYWNlOl1dKj0uKiZbWzpzcGFjZTpdXSoweFtmRl1bZkZdW2ZGXVtmRl0vKSB7CisJCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRsaW5lKSAuICJcbiI7CisJCQkJRVJST1IoIkxPX01BQ1JPIiwKKwkJCQkgICAgICAidXNlIHRoZSBMTygpIG1hY3JvLCBub3QgKC4uLiAmIDB4RkZGRilcbiIgLiAkaGVyZXZldCk7CisJCQl9CisJCQlpZiAoJGxpbmUgPX4gL1wuW2hIXVtbOnNwYWNlOl1dKj0uKj4+W1s6c3BhY2U6XV0qMTYvKSB7CisJCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRsaW5lKSAuICJcbiI7CisJCQkJRVJST1IoIkhJX01BQ1JPIiwKKwkJCQkgICAgICAidXNlIHRoZSBISSgpIG1hY3JvLCBub3QgKC4uLiA+PiAxNilcbiIgLiAkaGVyZXZldCk7CisJCQl9CisJCX0KKworIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBzb3VyY2UgZmlsZSBDIG9yIHBlcmwgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8Y3xwbCkkLyk7CisKKyMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgYW55IHRhYnMgbXVzdCBjb21lIGZpcnN0IGFuZCBhbnl0aGluZworIyBtb3JlIHRoYW4gOCBtdXN0IHVzZSB0YWJzLgorCQlpZiAoJHJhd2xpbmUgPX4gL15cK1xzKiBcdFxzKlxTLyB8fAorCQkgICAgJHJhd2xpbmUgPX4gL15cK1xzKiAgICAgICAgXHMqLykgeworCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRyYXdsaW5lKSAuICJcbiI7CisJCQlFUlJPUigiQ09ERV9JTkRFTlQiLAorCQkJICAgICAgImNvZGUgaW5kZW50IHNob3VsZCB1c2UgdGFicyB3aGVyZSBwb3NzaWJsZVxuIiAuICRoZXJldmV0KTsKKwkJCSRycHRfY2xlYW5lcnMgPSAxOworCQl9CisKKyMgY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSB0YWJzLgorCQlpZiAoJHJhd2xpbmUgPX4gL15cKy8gJiYgJHJhd2xpbmUgPX4gLyBcdC8pIHsKKwkJCW15ICRoZXJldmV0ID0gIiRoZXJlXG4iIC4gY2F0X3ZldCgkcmF3bGluZSkgLiAiXG4iOworCQkJV0FSTigiU1BBQ0VfQkVGT1JFX1RBQiIsCisJCQkgICAgICJwbGVhc2UsIG5vIHNwYWNlIGJlZm9yZSB0YWJzXG4iIC4gJGhlcmV2ZXQpOworCQl9CisKKyMgY2hlY2sgZm9yIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKyMgRXhjZXB0aW9uczoKKyMgIDEpIHdpdGhpbiBjb21tZW50cworIyAgMikgaW5kZW50ZWQgcHJlcHJvY2Vzc29yIGNvbW1hbmRzCisjICAzKSBoYW5naW5nIGxhYmVscworCQlpZiAoJHJhd2xpbmUgPX4gL15cKyAvICYmICRsaW5lICF+IC9cKyAqKD86JDt8I3wkSWRlbnQ6KS8pICB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJHJhd2xpbmUpIC4gIlxuIjsKKwkJCVdBUk4oIkxFQURJTkdfU1BBQ0UiLAorCQkJICAgICAicGxlYXNlLCBubyBzcGFjZXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZVxuIiAuICRoZXJldmV0KTsKKwkJfQorCisjIGNoZWNrIHdlIGFyZSBpbiBhIHZhbGlkIEMgc291cmNlIGZpbGUgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8YykkLyk7CisKKyMgY2hlY2sgZm9yIFJDUy9DVlMgcmV2aXNpb24gbWFya2VycworCQlpZiAoJHJhd2xpbmUgPX4gL15cKy4qXCQoUmV2aXNpb258TG9nfElkKSg/OlwkfCkvKSB7CisJCQlXQVJOKCJDVlNfS0VZV09SRCIsCisJCQkgICAgICJDVlMgc3R5bGUga2V5d29yZCBtYXJrZXJzLCB0aGVzZSB3aWxsIF9ub3RfIGJlIHVwZGF0ZWRcbiIuICRoZXJlY3Vycik7CisJCX0KKworIyBCbGFja2ZpbjogZG9uJ3QgdXNlIF9fYnVpbHRpbl9iZmluX1tjc11zeW5jCisJCWlmICgkbGluZSA9fiAvX19idWlsdGluX2JmaW5fY3N5bmMvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJGxpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJDU1lOQyIsCisJCQkgICAgICAidXNlIHRoZSBDU1lOQygpIG1hY3JvIGluIGFzbS9ibGFja2Zpbi5oXG4iIC4gJGhlcmV2ZXQpOworCQl9CisJCWlmICgkbGluZSA9fiAvX19idWlsdGluX2JmaW5fc3N5bmMvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJGxpbmUpIC4gIlxuIjsKKwkJCUVSUk9SKCJTU1lOQyIsCisJCQkgICAgICAidXNlIHRoZSBTU1lOQygpIG1hY3JvIGluIGFzbS9ibGFja2Zpbi5oXG4iIC4gJGhlcmV2ZXQpOworCQl9CisKKyMgQ2hlY2sgZm9yIHBvdGVudGlhbCAnYmFyZScgdHlwZXMKKwkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQsCisJCSAgICAkcmVhbGxpbmVfbmV4dCk7CisJCWlmICgkcmVhbGNudCAmJiAkbGluZSA9fiAvLlxzKlxTLykgeworCQkJKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpID0KKwkJCQljdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lbnIsICRyZWFsY250LCAwKTsKKwkJCSRzdGF0ID1+IHMvXG4uL1xuIC9nOworCQkJJGNvbmQgPX4gcy9cbi4vXG4gL2c7CisKKwkJCSMgRmluZCB0aGUgcmVhbCBuZXh0IGxpbmUuCisJCQkkcmVhbGxpbmVfbmV4dCA9ICRsaW5lX25yX25leHQ7CisJCQlpZiAoZGVmaW5lZCAkcmVhbGxpbmVfbmV4dCAmJgorCQkJICAgICghZGVmaW5lZCAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSB8fAorCQkJICAgICBzdWJzdHIoJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0sICRvZmZfbmV4dCkgPX4gL15ccyokLykpIHsKKwkJCQkkcmVhbGxpbmVfbmV4dCsrOworCQkJfQorCisJCQlteSAkcyA9ICRzdGF0OworCQkJJHMgPX4gcy97LiokLy9zOworCisJCQkjIElnbm9yZSBnb3RvIGxhYmVscy4KKwkJCWlmICgkcyA9fiAvJElkZW50OlwqJC9zKSB7CisKKwkJCSMgSWdub3JlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQKKwkJCX0gZWxzaWYgKCRzID1+IC9eLlxzKiRJZGVudFxzKlwoL3MpIHsKKworCQkJfSBlbHNpZiAoJHMgPX4gL14uXHMqZWxzZVxiL3MpIHsKKworCQkJIyBkZWNsYXJhdGlvbnMgYWx3YXlzIHN0YXJ0IHdpdGggdHlwZXMKKwkJCX0gZWxzaWYgKCRwcmV2X3ZhbHVlcyBlcSAnRScgJiYgJHMgPX4gL14uXHMqKD86JFN0b3JhZ2VccyspPyg/OiRJbmxpbmVccyspPyg/OmNvbnN0XHMrKT8oKD86XHMqJElkZW50KSs/KVxiKD86XHMrJFNwYXJzZSk/XHMqXCoqXHMqKD86JElkZW50fFwoXCpbXlwpXSpcKSkoPzpccyokTW9kaWZpZXIpP1xzKig/Ojt8PXwsfFwoKS9zKSB7CisJCQkJbXkgJHR5cGUgPSAkMTsKKwkJCQkkdHlwZSA9fiBzL1xzKy8gL2c7CisJCQkJcG9zc2libGUoJHR5cGUsICJBOiIgLiAkcyk7CisKKwkJCSMgZGVmaW5pdGlvbnMgaW4gZ2xvYmFsIHNjb3BlIGNhbiBvbmx5IHN0YXJ0IHdpdGggdHlwZXMKKwkJCX0gZWxzaWYgKCRzID1+IC9eLig/OiRTdG9yYWdlXHMrKT8oPzokSW5saW5lXHMrKT8oPzpjb25zdFxzKyk/KCRJZGVudClcYlxzKig/ITopL3MpIHsKKwkJCQlwb3NzaWJsZSgkMSwgIkI6IiAuICRzKTsKKwkJCX0KKworCQkJIyBhbnkgKGZvbyAuLi4gKikgaXMgYSBwb2ludGVyIGNhc3QsIGFuZCBmb28gaXMgYSB0eXBlCisJCQl3aGlsZSAoJHMgPX4gL1woKCRJZGVudCkoPzpccyskU3BhcnNlKSpbXHNcKl0rXHMqXCkvc2cpIHsKKwkJCQlwb3NzaWJsZSgkMSwgIkM6IiAuICRzKTsKKwkJCX0KKworCQkJIyBDaGVjayBmb3IgYW55IHNvcnQgb2YgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisJCQkjIGludCBmb28oc29tZXRoaW5nIGJhciwgb3RoZXIgYmF6KTsKKwkJCSMgdm9pZCAoKnN0b3JlX2dkdCkoeDg2X2Rlc2NyX3B0ciAqKTsKKwkJCWlmICgkcHJldl92YWx1ZXMgZXEgJ0UnICYmICRzID1+IC9eKC4oPzp0eXBlZGVmXHMqKT8oPzooPzokU3RvcmFnZXwkSW5saW5lKVxzKikqXHMqJFR5cGVccyooPzpcYiRJZGVudHxcKFwqXHMqJElkZW50XCkpXHMqKVwoL3MpIHsKKwkJCQlteSAoJG5hbWVfbGVuKSA9IGxlbmd0aCgkMSk7CisKKwkJCQlteSAkY3R4ID0gJHM7CisJCQkJc3Vic3RyKCRjdHgsIDAsICRuYW1lX2xlbiArIDEsICcnKTsKKwkJCQkkY3R4ID1+IHMvXClbXlwpXSokLy87CisKKwkJCQlmb3IgbXkgJGFyZyAoc3BsaXQoL1xzKixccyovLCAkY3R4KSkgeworCQkJCQlpZiAoJGFyZyA9fiAvXig/OmNvbnN0XHMrKT8oJElkZW50KSg/OlxzKyRTcGFyc2UpKlxzKlwqKlxzKig6P1xiJElkZW50KT8kL3MgfHwgJGFyZyA9fiAvXigkSWRlbnQpJC9zKSB7CisKKwkJCQkJCXBvc3NpYmxlKCQxLCAiRDoiIC4gJHMpOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0KKworIworIyBDaGVja3Mgd2hpY2ggbWF5IGJlIGFuY2hvcmVkIGluIHRoZSBjb250ZXh0LgorIworCisjIENoZWNrIGZvciBzd2l0Y2ggKCkgYW5kIGFzc29jaWF0ZWQgY2FzZSBhbmQgZGVmYXVsdAorIyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBhdCB0aGUgc2FtZSBpbmRlbnQuCisJCWlmICgkbGluZT1+L1xic3dpdGNoXHMqXCguKlwpLykgeworCQkJbXkgJGVyciA9ICcnOworCQkJbXkgJHNlcCA9ICcnOworCQkJbXkgQGN0eCA9IGN0eF9ibG9ja19vdXRlcigkbGluZW5yLCAkcmVhbGNudCk7CisJCQlzaGlmdChAY3R4KTsKKwkJCWZvciBteSAkY3R4IChAY3R4KSB7CisJCQkJbXkgKCRjbGVuLCAkY2luZGVudCkgPSBsaW5lX3N0YXRzKCRjdHgpOworCQkJCWlmICgkY3R4ID1+IC9eXCtccyooY2FzZVxzK3xkZWZhdWx0OikvICYmCisJCQkJCQkJJGluZGVudCAhPSAkY2luZGVudCkgeworCQkJCQkkZXJyIC49ICIkc2VwJGN0eFxuIjsKKwkJCQkJJHNlcCA9ICcnOworCQkJCX0gZWxzZSB7CisJCQkJCSRzZXAgPSAiWy4uLl1cbiI7CisJCQkJfQorCQkJfQorCQkJaWYgKCRlcnIgbmUgJycpIHsKKwkJCQlFUlJPUigiU1dJVENIX0NBU0VfSU5ERU5UX0xFVkVMIiwKKwkJCQkgICAgICAic3dpdGNoIGFuZCBjYXNlIHNob3VsZCBiZSBhdCB0aGUgc2FtZSBpbmRlbnRcbiRoZXJlbGluZSRlcnIiKTsKKwkJCX0KKwkJfQorCisjIGlmL3doaWxlL2V0YyBicmFjZSBkbyBub3QgZ28gb24gbmV4dCBsaW5lLCB1bmxlc3MgZGVmaW5pbmcgYSBkbyB3aGlsZSBsb29wLAorIyBvciBpZiB0aGF0IGJyYWNlIG9uIHRoZSBuZXh0IGxpbmUgaXMgZm9yIHNvbWV0aGluZyBlbHNlCisJCWlmICgkbGluZSA9fiAvKC4qKVxiKCg/OmlmfHdoaWxlfGZvcnxzd2l0Y2gpXHMqXCh8ZG9cYnxlbHNlXGIpLyAmJiAkbGluZSAhfiAvXi5ccypcIy8pIHsKKwkJCW15ICRwcmVfY3R4ID0gIiQxJDIiOworCisJCQlteSAoJGxldmVsLCBAY3R4KSA9IGN0eF9zdGF0ZW1lbnRfbGV2ZWwoJGxpbmVuciwgJHJlYWxjbnQsIDApOworCQkJbXkgJGN0eF9jbnQgPSAkcmVhbGNudCAtICQjY3R4IC0gMTsKKwkJCW15ICRjdHggPSBqb2luKCJcbiIsIEBjdHgpOworCisJCQlteSAkY3R4X2xuID0gJGxpbmVucjsKKwkJCW15ICRjdHhfc2tpcCA9ICRyZWFsY250OworCisJCQl3aGlsZSAoJGN0eF9za2lwID4gJGN0eF9jbnQgfHwgKCRjdHhfc2tpcCA9PSAkY3R4X2NudCAmJgorCQkJCQlkZWZpbmVkICRsaW5lc1skY3R4X2xuIC0gMV0gJiYKKwkJCQkJJGxpbmVzWyRjdHhfbG4gLSAxXSA9fiAvXi0vKSkgeworCQkJCSMjcHJpbnQgIlNLSVA8JGN0eF9za2lwPiBDTlQ8JGN0eF9jbnQ+XG4iOworCQkJCSRjdHhfc2tpcC0tIGlmICghZGVmaW5lZCAkbGluZXNbJGN0eF9sbiAtIDFdIHx8ICRsaW5lc1skY3R4X2xuIC0gMV0gIX4gL14tLyk7CisJCQkJJGN0eF9sbisrOworCQkJfQorCisJCQkjcHJpbnQgInJlYWxjbnQ8JHJlYWxjbnQ+IGN0eF9jbnQ8JGN0eF9jbnQ+XG4iOworCQkJI3ByaW50ICJwcmU8JHByZV9jdHg+XG5saW5lPCRsaW5lPlxuY3R4PCRjdHg+XG5uZXh0PCRsaW5lc1skY3R4X2xuIC0gMV0+XG4iOworCisJCQlpZiAoJGN0eCAhfiAve1xzKi8gJiYgZGVmaW5lZCgkbGluZXNbJGN0eF9sbiAtMV0pICYmICRsaW5lc1skY3R4X2xuIC0gMV0gPX4gL15cK1xzKnsvKSB7CisJCQkJRVJST1IoIk9QRU5fQlJBQ0UiLAorCQkJCSAgICAgICJ0aGF0IG9wZW4gYnJhY2UgeyBzaG91bGQgYmUgb24gdGhlIHByZXZpb3VzIGxpbmVcbiIgLgorCQkJCQkiJGhlcmVcbiRjdHhcbiRyYXdsaW5lc1skY3R4X2xuIC0gMV1cbiIpOworCQkJfQorCQkJaWYgKCRsZXZlbCA9PSAwICYmICRwcmVfY3R4ICF+IC99XHMqd2hpbGVccypcKCQvICYmCisJCQkgICAgJGN0eCA9fiAvXClccypcO1xzKiQvICYmCisJCQkgICAgZGVmaW5lZCAkbGluZXNbJGN0eF9sbiAtIDFdKQorCQkJeworCQkJCW15ICgkbmxlbmd0aCwgJG5pbmRlbnQpID0gbGluZV9zdGF0cygkbGluZXNbJGN0eF9sbiAtIDFdKTsKKwkJCQlpZiAoJG5pbmRlbnQgPiAkaW5kZW50KSB7CisJCQkJCVdBUk4oIlRSQUlMSU5HX1NFTUlDT0xPTiIsCisJCQkJCSAgICAgInRyYWlsaW5nIHNlbWljb2xvbiBpbmRpY2F0ZXMgbm8gc3RhdGVtZW50cywgaW5kZW50IGltcGxpZXMgb3RoZXJ3aXNlXG4iIC4KKwkJCQkJCSIkaGVyZVxuJGN0eFxuJHJhd2xpbmVzWyRjdHhfbG4gLSAxXVxuIik7CisJCQkJfQorCQkJfQorCQl9CisKKyMgQ2hlY2sgcmVsYXRpdmUgaW5kZW50IGZvciBjb25kaXRpb25hbHMgYW5kIGJsb2Nrcy4KKwkJaWYgKCRsaW5lID1+IC9cYig/Oig/OmlmfHdoaWxlfGZvcilccypcKHxkb1xiKS8gJiYgJGxpbmUgIX4gL14uXHMqIy8gJiYgJGxpbmUgIX4gL1x9XHMqd2hpbGVccyovKSB7CisJCQlteSAoJHMsICRjKSA9ICgkc3RhdCwgJGNvbmQpOworCisJCQlzdWJzdHIoJHMsIDAsIGxlbmd0aCgkYyksICcnKTsKKworCQkJIyBNYWtlIHN1cmUgd2UgcmVtb3ZlIHRoZSBsaW5lIHByZWZpeGVzIGFzIHdlIGhhdmUKKwkJCSMgbm9uZSBvbiB0aGUgZmlyc3QgbGluZSwgYW5kIGFyZSBnb2luZyB0byByZWFkZCB0aGVtCisJCQkjIHdoZXJlIG5lY2Vzc2FyeS4KKwkJCSRzID1+IHMvXG4uL1xuL2dzOworCisJCQkjIEZpbmQgb3V0IGhvdyBsb25nIHRoZSBjb25kaXRpb25hbCBhY3R1YWxseSBpcy4KKwkJCW15IEBuZXdsaW5lcyA9ICgkYyA9fiAvXG4vZ3MpOworCQkJbXkgJGNvbmRfbGluZXMgPSAxICsgJCNuZXdsaW5lczsKKworCQkJIyBXZSB3YW50IHRvIGNoZWNrIHRoZSBmaXJzdCBsaW5lIGluc2lkZSB0aGUgYmxvY2sKKwkJCSMgc3RhcnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgY29uZGl0aW9uYWwsIHNvIHJlbW92ZToKKwkJCSMgIDEpIGFueSBibGFuayBsaW5lIHRlcm1pbmF0aW9uCisJCQkjICAyKSBhbnkgb3BlbmluZyBicmFjZSB7IG9uIGVuZCBvZiB0aGUgbGluZQorCQkJIyAgMykgYW55IGRvICguLi4pIHsKKwkJCW15ICRjb250aW51YXRpb24gPSAwOworCQkJbXkgJGNoZWNrID0gMDsKKwkJCSRzID1+IHMvXi4qXGJkb1xiLy87CisJCQkkcyA9fiBzL15ccyp7Ly87CisJCQlpZiAoJHMgPX4gcy9eXHMqXFwvLykgeworCQkJCSRjb250aW51YXRpb24gPSAxOworCQkJfQorCQkJaWYgKCRzID1+IHMvXlxzKj9cbi8vKSB7CisJCQkJJGNoZWNrID0gMTsKKwkJCQkkY29uZF9saW5lcysrOworCQkJfQorCisJCQkjIEFsc28gaWdub3JlIGEgbG9vcCBjb25zdHJ1Y3QgYXQgdGhlIGVuZCBvZiBhCisJCQkjIHByZXByb2Nlc3NvciBzdGF0ZW1lbnQuCisJCQlpZiAoKCRwcmV2bGluZSA9fiAvXi5ccyojXHMqZGVmaW5lXHMvIHx8CisJCQkgICAgJHByZXZsaW5lID1+IC9cXFxzKiQvKSAmJiAkY29udGludWF0aW9uID09IDApIHsKKwkJCQkkY2hlY2sgPSAwOworCQkJfQorCisJCQlteSAkY29uZF9wdHIgPSAtMTsKKwkJCSRjb250aW51YXRpb24gPSAwOworCQkJd2hpbGUgKCRjb25kX3B0ciAhPSAkY29uZF9saW5lcykgeworCQkJCSRjb25kX3B0ciA9ICRjb25kX2xpbmVzOworCisJCQkJIyBJZiB3ZSBzZWUgYW4gI2Vsc2UvI2VsaWYgdGhlbiB0aGUgY29kZQorCQkJCSMgaXMgbm90IGxpbmVhci4KKwkJCQlpZiAoJHMgPX4gL15ccypcI1xzKig/OmVsc2V8ZWxpZikvKSB7CisJCQkJCSRjaGVjayA9IDA7CisJCQkJfQorCisJCQkJIyBJZ25vcmU6CisJCQkJIyAgMSkgYmxhbmsgbGluZXMsIHRoZXkgc2hvdWxkIGJlIGF0IDAsCisJCQkJIyAgMikgcHJlcHJvY2Vzc29yIGxpbmVzLCBhbmQKKwkJCQkjICAzKSBsYWJlbHMuCisJCQkJaWYgKCRjb250aW51YXRpb24gfHwKKwkJCQkgICAgJHMgPX4gL15ccyo/XG4vIHx8CisJCQkJICAgICRzID1+IC9eXHMqI1xzKj8vIHx8CisJCQkJICAgICRzID1+IC9eXHMqJElkZW50XHMqOi8pIHsKKwkJCQkJJGNvbnRpbnVhdGlvbiA9ICgkcyA9fiAvXi4qP1xcXG4vKSA/IDEgOiAwOworCQkJCQlpZiAoJHMgPX4gcy9eLio/XG4vLykgeworCQkJCQkJJGNvbmRfbGluZXMrKzsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJbXkgKHVuZGVmLCAkc2luZGVudCkgPSBsaW5lX3N0YXRzKCIrIiAuICRzKTsKKwkJCW15ICRzdGF0X3JlYWwgPSByYXdfbGluZSgkbGluZW5yLCAkY29uZF9saW5lcyk7CisKKwkJCSMgQ2hlY2sgaWYgZWl0aGVyIG9mIHRoZXNlIGxpbmVzIGFyZSBtb2RpZmllZCwgZWxzZQorCQkJIyB0aGlzIGlzIG5vdCB0aGlzIHBhdGNoJ3MgZmF1bHQuCisJCQlpZiAoIWRlZmluZWQoJHN0YXRfcmVhbCkgfHwKKwkJCSAgICAkc3RhdCAhfiAvXlwrLyAmJiAkc3RhdF9yZWFsICF+IC9eXCsvKSB7CisJCQkJJGNoZWNrID0gMDsKKwkJCX0KKwkJCWlmIChkZWZpbmVkKCRzdGF0X3JlYWwpICYmICRjb25kX2xpbmVzID4gMSkgeworCQkJCSRzdGF0X3JlYWwgPSAiWy4uLl1cbiRzdGF0X3JlYWwiOworCQkJfQorCisJCQkjcHJpbnQgImxpbmU8JGxpbmU+IHByZXZsaW5lPCRwcmV2bGluZT4gaW5kZW50PCRpbmRlbnQ+IHNpbmRlbnQ8JHNpbmRlbnQ+IGNoZWNrPCRjaGVjaz4gY29udGludWF0aW9uPCRjb250aW51YXRpb24+IHM8JHM+IGNvbmRfbGluZXM8JGNvbmRfbGluZXM+IHN0YXRfcmVhbDwkc3RhdF9yZWFsPiBzdGF0PCRzdGF0PlxuIjsKKworCQkJaWYgKCRjaGVjayAmJiAoKCRzaW5kZW50ICUgOCkgIT0gMCB8fAorCQkJICAgICgkc2luZGVudCA8PSAkaW5kZW50ICYmICRzIG5lICcnKSkpIHsKKwkJCQlXQVJOKCJTVVNQRUNUX0NPREVfSU5ERU5UIiwKKwkJCQkgICAgICJzdXNwZWN0IGNvZGUgaW5kZW50IGZvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzICgkaW5kZW50LCAkc2luZGVudClcbiIgLiAkaGVyZWN1cnIgLiAiJHN0YXRfcmVhbFxuIik7CisJCQl9CisJCX0KKworCQkjIFRyYWNrIHRoZSAndmFsdWVzJyBhY3Jvc3MgY29udGV4dCBhbmQgYWRkZWQgbGluZXMuCisJCW15ICRvcGxpbmUgPSAkbGluZTsgJG9wbGluZSA9fiBzL14uLyAvOworCQlteSAoJGN1cnJfdmFsdWVzLCAkY3Vycl92YXJzKSA9CisJCQkJYW5ub3RhdGVfdmFsdWVzKCRvcGxpbmUgLiAiXG4iLCAkcHJldl92YWx1ZXMpOworCQkkY3Vycl92YWx1ZXMgPSAkcHJldl92YWx1ZXMgLiAkY3Vycl92YWx1ZXM7CisJCWlmICgkZGJnX3ZhbHVlcykgeworCQkJbXkgJG91dGxpbmUgPSAkb3BsaW5lOyAkb3V0bGluZSA9fiBzL1x0LyAvZzsKKwkJCXByaW50ICIkbGluZW5yID4gLiRvdXRsaW5lXG4iOworCQkJcHJpbnQgIiRsaW5lbnIgPiAkY3Vycl92YWx1ZXNcbiI7CisJCQlwcmludCAiJGxpbmVuciA+ICAkY3Vycl92YXJzXG4iOworCQl9CisJCSRwcmV2X3ZhbHVlcyA9IHN1YnN0cigkY3Vycl92YWx1ZXMsIC0xKTsKKworI2lnbm9yZSBsaW5lcyBub3QgYmVpbmcgYWRkZWQKKwkJaWYgKCRsaW5lPX4vXlteXCtdLykge25leHQ7fQorCisjIFRFU1Q6IGFsbG93IGRpcmVjdCB0ZXN0aW5nIG9mIHRoZSB0eXBlIG1hdGNoZXIuCisJCWlmICgkZGJnX3R5cGUpIHsKKwkJCWlmICgkbGluZSA9fiAvXi5ccyokRGVjbGFyZVxzKiQvKSB7CisJCQkJRVJST1IoIlRFU1RfVFlQRSIsCisJCQkJICAgICAgIlRFU1Q6IGlzIHR5cGVcbiIgLiAkaGVyZWN1cnIpOworCQkJfSBlbHNpZiAoJGRiZ190eXBlID4gMSAmJiAkbGluZSA9fiAvXi4rKCREZWNsYXJlKS8pIHsKKwkJCQlFUlJPUigiVEVTVF9OT1RfVFlQRSIsCisJCQkJICAgICAgIlRFU1Q6IGlzIG5vdCB0eXBlICgkMSBpcylcbiIuICRoZXJlY3Vycik7CisJCQl9CisJCQluZXh0OworCQl9CisjIFRFU1Q6IGFsbG93IGRpcmVjdCB0ZXN0aW5nIG9mIHRoZSBhdHRyaWJ1dGUgbWF0Y2hlci4KKwkJaWYgKCRkYmdfYXR0cikgeworCQkJaWYgKCRsaW5lID1+IC9eLlxzKiRNb2RpZmllclxzKiQvKSB7CisJCQkJRVJST1IoIlRFU1RfQVRUUiIsCisJCQkJICAgICAgIlRFU1Q6IGlzIGF0dHJcbiIgLiAkaGVyZWN1cnIpOworCQkJfSBlbHNpZiAoJGRiZ19hdHRyID4gMSAmJiAkbGluZSA9fiAvXi4rKCRNb2RpZmllcikvKSB7CisJCQkJRVJST1IoIlRFU1RfTk9UX0FUVFIiLAorCQkJCSAgICAgICJURVNUOiBpcyBub3QgYXR0ciAoJDEgaXMpXG4iLiAkaGVyZWN1cnIpOworCQkJfQorCQkJbmV4dDsKKwkJfQorCisjIGNoZWNrIGZvciBpbml0aWFsaXNhdGlvbiB0byBhZ2dyZWdhdGVzIG9wZW4gYnJhY2Ugb24gdGhlIG5leHQgbGluZQorCQlpZiAoJGxpbmUgPX4gL14uXHMqey8gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvKD86XnxbXj1dKT1ccyokLykgeworCQkJRVJST1IoIk9QRU5fQlJBQ0UiLAorCQkJICAgICAgInRoYXQgb3BlbiBicmFjZSB7IHNob3VsZCBiZSBvbiB0aGUgcHJldmlvdXMgbGluZVxuIiAuICRoZXJlcHJldik7CisJCX0KKworIworIyBDaGVja3Mgd2hpY2ggYXJlIGFuY2hvcmVkIG9uIHRoZSBhZGRlZCBsaW5lLgorIworCisjIGNoZWNrIGZvciBtYWxmb3JtZWQgcGF0aHMgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyAodXNlcyBSQVcgbGluZSkKKwkJaWYgKCRyYXdsaW5lID1+IG17Xi5ccypcI1xzKmluY2x1ZGVccytbPCJdKC4qKVsiPl19KSB7CisJCQlteSAkcGF0aCA9ICQxOworCQkJaWYgKCRwYXRoID1+IG17Ly99KSB7CisJCQkJRVJST1IoIk1BTEZPUk1FRF9JTkNMVURFIiwKKwkJCQkgICAgICAibWFsZm9ybWVkICNpbmNsdWRlIGZpbGVuYW1lXG4iIC4KKwkJCQkJJGhlcmVjdXJyKTsKKwkJCX0KKwkJfQorCisjIG5vIEM5OSAvLyBjb21tZW50cworCQlpZiAoJGxpbmUgPX4gbXsvL30pIHsKKwkJCUVSUk9SKCJDOTlfQ09NTUVOVFMiLAorCQkJICAgICAgImRvIG5vdCB1c2UgQzk5IC8vIGNvbW1lbnRzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCQkjIFJlbW92ZSBDOTkgY29tbWVudHMuCisJCSRsaW5lID1+IHNALy8uKkBAOworCQkkb3BsaW5lID1+IHNALy8uKkBAOworCisjIEVYUE9SVF9TWU1CT0wgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUgdGhpbmcgaXQgaXMgZXhwb3J0aW5nLCBjb25zaWRlcgorIyB0aGUgd2hvbGUgc3RhdGVtZW50LgorI3ByaW50ICJBUFcgPCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdPlxuIjsKKwkJaWYgKGRlZmluZWQgJHJlYWxsaW5lX25leHQgJiYKKwkJICAgIGV4aXN0cyAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSAmJgorCQkgICAgIWRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gJiYKKwkJICAgICgkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvIHx8CisJCSAgICAgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKCguKilcKS8pKSB7CisJCQkjIEhhbmRsZSBkZWZpbml0aW9ucyB3aGljaCBwcm9kdWNlIGlkZW50aWZpZXJzIHdpdGgKKwkJCSMgYSBwcmVmaXg6CisJCQkjICAgWFhYKGZvbyk7CisJCQkjICAgRVhQT1JUX1NZTUJPTChzb21ldGhpbmdfZm9vKTsKKwkJCW15ICRuYW1lID0gJDE7CisJCQlpZiAoJHN0YXQgPX4gL14uKFtBLVpfXSspXHMqXChccyooJElkZW50KS8gJiYKKwkJCSAgICAkbmFtZSA9fiAvXiR7SWRlbnR9XyQyLykgeworI3ByaW50ICJGT08gQyBuYW1lPCRuYW1lPlxuIjsKKwkJCQkkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSA9IDE7CisKKwkJCX0gZWxzaWYgKCRzdGF0ICF+IC8oPzoKKwkJCQlcbi59XHMqJHwKKwkJCQleLkRFRklORV8kSWRlbnRcKFxRJG5hbWVcRVwpfAorCQkJCV4uREVDTEFSRV8kSWRlbnRcKFxRJG5hbWVcRVwpfAorCQkJCV4uTElTVF9IRUFEXChcUSRuYW1lXEVcKXwKKwkJCQleLig/OiRTdG9yYWdlXHMrKT8kVHlwZVxzKlwoXHMqXCpccypcUSRuYW1lXEVccypcKVxzKlwofAorCQkJCVxiXFEkbmFtZVxFKD86XHMrJEF0dHJpYnV0ZSkqXHMqKD86O3w9fFxbfFwoKQorCQkJICAgICkveCkgeworI3ByaW50ICJGT08gQTwkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXT4gc3RhdDwkc3RhdD4gbmFtZTwkbmFtZT5cbiI7CisJCQkJJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gPSAyOworCQkJfSBlbHNlIHsKKwkJCQkkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSA9IDE7CisJCQl9CisJCX0KKwkJaWYgKCFkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvXi5ccyokLyAmJgorCQkgICAgKCRsaW5lID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8gfHwKKwkJICAgICAkbGluZSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKKyNwcmludCAiRk9PIEIgPCRsaW5lc1skbGluZW5yIC0gMV0+XG4iOworCQkJJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSA9IDI7CisJCX0KKwkJaWYgKGRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSAmJgorCQkgICAgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSA9PSAyKSB7CisJCQlXQVJOKCJFWFBPUlRfU1lNQk9MIiwKKwkJCSAgICAgIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIGdsb2JhbCBpbml0aWFsaXNlcnMuCisJCWlmICgkbGluZSA9fiAvXi4kVHlwZVxzKiRJZGVudFxzKig/OlxzKyRNb2RpZmllcikqXHMqPVxzKigwfE5VTEx8ZmFsc2UpXHMqOy8pIHsKKwkJCUVSUk9SKCJHTE9CQUxfSU5JVElBTElTRVJTIiwKKwkJCSAgICAgICJkbyBub3QgaW5pdGlhbGlzZSBnbG9iYWxzIHRvIDAgb3IgTlVMTFxuIiAuCisJCQkJJGhlcmVjdXJyKTsKKwkJfQorIyBjaGVjayBmb3Igc3RhdGljIGluaXRpYWxpc2Vycy4KKwkJaWYgKCRsaW5lID1+IC9cYnN0YXRpY1xzLio9XHMqKDB8TlVMTHxmYWxzZSlccyo7LykgeworCQkJRVJST1IoIklOSVRJQUxJU0VEX1NUQVRJQyIsCisJCQkgICAgICAiZG8gbm90IGluaXRpYWxpc2Ugc3RhdGljcyB0byAwIG9yIE5VTExcbiIgLgorCQkJCSRoZXJlY3Vycik7CisJCX0KKworIyBjaGVjayBmb3Igc3RhdGljIGNvbnN0IGNoYXIgKiBhcnJheXMuCisJCWlmICgkbGluZSA9fiAvXGJzdGF0aWNccytjb25zdFxzK2NoYXJccypcKlxzKihcdyspXHMqXFtccypcXVxzKj1ccyovKSB7CisJCQlXQVJOKCJTVEFUSUNfQ09OU1RfQ0hBUl9BUlJBWSIsCisJCQkgICAgICJzdGF0aWMgY29uc3QgY2hhciAqIGFycmF5IHNob3VsZCBwcm9iYWJseSBiZSBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0XG4iIC4KKwkJCQkkaGVyZWN1cnIpOworICAgICAgICAgICAgICAgfQorCisjIGNoZWNrIGZvciBzdGF0aWMgY2hhciBmb29bXSA9ICJiYXIiIGRlY2xhcmF0aW9ucy4KKwkJaWYgKCRsaW5lID1+IC9cYnN0YXRpY1xzK2NoYXJccysoXHcrKVxzKlxbXHMqXF1ccyo9XHMqIi8pIHsKKwkJCVdBUk4oIlNUQVRJQ19DT05TVF9DSEFSX0FSUkFZIiwKKwkJCSAgICAgInN0YXRpYyBjaGFyIGFycmF5IGRlY2xhcmF0aW9uIHNob3VsZCBwcm9iYWJseSBiZSBzdGF0aWMgY29uc3QgY2hhclxuIiAuCisJCQkJJGhlcmVjdXJyKTsKKyAgICAgICAgICAgICAgIH0KKworIyBjaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCWlmICgkbGluZSA9fiAvXGJzdHJ1Y3RccytwY2lfZGV2aWNlX2lkXHMrXHcrXHMqXFtccypcXVxzKlw9XHMqXHsvKSB7CisJCQlXQVJOKCJERUZJTkVfUENJX0RFVklDRV9UQUJMRSIsCisJCQkgICAgICJVc2UgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUgZm9yIHN0cnVjdCBwY2lfZGV2aWNlX2lkXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBuZXcgdHlwZWRlZnMsIG9ubHkgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgc3BhcnNlIGFubm90YXRpb25zCisjIG1ha2Ugc2Vuc2UuCisJCWlmICgkbGluZSA9fiAvXGJ0eXBlZGVmXHMvICYmCisJCSAgICAkbGluZSAhfiAvXGJ0eXBlZGVmXHMrJFR5cGVccypcKFxzKlwqPyRJZGVudFxzKlwpXHMqXCgvICYmCisJCSAgICAkbGluZSAhfiAvXGJ0eXBlZGVmXHMrJFR5cGVccyskSWRlbnRccypcKC8gJiYKKwkJICAgICRsaW5lICF+IC9cYiR0eXBlVHlwZWRlZnNcYi8gJiYKKwkJICAgICRsaW5lICF+IC9cYl9fYml0d2lzZSg/Ol9ffClcYi8pIHsKKwkJCVdBUk4oIk5FV19UWVBFREVGUyIsCisJCQkgICAgICJkbyBub3QgYWRkIG5ldyB0eXBlZGVmc1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyAqIGdvZXMgb24gdmFyaWFibGUgbm90IG9uIHR5cGUKKwkJIyAoY2hhcipbIGNvbnN0XSkKKwkJaWYgKCRsaW5lID1+IG17XCgkTm9ucHRyVHlwZShccyooPzokTW9kaWZpZXJcYlxzKnxcKlxzKikrKVwpfSkgeworCQkJbXkgKCRmcm9tLCAkdG8pID0gKCQxLCAkMSk7CisKKwkJCSMgU2hvdWxkIHN0YXJ0IHdpdGggYSBzcGFjZS4KKwkJCSR0byA9fiBzL14oXFMpLyAkMS87CisJCQkjIFNob3VsZCBub3QgZW5kIHdpdGggYSBzcGFjZS4KKwkJCSR0byA9fiBzL1xzKyQvLzsKKwkJCSMgJyoncyBzaG91bGQgbm90IGhhdmUgc3BhY2VzIGJldHdlZW4uCisJCQl3aGlsZSAoJHRvID1+IHMvXCpccytcKi9cKlwqLykgeworCQkJfQorCisJCQkjcHJpbnQgImZyb208JGZyb20+IHRvPCR0bz5cbiI7CisJCQlpZiAoJGZyb20gbmUgJHRvKSB7CisJCQkJRVJST1IoIlBPSU5URVJfTE9DQVRJT04iLAorCQkJCSAgICAgICJcIihmb28kZnJvbSlcIiBzaG91bGQgYmUgXCIoZm9vJHRvKVwiXG4iIC4gICRoZXJlY3Vycik7CisJCQl9CisJCX0gZWxzaWYgKCRsaW5lID1+IG17XGIkTm9ucHRyVHlwZShccyooPzokTW9kaWZpZXJcYlxzKnxcKlxzKikrKSgkSWRlbnQpfSkgeworCQkJbXkgKCRmcm9tLCAkdG8sICRpZGVudCkgPSAoJDEsICQxLCAkMik7CisKKwkJCSMgU2hvdWxkIHN0YXJ0IHdpdGggYSBzcGFjZS4KKwkJCSR0byA9fiBzL14oXFMpLyAkMS87CisJCQkjIFNob3VsZCBub3QgZW5kIHdpdGggYSBzcGFjZS4KKwkJCSR0byA9fiBzL1xzKyQvLzsKKwkJCSMgJyoncyBzaG91bGQgbm90IGhhdmUgc3BhY2VzIGJldHdlZW4uCisJCQl3aGlsZSAoJHRvID1+IHMvXCpccytcKi9cKlwqLykgeworCQkJfQorCQkJIyBNb2RpZmllcnMgc2hvdWxkIGhhdmUgc3BhY2VzLgorCQkJJHRvID1+IHMvKFxiJE1vZGlmaWVyJCkvJDEgLzsKKworCQkJI3ByaW50ICJmcm9tPCRmcm9tPiB0bzwkdG8+IGlkZW50PCRpZGVudD5cbiI7CisJCQlpZiAoJGZyb20gbmUgJHRvICYmICRpZGVudCAhfiAvXiRNb2RpZmllciQvKSB7CisJCQkJRVJST1IoIlBPSU5URVJfTE9DQVRJT04iLAorCQkJCSAgICAgICJcImZvbyR7ZnJvbX1iYXJcIiBzaG91bGQgYmUgXCJmb28ke3RvfWJhclwiXG4iIC4gICRoZXJlY3Vycik7CisJCQl9CisJCX0KKworIyAjIG5vIEJVRygpIG9yIEJVR19PTigpCisjIAkJaWYgKCRsaW5lID1+IC9cYihCVUd8QlVHX09OKVxiLykgeworIyAJCQlwcmludCAiVHJ5IHRvIHVzZSBXQVJOX09OICYgUmVjb3ZlcnkgY29kZSByYXRoZXIgdGhhbiBCVUcoKSBvciBCVUdfT04oKVxuIjsKKyMgCQkJcHJpbnQgIiRoZXJlY3VyciI7CisjIAkJCSRjbGVhbiA9IDA7CisjIAkJfQorCisJCWlmICgkbGluZSA9fiAvXGJMSU5VWF9WRVJTSU9OX0NPREVcYi8pIHsKKwkJCVdBUk4oIkxJTlVYX1ZFUlNJT05fQ09ERSIsCisJCQkgICAgICJMSU5VWF9WRVJTSU9OX0NPREUgc2hvdWxkIGJlIGF2b2lkZWQsIGNvZGUgc2hvdWxkIGJlIGZvciB0aGUgdmVyc2lvbiB0byB3aGljaCBpdCBpcyBtZXJnZWRcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIHVzZXMgb2YgcHJpbnRrX3JhdGVsaW1pdAorCQlpZiAoJGxpbmUgPX4gL1xicHJpbnRrX3JhdGVsaW1pdFxzKlwoLykgeworCQkJV0FSTigiUFJJTlRLX1JBVEVMSU1JVEVEIiwKKyJQcmVmZXIgcHJpbnRrX3JhdGVsaW1pdGVkIG9yIHByXzxsZXZlbD5fcmF0ZWxpbWl0ZWQgdG8gcHJpbnRrX3JhdGVsaW1pdFxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBwcmludGsgc2hvdWxkIHVzZSBLRVJOXyogbGV2ZWxzLiAgTm90ZSB0aGF0IGZvbGxvdyBvbiBwcmludGsncyBvbiB0aGUKKyMgc2FtZSBsaW5lIGRvIG5vdCBuZWVkIGEgbGV2ZWwsIHNvIHdlIHVzZSB0aGUgY3VycmVudCBibG9jayBjb250ZXh0CisjIHRvIHRyeSBhbmQgZmluZCBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgcHJpbnRrLiAgSW4gc3VtbWFyeSB0aGUgY3VycmVudAorIyBwcmludGsgaW5jbHVkZXMgYWxsIHByZWNlZGluZyBwcmludGsncyB3aGljaCBoYXZlIG5vIG5ld2xpbmUgb24gdGhlIGVuZC4KKyMgd2UgYXNzdW1lIHRoZSBmaXJzdCBiYWQgcHJpbnRrIGlzIHRoZSBvbmUgdG8gcmVwb3J0LgorCQlpZiAoJGxpbmUgPX4gL1xicHJpbnRrXCgoPyFLRVJOXylccyoiLykgeworCQkJbXkgJG9rID0gMDsKKwkJCWZvciAobXkgJGxuID0gJGxpbmVuciAtIDE7ICRsbiA+PSAkZmlyc3RfbGluZTsgJGxuLS0pIHsKKwkJCQkjcHJpbnQgIkNIRUNLPCRsaW5lc1skbG4gLSAxXVxuIjsKKwkJCQkjIHdlIGhhdmUgYSBwcmVjZWRpbmcgcHJpbnRrIGlmIGl0IGVuZHMKKwkJCQkjIHdpdGggIlxuIiBpZ25vcmUgaXQsIGVsc2UgaXQgaXMgdG8gYmxhbWUKKwkJCQlpZiAoJGxpbmVzWyRsbiAtIDFdID1+IG17XGJwcmludGtcKH0pIHsKKwkJCQkJaWYgKCRyYXdsaW5lc1skbG4gLSAxXSAhfiBte1xcbiJ9KSB7CisJCQkJCQkkb2sgPSAxOworCQkJCQl9CisJCQkJCWxhc3Q7CisJCQkJfQorCQkJfQorCQkJaWYgKCRvayA9PSAwKSB7CisJCQkJV0FSTigiUFJJTlRLX1dJVEhPVVRfS0VSTl9MRVZFTCIsCisJCQkJICAgICAicHJpbnRrKCkgc2hvdWxkIGluY2x1ZGUgS0VSTl8gZmFjaWxpdHkgbGV2ZWxcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgZnVuY3Rpb24gYnJhY2UgY2FuJ3QgYmUgb24gc2FtZSBsaW5lLCBleGNlcHQgZm9yICNkZWZpbmVzIG9mIGRvIHdoaWxlLAorIyBvciBpZiBjbG9zZWQgb24gc2FtZSBsaW5lCisJCWlmICgoJGxpbmU9fi8kVHlwZVxzKiRJZGVudFwoLipcKS4qXHN7LykgYW5kCisJCSAgICAhKCRsaW5lPX4vXCNccypkZWZpbmUuKmRvXHN7LykgYW5kICEoJGxpbmU9fi99LykpIHsKKwkJCUVSUk9SKCJPUEVOX0JSQUNFIiwKKwkJCSAgICAgICJvcGVuIGJyYWNlICd7JyBmb2xsb3dpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGdvIG9uIHRoZSBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgb3BlbiBicmFjZXMgZm9yIGVudW0sIHVuaW9uIGFuZCBzdHJ1Y3QgZ28gb24gdGhlIHNhbWUgbGluZS4KKwkJaWYgKCRsaW5lID1+IC9eLlxzKnsvICYmCisJCSAgICAkcHJldmxpbmUgPX4gL14uXHMqKD86dHlwZWRlZlxzKyk/KGVudW18dW5pb258c3RydWN0KSg/OlxzKyRJZGVudCk/XHMqJC8pIHsKKwkJCUVSUk9SKCJPUEVOX0JSQUNFIiwKKwkJCSAgICAgICJvcGVuIGJyYWNlICd7JyBmb2xsb3dpbmcgJDEgZ28gb24gdGhlIHNhbWUgbGluZVxuIiAuICRoZXJlcHJldik7CisJCX0KKworIyBtaXNzaW5nIHNwYWNlIGFmdGVyIHVuaW9uLCBzdHJ1Y3Qgb3IgZW51bSBkZWZpbml0aW9uCisJCWlmICgkbGluZSA9fiAvXi5ccyooPzp0eXBlZGVmXHMrKT8oZW51bXx1bmlvbnxzdHJ1Y3QpKD86XHMrJElkZW50KT8oPzpccyskSWRlbnQpP1s9XHtdLykgeworCQkgICAgV0FSTigiU1BBQ0lORyIsCisJCQkgIm1pc3Npbmcgc3BhY2UgYWZ0ZXIgJDEgZGVmaW5pdGlvblxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBjaGVjayBmb3Igc3BhY2luZyByb3VuZCBzcXVhcmUgYnJhY2tldHM7IGFsbG93ZWQ6CisjICAxLiB3aXRoIGEgdHlwZSBvbiB0aGUgbGVmdCAtLSBpbnQgW10gYTsKKyMgIDIuIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGZvciBzbGljZSBpbml0aWFsaXNlcnMgLS0gWzAuLi4xMF0gPSA1LAorIyAgMy4gaW5zaWRlIGEgY3VybHkgYnJhY2UgLS0gPSB7IFswLi4uMTBdID0gNSB9CisJCXdoaWxlICgkbGluZSA9fiAvKC4qP1xzKVxbL2cpIHsKKwkJCW15ICgkd2hlcmUsICRwcmVmaXgpID0gKCQtWzFdLCAkMSk7CisJCQlpZiAoJHByZWZpeCAhfiAvJFR5cGVccyskLyAmJgorCQkJICAgICgkd2hlcmUgIT0gMCB8fCAkcHJlZml4ICF+IC9eLlxzKyQvKSAmJgorCQkJICAgICRwcmVmaXggIX4gL3tccyskLykgeworCQkJCUVSUk9SKCJCUkFDS0VUX1NQQUNFIiwKKwkJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgb3BlbiBzcXVhcmUgYnJhY2tldCAnWydcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgY2hlY2sgZm9yIHNwYWNlcyBiZXR3ZWVuIGZ1bmN0aW9ucyBhbmQgdGhlaXIgcGFyZW50aGVzZXMuCisJCXdoaWxlICgkbGluZSA9fiAvKCRJZGVudClccytcKC9nKSB7CisJCQlteSAkbmFtZSA9ICQxOworCQkJbXkgJGN0eF9iZWZvcmUgPSBzdWJzdHIoJGxpbmUsIDAsICQtWzFdKTsKKwkJCW15ICRjdHggPSAiJGN0eF9iZWZvcmUkbmFtZSI7CisKKwkJCSMgSWdub3JlIHRob3NlIGRpcmVjdGl2ZXMgd2hlcmUgc3BhY2VzIF9hcmVfIHBlcm1pdHRlZC4KKwkJCWlmICgkbmFtZSA9fiAvXig/OgorCQkJCWlmfGZvcnx3aGlsZXxzd2l0Y2h8cmV0dXJufGNhc2V8CisJCQkJdm9sYXRpbGV8X192b2xhdGlsZV9ffAorCQkJCV9fYXR0cmlidXRlX198Zm9ybWF0fF9fZXh0ZW5zaW9uX198CisJCQkJYXNtfF9fYXNtX18pJC94KQorCQkJeworCisJCQkjIGNwcCAjZGVmaW5lIHN0YXRlbWVudHMgaGF2ZSBub24tb3B0aW9uYWwgc3BhY2VzLCBpZQorCQkJIyBpZiB0aGVyZSBpcyBhIHNwYWNlIGJldHdlZW4gdGhlIG5hbWUgYW5kIHRoZSBvcGVuCisJCQkjIHBhcmVudGhlc2lzIGl0IGlzIHNpbXBseSBub3QgYSBwYXJhbWV0ZXIgZ3JvdXAuCisJCQl9IGVsc2lmICgkY3R4X2JlZm9yZSA9fiAvXi5ccypcI1xzKmRlZmluZVxzKiQvKSB7CisKKwkJCSMgY3BwICNlbGlmIHN0YXRlbWVudCBjb25kaXRpb24gbWF5IHN0YXJ0IHdpdGggYSAoCisJCQl9IGVsc2lmICgkY3R4ID1+IC9eLlxzKlwjXHMqZWxpZlxzKiQvKSB7CisKKwkJCSMgSWYgdGhpcyB3aG9sZSB0aGluZ3MgZW5kcyB3aXRoIGEgdHlwZSBpdHMgbW9zdAorCQkJIyBsaWtlbHkgYSB0eXBlZGVmIGZvciBhIGZ1bmN0aW9uLgorCQkJfSBlbHNpZiAoJGN0eCA9fiAvJFR5cGUkLykgeworCisJCQl9IGVsc2UgeworCQkJCVdBUk4oIlNQQUNJTkciLAorCQkJCSAgICAgInNwYWNlIHByb2hpYml0ZWQgYmV0d2VlbiBmdW5jdGlvbiBuYW1lIGFuZCBvcGVuIHBhcmVudGhlc2lzICcoJ1xuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKyMgQ2hlY2sgb3BlcmF0b3Igc3BhY2luZy4KKwkJaWYgKCEoJGxpbmU9fi9cI1xzKmluY2x1ZGUvKSkgeworCQkJbXkgJG9wcyA9IHFyeworCQkJCTw8PXw+Pj18PD18Pj18PT18IT18CisJCQkJXCs9fC09fFwqPXxcLz18JT18XF49fFx8PXwmPXwKKwkJCQk9PnwtPnw8PHw+Pnw8fD58PXwhfH58CisJCQkJJiZ8XHxcfHwsfFxefFwrXCt8LS18JnxcfHxcK3wtfFwqfFwvfCV8CisJCQkJXD98OgorCQkJfXg7CisJCQlteSBAZWxlbWVudHMgPSBzcGxpdCgvKCRvcHN8OykvLCAkb3BsaW5lKTsKKwkJCW15ICRvZmYgPSAwOworCisJCQlteSAkYmxhbmsgPSBjb3B5X3NwYWNpbmcoJG9wbGluZSk7CisKKwkJCWZvciAobXkgJG4gPSAwOyAkbiA8ICQjZWxlbWVudHM7ICRuICs9IDIpIHsKKwkJCQkkb2ZmICs9IGxlbmd0aCgkZWxlbWVudHNbJG5dKTsKKworCQkJCSMgUGljayB1cCB0aGUgcHJlY2VkaW5nIGFuZCBzdWNjZWVkaW5nIGNoYXJhY3RlcnMuCisJCQkJbXkgJGNhID0gc3Vic3RyKCRvcGxpbmUsIDAsICRvZmYpOworCQkJCW15ICRjYyA9ICcnOworCQkJCWlmIChsZW5ndGgoJG9wbGluZSkgPj0gKCRvZmYgKyBsZW5ndGgoJGVsZW1lbnRzWyRuICsgMV0pKSkgeworCQkJCQkkY2MgPSBzdWJzdHIoJG9wbGluZSwgJG9mZiArIGxlbmd0aCgkZWxlbWVudHNbJG4gKyAxXSkpOworCQkJCX0KKwkJCQlteSAkY2IgPSAiJGNhJDskY2MiOworCisJCQkJbXkgJGEgPSAnJzsKKwkJCQkkYSA9ICdWJyBpZiAoJGVsZW1lbnRzWyRuXSBuZSAnJyk7CisJCQkJJGEgPSAnVycgaWYgKCRlbGVtZW50c1skbl0gPX4gL1xzJC8pOworCQkJCSRhID0gJ0MnIGlmICgkZWxlbWVudHNbJG5dID1+IC8kOyQvKTsKKwkJCQkkYSA9ICdCJyBpZiAoJGVsZW1lbnRzWyRuXSA9fiAvKFxbfFwoKSQvKTsKKwkJCQkkYSA9ICdPJyBpZiAoJGVsZW1lbnRzWyRuXSBlcSAnJyk7CisJCQkJJGEgPSAnRScgaWYgKCRjYSA9fiAvXlxzKiQvKTsKKworCQkJCW15ICRvcCA9ICRlbGVtZW50c1skbiArIDFdOworCisJCQkJbXkgJGMgPSAnJzsKKwkJCQlpZiAoZGVmaW5lZCAkZWxlbWVudHNbJG4gKyAyXSkgeworCQkJCQkkYyA9ICdWJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gbmUgJycpOworCQkJCQkkYyA9ICdXJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gPX4gL15ccy8pOworCQkJCQkkYyA9ICdDJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gPX4gL14kOy8pOworCQkJCQkkYyA9ICdCJyBpZiAoJGVsZW1lbnRzWyRuICsgMl0gPX4gL14oXCl8XF18OykvKTsKKwkJCQkJJGMgPSAnTycgaWYgKCRlbGVtZW50c1skbiArIDJdIGVxICcnKTsKKwkJCQkJJGMgPSAnRScgaWYgKCRlbGVtZW50c1skbiArIDJdID1+IC9eXHMqXFwkLyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJJGMgPSAnRSc7CisJCQkJfQorCisJCQkJbXkgJGN0eCA9ICIke2F9eCR7Y30iOworCisJCQkJbXkgJGF0ID0gIihjdHg6JGN0eCkiOworCisJCQkJbXkgJHB0ciA9IHN1YnN0cigkYmxhbmssIDAsICRvZmYpIC4gIl4iOworCQkJCW15ICRoZXJlcHRyID0gIiRoZXJlbGluZSRwdHJcbiI7CisKKwkJCQkjIFB1bGwgb3V0IHRoZSB2YWx1ZSBvZiB0aGlzIG9wZXJhdG9yLgorCQkJCW15ICRvcF90eXBlID0gc3Vic3RyKCRjdXJyX3ZhbHVlcywgJG9mZiArIDEsIDEpOworCisJCQkJIyBHZXQgdGhlIGZ1bGwgb3BlcmF0b3IgdmFyaWFudC4KKwkJCQlteSAkb3B2ID0gJG9wIC4gc3Vic3RyKCRjdXJyX3ZhcnMsICRvZmYsIDEpOworCisJCQkJIyBJZ25vcmUgb3BlcmF0b3JzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLgorCQkJCWlmICgkb3BfdHlwZSBuZSAnVicgJiYKKwkJCQkgICAgJGNhID1+IC9ccyQvICYmICRjYyA9fiAvXlxzKiwvKSB7CisKKyMJCQkJIyBJZ25vcmUgY29tbWVudHMKKyMJCQkJfSBlbHNpZiAoJG9wID1+IC9eJDsrJC8pIHsKKworCQkJCSMgOyBzaG91bGQgaGF2ZSBlaXRoZXIgdGhlIGVuZCBvZiBsaW5lIG9yIGEgc3BhY2Ugb3IgXCBhZnRlciBpdAorCQkJCX0gZWxzaWYgKCRvcCBlcSAnOycpIHsKKwkJCQkJaWYgKCRjdHggIX4gLy54W1dFQkNdLyAmJgorCQkJCQkgICAgJGNjICF+IC9eXFwvICYmICRjYyAhfiAvXjsvKSB7CisJCQkJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkJCQkgICAgICAic3BhY2UgcmVxdWlyZWQgYWZ0ZXIgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCX0KKworCQkJCSMgLy8gaXMgYSBjb21tZW50CisJCQkJfSBlbHNpZiAoJG9wIGVxICcvLycpIHsKKworCQkJCSMgTm8gc3BhY2VzIGZvcjoKKwkJCQkjICAgLT4KKwkJCQkjICAgOiAgIHdoZW4gcGFydCBvZiBhIGJpdGZpZWxkCisJCQkJfSBlbHNpZiAoJG9wIGVxICctPicgfHwgJG9wdiBlcSAnOkInKSB7CisJCQkJCWlmICgkY3R4ID1+IC9XeC58LnhXLykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlcyBwcm9oaWJpdGVkIGFyb3VuZCB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJfQorCisJCQkJIyAsIG11c3QgaGF2ZSBhIHNwYWNlIG9uIHRoZSByaWdodC4KKwkJCQl9IGVsc2lmICgkb3AgZXEgJywnKSB7CisJCQkJCWlmICgkY3R4ICF+IC8ueFtXRUNdLyAmJiAkY2MgIX4gL159LykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlIHJlcXVpcmVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQl9CisKKwkJCQkjICcqJyBhcyBwYXJ0IG9mIGEgdHlwZSBkZWZpbml0aW9uIC0tIHJlcG9ydGVkIGFscmVhZHkuCisJCQkJfSBlbHNpZiAoJG9wdiBlcSAnKl8nKSB7CisJCQkJCSN3YXJuICInKicgaXMgcGFydCBvZiB0eXBlXG4iOworCisJCQkJIyB1bmFyeSBvcGVyYXRvcnMgc2hvdWxkIGhhdmUgYSBzcGFjZSBiZWZvcmUgYW5kCisJCQkJIyBub25lIGFmdGVyLiAgTWF5IGJlIGxlZnQgYWRqYWNlbnQgdG8gYW5vdGhlcgorCQkJCSMgdW5hcnkgb3BlcmF0b3IsIG9yIGEgY2FzdAorCQkJCX0gZWxzaWYgKCRvcCBlcSAnIScgfHwgJG9wIGVxICd+JyB8fAorCQkJCQkgJG9wdiBlcSAnKlUnIHx8ICRvcHYgZXEgJy1VJyB8fAorCQkJCQkgJG9wdiBlcSAnJlUnIHx8ICRvcHYgZXEgJyYmVScpIHsKKwkJCQkJaWYgKCRjdHggIX4gL1tXRUJDXXguLyAmJiAkY2EgIX4gLyg/OlwpfCF8fnxcKnwtfFwmfFx8fFwrXCt8XC1cLXxceykkLykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlIHJlcXVpcmVkIGJlZm9yZSB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJfQorCQkJCQlpZiAoJG9wIGVxICcqJyAmJiAkY2MgPX4vXHMqJE1vZGlmaWVyXGIvKSB7CisJCQkJCQkjIEEgdW5hcnkgJyonIG1heSBiZSBjb25zdAorCisJCQkJCX0gZWxzaWYgKCRjdHggPX4gLy54Vy8pIHsKKwkJCQkJCUVSUk9SKCJTUEFDSU5HIiwKKwkJCQkJCSAgICAgICJzcGFjZSBwcm9oaWJpdGVkIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQl9CisKKwkJCQkjIHVuYXJ5ICsrIGFuZCB1bmFyeSAtLSBhcmUgYWxsb3dlZCBubyBzcGFjZSBvbiBvbmUgc2lkZS4KKwkJCQl9IGVsc2lmICgkb3AgZXEgJysrJyBvciAkb3AgZXEgJy0tJykgeworCQkJCQlpZiAoJGN0eCAhfiAvW1dFT0JDXXhbXlddLyAmJiAkY3R4ICF+IC9bXlddeFtXT0JFQ10vKSB7CisJCQkJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkJCQkgICAgICAic3BhY2UgcmVxdWlyZWQgb25lIHNpZGUgb2YgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCX0KKwkJCQkJaWYgKCRjdHggPX4gL1d4W0JFXS8gfHwKKwkJCQkJICAgICgkY3R4ID1+IC9XeC4vICYmICRjYyA9fiAvXjsvKSkgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlIHByb2hpYml0ZWQgYmVmb3JlIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQl9CisJCQkJCWlmICgkY3R4ID1+IC9FeFcvKSB7CisJCQkJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBhZnRlciB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKKwkJCQkJfQorCisKKwkJCQkjIDw8IGFuZCA+PiBtYXkgZWl0aGVyIGhhdmUgb3Igbm90IGhhdmUgc3BhY2VzIGJvdGggc2lkZXMKKwkJCQl9IGVsc2lmICgkb3AgZXEgJzw8JyBvciAkb3AgZXEgJz4+JyBvcgorCQkJCQkgJG9wIGVxICcmJyBvciAkb3AgZXEgJ14nIG9yICRvcCBlcSAnfCcgb3IKKwkJCQkJICRvcCBlcSAnKycgb3IgJG9wIGVxICctJyBvcgorCQkJCQkgJG9wIGVxICcqJyBvciAkb3AgZXEgJy8nIG9yCisJCQkJCSAkb3AgZXEgJyUnKQorCQkJCXsKKwkJCQkJaWYgKCRjdHggPX4gL1d4W15XQ0VdfFteV0NFXXhXLykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgIm5lZWQgY29uc2lzdGVudCBzcGFjaW5nIGFyb3VuZCAnJG9wJyAkYXRcbiIgLgorCQkJCQkJCSRoZXJlcHRyKTsKKwkJCQkJfQorCisJCQkJIyBBIGNvbG9uIG5lZWRzIG5vIHNwYWNlcyBiZWZvcmUgd2hlbiBpdCBpcworCQkJCSMgdGVybWluYXRpbmcgYSBjYXNlIHZhbHVlIG9yIGEgbGFiZWwuCisJCQkJfSBlbHNpZiAoJG9wdiBlcSAnOkMnIHx8ICRvcHYgZXEgJzpMJykgeworCQkJCQlpZiAoJGN0eCA9fiAvV3guLykgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlIHByb2hpYml0ZWQgYmVmb3JlIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOworCQkJCQl9CisKKwkJCQkjIEFsbCB0aGUgb3RoZXJzIG5lZWQgc3BhY2VzIGJvdGggc2lkZXMuCisJCQkJfSBlbHNpZiAoJGN0eCAhfiAvW0VXQ114W0NXRV0vKSB7CisJCQkJCW15ICRvayA9IDA7CisKKwkJCQkJIyBJZ25vcmUgZW1haWwgYWRkcmVzc2VzIDxmb29AYmFyPgorCQkJCQlpZiAoKCRvcCBlcSAnPCcgJiYKKwkJCQkJICAgICAkY2MgPX4gL15cUytcQFxTKz4vKSB8fAorCQkJCQkgICAgKCRvcCBlcSAnPicgJiYKKwkJCQkJICAgICAkY2EgPX4gLzxcUytcQFxTKyQvKSkKKwkJCQkJeworCQkJCQkJJG9rID0gMTsKKwkJCQkJfQorCisJCQkJCSMgSWdub3JlID86CisJCQkJCWlmICgoJG9wdiBlcSAnOk8nICYmICRjYSA9fiAvXD8kLykgfHwKKwkJCQkJICAgICgkb3AgZXEgJz8nICYmICRjYyA9fiAvXjovKSkgeworCQkJCQkJJG9rID0gMTsKKwkJCQkJfQorCisJCQkJCWlmICgkb2sgPT0gMCkgeworCQkJCQkJRVJST1IoIlNQQUNJTkciLAorCQkJCQkJICAgICAgInNwYWNlcyByZXF1aXJlZCBhcm91bmQgdGhhdCAnJG9wJyAkYXRcbiIgLiAkaGVyZXB0cik7CisJCQkJCX0KKwkJCQl9CisJCQkJJG9mZiArPSBsZW5ndGgoJGVsZW1lbnRzWyRuICsgMV0pOworCQkJfQorCQl9CisKKyMgY2hlY2sgZm9yIG11bHRpcGxlIGFzc2lnbm1lbnRzCisJCWlmICgkbGluZSA9fiAvXi5ccyokTHZhbFxzKj1ccyokTHZhbFxzKj0oPyE9KS8pIHsKKwkJCUNISygiTVVMVElQTEVfQVNTSUdOTUVOVFMiLAorCQkJICAgICJtdWx0aXBsZSBhc3NpZ25tZW50cyBzaG91bGQgYmUgYXZvaWRlZFxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyMgIyBjaGVjayBmb3IgbXVsdGlwbGUgZGVjbGFyYXRpb25zLCBhbGxvd2luZyBmb3IgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbgorIyMgIyBjb250aW51YXRpb24uCisjIyAJCWlmICgkbGluZSA9fiAvXi5ccyokVHlwZVxzKyRJZGVudCg/OlxzKj1bXix7XSopP1xzKixccyokSWRlbnQuKi8gJiYKKyMjIAkJICAgICRsaW5lICF+IC9eLlxzKiRUeXBlXHMrJElkZW50KD86XHMqPVteLHtdKik/XHMqLFxzKiRUeXBlXHMqJElkZW50LiovKSB7CisjIworIyMgCQkJIyBSZW1vdmUgYW55IGJyYWNrZXRlZCBzZWN0aW9ucyB0byBlbnN1cmUgd2UgZG8gbm90CisjIyAJCQkjIGZhbHNseSByZXBvcnQgdGhlIHBhcmFtZXRlcnMgb2YgZnVuY3Rpb25zLgorIyMgCQkJbXkgJGxuID0gJGxpbmU7CisjIyAJCQl3aGlsZSAoJGxuID1+IHMvXChbXlwoXCldKlwpLy9nKSB7CisjIyAJCQl9CisjIyAJCQlpZiAoJGxuID1+IC8sLykgeworIyMgCQkJCVdBUk4oIk1VTFRJUExFX0RFQ0xBUkFUSU9OIiwKKyMjCQkJCSAgICAgImRlY2xhcmluZyBtdWx0aXBsZSB2YXJpYWJsZXMgdG9nZXRoZXIgc2hvdWxkIGJlIGF2b2lkZWRcbiIgLiAkaGVyZWN1cnIpOworIyMgCQkJfQorIyMgCQl9CisKKyNuZWVkIHNwYWNlIGJlZm9yZSBicmFjZSBmb2xsb3dpbmcgaWYsIHdoaWxlLCBldGMKKwkJaWYgKCgkbGluZSA9fiAvXCguKlwpey8gJiYgJGxpbmUgIX4gL1woJFR5cGVcKXsvKSB8fAorCQkgICAgJGxpbmUgPX4gL2Rvey8pIHsKKwkJCUVSUk9SKCJTUEFDSU5HIiwKKwkJCSAgICAgICJzcGFjZSByZXF1aXJlZCBiZWZvcmUgdGhlIG9wZW4gYnJhY2UgJ3snXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNsb3NpbmcgYnJhY2Ugc2hvdWxkIGhhdmUgYSBzcGFjZSBmb2xsb3dpbmcgaXQgd2hlbiBpdCBoYXMgYW55dGhpbmcKKyMgb24gdGhlIGxpbmUKKwkJaWYgKCRsaW5lID1+IC99KD8hKD86LHw7fFwpKSlcUy8pIHsKKwkJCUVSUk9SKCJTUEFDSU5HIiwKKwkJCSAgICAgICJzcGFjZSByZXF1aXJlZCBhZnRlciB0aGF0IGNsb3NlIGJyYWNlICd9J1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBjaGVjayBzcGFjaW5nIG9uIHNxdWFyZSBicmFja2V0cworCQlpZiAoJGxpbmUgPX4gL1xbXHMvICYmICRsaW5lICF+IC9cW1xzKiQvKSB7CisJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBhZnRlciB0aGF0IG9wZW4gc3F1YXJlIGJyYWNrZXQgJ1snXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCQlpZiAoJGxpbmUgPX4gL1xzXF0vKSB7CisJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgdGhhdCBjbG9zZSBzcXVhcmUgYnJhY2tldCAnXSdcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgc3BhY2luZyBvbiBwYXJlbnRoZXNlcworCQlpZiAoJGxpbmUgPX4gL1woXHMvICYmICRsaW5lICF+IC9cKFxzKig/OlxcKT8kLyAmJgorCQkgICAgJGxpbmUgIX4gL2ZvclxzKlwoXHMrOy8pIHsKKwkJCUVSUk9SKCJTUEFDSU5HIiwKKwkJCSAgICAgICJzcGFjZSBwcm9oaWJpdGVkIGFmdGVyIHRoYXQgb3BlbiBwYXJlbnRoZXNpcyAnKCdcbiIgLiAkaGVyZWN1cnIpOworCQl9CisJCWlmICgkbGluZSA9fiAvKFxzKylcKS8gJiYgJGxpbmUgIX4gL14uXHMqXCkvICYmCisJCSAgICAkbGluZSAhfiAvZm9yXHMqXCguKjtccytcKS8gJiYKKwkJICAgICRsaW5lICF+IC86XHMrXCkvKSB7CisJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkgICAgICAic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgdGhhdCBjbG9zZSBwYXJlbnRoZXNpcyAnKSdcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyNnb3RvIGxhYmVscyBhcmVuJ3QgaW5kZW50ZWQsIGFsbG93IGEgc2luZ2xlIHNwYWNlIGhvd2V2ZXIKKwkJaWYgKCRsaW5lPX4vXi5ccytbQS1aYS16XGRfXSs6KD8hWzAtOV0rKS8gYW5kCisJCSAgICEoJGxpbmU9fi9eLiBbQS1aYS16XGRfXSs6LykgYW5kICEoJGxpbmU9fi9eLlxzK2RlZmF1bHQ6LykpIHsKKwkJCVdBUk4oIklOREVOVEVEX0xBQkVMIiwKKwkJCSAgICAgImxhYmVscyBzaG91bGQgbm90IGJlIGluZGVudGVkXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIFJldHVybiBpcyBub3QgYSBmdW5jdGlvbi4KKwkJaWYgKGRlZmluZWQoJHN0YXQpICYmICRzdGF0ID1+IC9eLlxzKnJldHVybihccyopKFwoLiopOy9zKSB7CisJCQlteSAkc3BhY2luZyA9ICQxOworCQkJbXkgJHZhbHVlID0gJDI7CisKKwkJCSMgRmxhdHRlbiBhbnkgcGFyZW50aGVzZXMKKwkJCSR2YWx1ZSA9fiBzL1woLyBcKC9nOworCQkJJHZhbHVlID1+IHMvXCkvXCkgL2c7CisJCQl3aGlsZSAoJHZhbHVlID1+IHMvXFtbXlx7XH1dKlxdLzEvIHx8CisJCQkgICAgICAgJHZhbHVlICF+IC8oPzokSWRlbnR8LT8kQ29uc3RhbnQpXHMqCisJCQkJCSAgICAgJENvbXBhcmVccyoKKwkJCQkJICAgICAoPzokSWRlbnR8LT8kQ29uc3RhbnQpL3ggJiYKKwkJCSAgICAgICAkdmFsdWUgPX4gcy9cKFteXChcKV0qXCkvMS8pIHsKKwkJCX0KKyNwcmludCAidmFsdWU8JHZhbHVlPlxuIjsKKwkJCWlmICgkdmFsdWUgPX4gL15ccyooPzokSWRlbnR8LT8kQ29uc3RhbnQpXHMqJC8pIHsKKwkJCQlFUlJPUigiUkVUVVJOX1BBUkVOVEhFU0VTIiwKKwkJCQkgICAgICAicmV0dXJuIGlzIG5vdCBhIGZ1bmN0aW9uLCBwYXJlbnRoZXNlcyBhcmUgbm90IHJlcXVpcmVkXG4iIC4gJGhlcmVjdXJyKTsKKworCQkJfSBlbHNpZiAoJHNwYWNpbmcgIX4gL1xzKy8pIHsKKwkJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkJICAgICAgInNwYWNlIHJlcXVpcmVkIGJlZm9yZSB0aGUgb3BlbiBwYXJlbnRoZXNpcyAnKCdcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisjIFJldHVybiBvZiB3aGF0IGFwcGVhcnMgdG8gYmUgYW4gZXJybm8gc2hvdWxkIG5vcm1hbGx5IGJlIC0ndmUKKwkJaWYgKCRsaW5lID1+IC9eLlxzKnJldHVyblxzKihFW0EtWl0qKVxzKjsvKSB7CisJCQlteSAkbmFtZSA9ICQxOworCQkJaWYgKCRuYW1lIG5lICdFT0YnICYmICRuYW1lIG5lICdFUlJPUicpIHsKKwkJCQlXQVJOKCJVU0VfTkVHQVRJVkVfRVJSTk8iLAorCQkJCSAgICAgInJldHVybiBvZiBhbiBlcnJubyBzaG91bGQgdHlwaWNhbGx5IGJlIC12ZSAocmV0dXJuIC0kMSlcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgdHlwZWNhc3RzIG9uIG1pbi9tYXggY291bGQgYmUgbWluX3QvbWF4X3QKKwkJaWYgKCRsaW5lID1+IC9eXCsoPzouKj8pXGIobWlufG1heClccypcKCRUeXBlY2FzdHswLDF9KCRMdmFsT3JGdW5jKVxzKixccyokVHlwZWNhc3R7MCwxfSgkTHZhbE9yRnVuYylccypcKS8pIHsKKwkJCWlmIChkZWZpbmVkICQyIHx8IGRlZmluZWQgJDgpIHsKKwkJCQlteSAkY2FsbCA9ICQxOworCQkJCW15ICRjYXN0MSA9IGRlcGFyZW50aGVzaXplKCQyKTsKKwkJCQlteSAkYXJnMSA9ICQzOworCQkJCW15ICRjYXN0MiA9IGRlcGFyZW50aGVzaXplKCQ4KTsKKwkJCQlteSAkYXJnMiA9ICQ5OworCQkJCW15ICRjYXN0OworCisJCQkJaWYgKCRjYXN0MSBuZSAiIiAmJiAkY2FzdDIgbmUgIiIpIHsKKwkJCQkJJGNhc3QgPSAiJGNhc3QxIG9yICRjYXN0MiI7CisJCQkJfSBlbHNpZiAoJGNhc3QxIG5lICIiKSB7CisJCQkJCSRjYXN0ID0gJGNhc3QxOworCQkJCX0gZWxzZSB7CisJCQkJCSRjYXN0ID0gJGNhc3QyOworCQkJCX0KKwkJCQlXQVJOKCJNSU5NQVgiLAorCQkJCSAgICAgIiRjYWxsKCkgc2hvdWxkIHByb2JhYmx5IGJlICR7Y2FsbH1fdCgkY2FzdCwgJGFyZzEsICRhcmcyKVxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKworIyBOZWVkIGEgc3BhY2UgYmVmb3JlIG9wZW4gcGFyZW50aGVzaXMgYWZ0ZXIgaWYsIHdoaWxlIGV0YworCQlpZiAoJGxpbmU9fi9cYihpZnx3aGlsZXxmb3J8c3dpdGNoKVwoLykgeworCQkJRVJST1IoIlNQQUNJTkciLCAic3BhY2UgcmVxdWlyZWQgYmVmb3JlIHRoZSBvcGVuIHBhcmVudGhlc2lzICcoJ1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBDaGVjayBmb3IgaWxsZWdhbCBhc3NpZ25tZW50IGluIGlmIGNvbmRpdGlvbmFsIC0tIGFuZCBjaGVjayBmb3IgdHJhaWxpbmcKKyMgc3RhdGVtZW50cyBhZnRlciB0aGUgY29uZGl0aW9uYWwuCisJCWlmICgkbGluZSA9fiAvZG9ccyooPyF7KS8pIHsKKwkJCW15ICgkc3RhdF9uZXh0KSA9IGN0eF9zdGF0ZW1lbnRfYmxvY2soJGxpbmVfbnJfbmV4dCwKKwkJCQkJCSRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KTsKKwkJCSRzdGF0X25leHQgPX4gcy9cbi4vXG4gL2c7CisJCQkjI3ByaW50ICJzdGF0PCRzdGF0PiBzdGF0X25leHQ8JHN0YXRfbmV4dD5cbiI7CisKKwkJCWlmICgkc3RhdF9uZXh0ID1+IC9eXHMqd2hpbGVcYi8pIHsKKwkJCQkjIElmIHRoZSBzdGF0ZW1lbnQgY2FycmllcyBsZWFkaW5nIG5ld2xpbmVzLAorCQkJCSMgdGhlbiBjb3VudCB0aG9zZSBhcyBvZmZzZXRzLgorCQkJCW15ICgkd2hpdGVzcGFjZSkgPQorCQkJCQkoJHN0YXRfbmV4dCA9fiAvXigoPzpccypcblsrLV0pKlxzKikvcyk7CisJCQkJbXkgJG9mZnNldCA9CisJCQkJCXN0YXRlbWVudF9yYXdsaW5lcygkd2hpdGVzcGFjZSkgLSAxOworCisJCQkJJHN1cHByZXNzX3doaWxldHJhaWxlcnN7JGxpbmVfbnJfbmV4dCArCisJCQkJCQkJCSRvZmZzZXR9ID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoIWRlZmluZWQgJHN1cHByZXNzX3doaWxldHJhaWxlcnN7JGxpbmVucn0gJiYKKwkJICAgICRsaW5lID1+IC9cYig/OmlmfHdoaWxlfGZvcilccypcKC8gJiYgJGxpbmUgIX4gL14uXHMqIy8pIHsKKwkJCW15ICgkcywgJGMpID0gKCRzdGF0LCAkY29uZCk7CisKKwkJCWlmICgkYyA9fiAvXGJpZlxzKlwoLipbXjw+IT1dPVtePV0uKi9zKSB7CisJCQkJRVJST1IoIkFTU0lHTl9JTl9JRiIsCisJCQkJICAgICAgImRvIG5vdCB1c2UgYXNzaWdubWVudCBpbiBpZiBjb25kaXRpb25cbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCisJCQkjIEZpbmQgb3V0IHdoYXQgaXMgb24gdGhlIGVuZCBvZiB0aGUgbGluZSBhZnRlciB0aGUKKwkJCSMgY29uZGl0aW9uYWwuCisJCQlzdWJzdHIoJHMsIDAsIGxlbmd0aCgkYyksICcnKTsKKwkJCSRzID1+IHMvXG4uKi8vZzsKKwkJCSRzID1+IHMvJDsvL2c7IAkjIFJlbW92ZSBhbnkgY29tbWVudHMKKwkJCWlmIChsZW5ndGgoJGMpICYmICRzICF+IC9eXHMqez9ccypcXCpccyokLyAmJgorCQkJICAgICRjICF+IC99XHMqd2hpbGVccyovKQorCQkJeworCQkJCSMgRmluZCBvdXQgaG93IGxvbmcgdGhlIGNvbmRpdGlvbmFsIGFjdHVhbGx5IGlzLgorCQkJCW15IEBuZXdsaW5lcyA9ICgkYyA9fiAvXG4vZ3MpOworCQkJCW15ICRjb25kX2xpbmVzID0gMSArICQjbmV3bGluZXM7CisJCQkJbXkgJHN0YXRfcmVhbCA9ICcnOworCisJCQkJJHN0YXRfcmVhbCA9IHJhd19saW5lKCRsaW5lbnIsICRjb25kX2xpbmVzKQorCQkJCQkJCS4gIlxuIiBpZiAoJGNvbmRfbGluZXMpOworCQkJCWlmIChkZWZpbmVkKCRzdGF0X3JlYWwpICYmICRjb25kX2xpbmVzID4gMSkgeworCQkJCQkkc3RhdF9yZWFsID0gIlsuLi5dXG4kc3RhdF9yZWFsIjsKKwkJCQl9CisKKwkJCQlFUlJPUigiVFJBSUxJTkdfU1RBVEVNRU5UUyIsCisJCQkJICAgICAgInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuICRoZXJlY3VyciAuICRzdGF0X3JlYWwpOworCQkJfQorCQl9CisKKyMgQ2hlY2sgZm9yIGJpdHdpc2UgdGVzdHMgd3JpdHRlbiBhcyBib29sZWFuCisJCWlmICgkbGluZSA9fiAvCisJCQkoPzoKKwkJCQkoPzpcW3xcKHxcJlwmfFx8XHwpCisJCQkJXHMqMFt4WF1bMC05XStccyoKKwkJCQkoPzpcJlwmfFx8XHwpCisJCQl8CisJCQkJKD86XCZcJnxcfFx8KQorCQkJCVxzKjBbeFhdWzAtOV0rXHMqCisJCQkJKD86XCZcJnxcfFx8fFwpfFxdKQorCQkJKS94KQorCQl7CisJCQlXQVJOKCJIRVhBREVDSU1BTF9CT09MRUFOX1RFU1QiLAorCQkJICAgICAiYm9vbGVhbiB0ZXN0IHdpdGggaGV4YWRlY2ltYWwsIHBlcmhhcHMganVzdCAxIFwmIG9yIFx8P1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBpZiBhbmQgZWxzZSBzaG91bGQgbm90IGhhdmUgZ2VuZXJhbCBzdGF0ZW1lbnRzIGFmdGVyIGl0CisJCWlmICgkbGluZSA9fiAvXi5ccyooPzp9XHMqKT9lbHNlXGIoLiopLykgeworCQkJbXkgJHMgPSAkMTsKKwkJCSRzID1+IHMvJDsvL2c7IAkjIFJlbW92ZSBhbnkgY29tbWVudHMKKwkJCWlmICgkcyAhfiAvXlxzKig/OlxzaWZ8KD86e3wpXHMqXFw/XHMqJCkvKSB7CisJCQkJRVJST1IoIlRSQUlMSU5HX1NUQVRFTUVOVFMiLAorCQkJCSAgICAgICJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisjIGlmIHNob3VsZCBub3QgY29udGludWUgYSBicmFjZQorCQlpZiAoJGxpbmUgPX4gL31ccyppZlxiLykgeworCQkJRVJST1IoIlRSQUlMSU5HX1NUQVRFTUVOVFMiLAorCQkJICAgICAgInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuCisJCQkJJGhlcmVjdXJyKTsKKwkJfQorIyBjYXNlIGFuZCBkZWZhdWx0IHNob3VsZCBub3QgaGF2ZSBnZW5lcmFsIHN0YXRlbWVudHMgYWZ0ZXIgdGhlbQorCQlpZiAoJGxpbmUgPX4gL14uXHMqKD86Y2FzZVxzKi4qfGRlZmF1bHRccyopOi9nICYmCisJCSAgICAkbGluZSAhfiAvXEcoPzoKKwkJCSg/OlxzKiQ7KikoPzpccyp7KT8oPzpccyokOyopKD86XHMqXFwpP1xzKiR8CisJCQlccypyZXR1cm5ccysKKwkJICAgICkveGcpCisJCXsKKwkJCUVSUk9SKCJUUkFJTElOR19TVEFURU1FTlRTIiwKKwkJCSAgICAgICJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKwkJIyBDaGVjayBmb3IgfTxubD5lbHNlIHssIHRoZXNlIG11c3QgYmUgYXQgdGhlIHNhbWUKKwkJIyBpbmRlbnQgbGV2ZWwgdG8gYmUgcmVsZXZhbnQgdG8gZWFjaCBvdGhlci4KKwkJaWYgKCRwcmV2bGluZT1+L31ccyokLyBhbmQgJGxpbmU9fi9eLlxzKmVsc2VccyovIGFuZAorCQkJCQkJJHByZXZpbmRlbnQgPT0gJGluZGVudCkgeworCQkJRVJST1IoIkVMU0VfQUZURVJfQlJBQ0UiLAorCQkJICAgICAgImVsc2Ugc2hvdWxkIGZvbGxvdyBjbG9zZSBicmFjZSAnfSdcbiIgLiAkaGVyZXByZXYpOworCQl9CisKKwkJaWYgKCRwcmV2bGluZT1+L31ccyokLyBhbmQgJGxpbmU9fi9eLlxzKndoaWxlXHMqLyBhbmQKKwkJCQkJCSRwcmV2aW5kZW50ID09ICRpbmRlbnQpIHsKKwkJCW15ICgkcywgJGMpID0gY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkcmVhbGNudCwgMCk7CisKKwkJCSMgRmluZCBvdXQgd2hhdCBpcyBvbiB0aGUgZW5kIG9mIHRoZSBsaW5lIGFmdGVyIHRoZQorCQkJIyBjb25kaXRpb25hbC4KKwkJCXN1YnN0cigkcywgMCwgbGVuZ3RoKCRjKSwgJycpOworCQkJJHMgPX4gcy9cbi4qLy9nOworCisJCQlpZiAoJHMgPX4gL15ccyo7LykgeworCQkJCUVSUk9SKCJXSElMRV9BRlRFUl9CUkFDRSIsCisJCQkJICAgICAgIndoaWxlIHNob3VsZCBmb2xsb3cgY2xvc2UgYnJhY2UgJ30nXG4iIC4gJGhlcmVwcmV2KTsKKwkJCX0KKwkJfQorCisjc3R1ZGx5IGNhcHMsIGNvbW1lbnRlZCBvdXQgdW50aWwgZmlndXJlIG91dCBob3cgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1c2Ugb2YgZXhpc3RpbmcgYW5kIGFkZGluZyBuZXcKKyMJCWlmICgoJGxpbmU9fi9bXHdfXVthLXpcZF0rW0EtWl0vKSBhbmQgISgkbGluZT1+L3ByaW50LykpIHsKKyMJCSAgICBwcmludCAiTm8gc3R1ZGx5IGNhcHMsIHVzZSBfXG4iOworIwkJICAgIHByaW50ICIkaGVyZWN1cnIiOworIwkJICAgICRjbGVhbiA9IDA7CisjCQl9CisKKyNubyBzcGFjZXMgYWxsb3dlZCBhZnRlciBcIGluIGRlZmluZQorCQlpZiAoJGxpbmU9fi9cI1xzKmRlZmluZS4qXFxccyQvKSB7CisJCQlXQVJOKCJXSElURVNQQUNFX0FGVEVSX0xJTkVfQ09OVElOVUFUSU9OIiwKKwkJCSAgICAgIldoaXRlcHNwYWNlIGFmdGVyIFxcIG1ha2VzIG5leHQgbGluZXMgdXNlbGVzc1xuIiAuICRoZXJlY3Vycik7CisJCX0KKworI3dhcm4gaWYgPGFzbS9mb28uaD4gaXMgI2luY2x1ZGVkIGFuZCA8bGludXgvZm9vLmg+IGlzIGF2YWlsYWJsZSAodXNlcyBSQVcgbGluZSkKKwkJaWYgKCR0cmVlICYmICRyYXdsaW5lID1+IG17Xi5ccypcI1xzKmluY2x1ZGVccypcPGFzbVwvKC4qKVwuaFw+fSkgeworCQkJbXkgJGZpbGUgPSAiJDEuaCI7CisJCQlteSAkY2hlY2tmaWxlID0gImluY2x1ZGUvbGludXgvJGZpbGUiOworCQkJaWYgKC1mICIkcm9vdC8kY2hlY2tmaWxlIiAmJgorCQkJICAgICRyZWFsZmlsZSBuZSAkY2hlY2tmaWxlICYmCisJCQkgICAgJDEgIX4gLyRhbGxvd2VkX2FzbV9pbmNsdWRlcy8pCisJCQl7CisJCQkJaWYgKCRyZWFsZmlsZSA9fiBte15hcmNoL30pIHsKKwkJCQkJQ0hLKCJBUkNIX0lOQ0xVREVfTElOVVgiLAorCQkJCQkgICAgIkNvbnNpZGVyIHVzaW5nICNpbmNsdWRlIDxsaW51eC8kZmlsZT4gaW5zdGVhZCBvZiA8YXNtLyRmaWxlPlxuIiAuICRoZXJlY3Vycik7CisJCQkJfSBlbHNlIHsKKwkJCQkJV0FSTigiSU5DTFVERV9MSU5VWCIsCisJCQkJCSAgICAgIlVzZSAjaW5jbHVkZSA8bGludXgvJGZpbGU+IGluc3RlYWQgb2YgPGFzbS8kZmlsZT5cbiIgLiAkaGVyZWN1cnIpOworCQkJCX0KKwkJCX0KKwkJfQorCisjIG11bHRpLXN0YXRlbWVudCBtYWNyb3Mgc2hvdWxkIGJlIGVuY2xvc2VkIGluIGEgZG8gd2hpbGUgbG9vcCwgZ3JhYiB0aGUKKyMgZmlyc3Qgc3RhdGVtZW50IGFuZCBlbnN1cmUgaXRzIHRoZSB3aG9sZSBtYWNybyBpZiBpdHMgbm90IGVuY2xvc2VkCisjIGluIGEga25vd24gZ29vZCBjb250YWluZXIKKwkJaWYgKCRyZWFsZmlsZSAhfiBtQC92bWxpbnV4Lmxkcy5oJEAgJiYKKwkJICAgICRsaW5lID1+IC9eLlxzKlwjXHMqZGVmaW5lXHMqJElkZW50KFwoKT8vKSB7CisJCQlteSAkbG4gPSAkbGluZW5yOworCQkJbXkgJGNudCA9ICRyZWFsY250OworCQkJbXkgKCRvZmYsICRkc3RhdCwgJGRjb25kLCAkcmVzdCk7CisJCQlteSAkY3R4ID0gJyc7CisKKwkJCW15ICRhcmdzID0gZGVmaW5lZCgkMSk7CisKKwkJCSMgRmluZCB0aGUgZW5kIG9mIHRoZSBtYWNybyBhbmQgbGltaXQgb3VyIHN0YXRlbWVudAorCQkJIyBzZWFyY2ggdG8gdGhhdC4KKwkJCXdoaWxlICgkY250ID4gMCAmJiBkZWZpbmVkICRsaW5lc1skbG4gLSAxXSAmJgorCQkJCSRsaW5lc1skbG4gLSAxXSA9fiAvXig/Oi18Li4qXFwkKS8pCisJCQl7CisJCQkJJGN0eCAuPSAkcmF3bGluZXNbJGxuIC0gMV0gLiAiXG4iOworCQkJCSRjbnQtLSBpZiAoJGxpbmVzWyRsbiAtIDFdICF+IC9eLS8pOworCQkJCSRsbisrOworCQkJfQorCQkJJGN0eCAuPSAkcmF3bGluZXNbJGxuIC0gMV07CisKKwkJCSgkZHN0YXQsICRkY29uZCwgJGxuLCAkY250LCAkb2ZmKSA9CisJCQkJY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkbG4gLSAkbGluZW5yICsgMSwgMCk7CisJCQkjcHJpbnQgImRzdGF0PCRkc3RhdD4gZGNvbmQ8JGRjb25kPiBjbnQ8JGNudD4gb2ZmPCRvZmY+XG4iOworCQkJI3ByaW50ICJMSU5FPCRsaW5lc1skbG4tMV0+IGxlbjwiIC4gbGVuZ3RoKCRsaW5lc1skbG4tMV0pIC4gIlxuIjsKKworCQkJIyBFeHRyYWN0IHRoZSByZW1haW5kZXIgb2YgdGhlIGRlZmluZSAoaWYgYW55KSBhbmQKKwkJCSMgcmlwIG9mZiBzdXJyb3VuZGluZyBzcGFjZXMsIGFuZCB0cmFpbGluZyBcJ3MuCisJCQkkcmVzdCA9ICcnOworCQkJd2hpbGUgKCRvZmYgIT0gMCB8fCAoJGNudCA+IDAgJiYgJHJlc3QgPX4gL1xcXHMqJC8pKSB7CisJCQkJI3ByaW50ICJBRERJTkcgY250PCRjbnQ+ICRvZmYgPCIgLiBzdWJzdHIoJGxpbmVzWyRsbiAtIDFdLCAkb2ZmKSAuICI+IHJlc3Q8JHJlc3Q+XG4iOworCQkJCWlmICgkb2ZmICE9IDAgfHwgJGxpbmVzWyRsbiAtIDFdICF+IC9eLS8pIHsKKwkJCQkJJHJlc3QgLj0gc3Vic3RyKCRsaW5lc1skbG4gLSAxXSwgJG9mZikgLiAiXG4iOworCQkJCQkkY250LS07CisJCQkJfQorCQkJCSRsbisrOworCQkJCSRvZmYgPSAwOworCQkJfQorCQkJJHJlc3QgPX4gcy9cXFxuLi8vZzsKKwkJCSRyZXN0ID1+IHMvXlxzKi8vczsKKwkJCSRyZXN0ID1+IHMvXHMqJC8vczsKKworCQkJIyBDbGVhbiB1cCB0aGUgb3JpZ2luYWwgc3RhdGVtZW50LgorCQkJaWYgKCRhcmdzKSB7CisJCQkJc3Vic3RyKCRkc3RhdCwgMCwgbGVuZ3RoKCRkY29uZCksICcnKTsKKwkJCX0gZWxzZSB7CisJCQkJJGRzdGF0ID1+IHMvXi5ccypcI1xzKmRlZmluZVxzKyRJZGVudFxzKi8vOworCQkJfQorCQkJJGRzdGF0ID1+IHMvJDsvL2c7CisJCQkkZHN0YXQgPX4gcy9cXFxuLi8vZzsKKwkJCSRkc3RhdCA9fiBzL15ccyovL3M7CisJCQkkZHN0YXQgPX4gcy9ccyokLy9zOworCisJCQkjIEZsYXR0ZW4gYW55IHBhcmVudGhlc2VzIGFuZCBicmFjZXMKKwkJCXdoaWxlICgkZHN0YXQgPX4gcy9cKFteXChcKV0qXCkvMS8gfHwKKwkJCSAgICAgICAkZHN0YXQgPX4gcy9ce1teXHtcfV0qXH0vMS8gfHwKKwkJCSAgICAgICAkZHN0YXQgPX4gcy9cW1teXHtcfV0qXF0vMS8pCisJCQl7CisJCQl9CisKKwkJCW15ICRleGNlcHRpb25zID0gcXJ7CisJCQkJJERlY2xhcmV8CisJCQkJbW9kdWxlX3BhcmFtX25hbWVkfAorCQkJCU1PRFVMRV9QQVJBTV9ERVNDfAorCQkJCURFQ0xBUkVfUEVSX0NQVXwKKwkJCQlERUZJTkVfUEVSX0NQVXwKKwkJCQlfX3R5cGVvZl9fXCh8CisJCQkJdW5pb258CisJCQkJc3RydWN0fAorCQkJCVwuJElkZW50XHMqPVxzKnwKKwkJCQleXCJ8XCIkCisJCQl9eDsKKwkJCSNwcmludCAiUkVTVDwkcmVzdD4gZHN0YXQ8JGRzdGF0PiBjdHg8JGN0eD5cbiI7CisJCQlpZiAoJHJlc3QgbmUgJycgJiYgJHJlc3QgbmUgJywnKSB7CisJCQkJaWYgKCRyZXN0ICF+IC93aGlsZVxzKlwoLyAmJgorCQkJCSAgICAkZHN0YXQgIX4gLyRleGNlcHRpb25zLykKKwkJCQl7CisJCQkJCUVSUk9SKCJNVUxUSVNUQVRFTUVOVF9NQUNST19VU0VfRE9fV0hJTEUiLAorCQkJCQkgICAgICAiTWFjcm9zIHdpdGggbXVsdGlwbGUgc3RhdGVtZW50cyBzaG91bGQgYmUgZW5jbG9zZWQgaW4gYSBkbyAtIHdoaWxlIGxvb3BcbiIgLiAiJGhlcmVcbiRjdHhcbiIpOworCQkJCX0KKworCQkJfSBlbHNpZiAoJGN0eCAhfiAvOy8pIHsKKwkJCQlpZiAoJGRzdGF0IG5lICcnICYmCisJCQkJICAgICRkc3RhdCAhfiAvXig/OiRJZGVudHwtPyRDb25zdGFudCkkLyAmJgorCQkJCSAgICAkZHN0YXQgIX4gLyRleGNlcHRpb25zLyAmJgorCQkJCSAgICAkZHN0YXQgIX4gL15cLiRJZGVudFxzKj0vICYmCisJCQkJICAgICRkc3RhdCA9fiAvJE9wZXJhdG9ycy8pCisJCQkJeworCQkJCQlFUlJPUigiQ09NUExFWF9NQUNSTyIsCisJCQkJCSAgICAgICJNYWNyb3Mgd2l0aCBjb21wbGV4IHZhbHVlcyBzaG91bGQgYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzaXNcbiIgLiAiJGhlcmVcbiRjdHhcbiIpOworCQkJCX0KKwkJCX0KKwkJfQorCisjIG1ha2Ugc3VyZSBzeW1ib2xzIGFyZSBhbHdheXMgd3JhcHBlZCB3aXRoIFZNTElOVVhfU1lNQk9MKCkgLi4uCisjIGFsbCBhc3NpZ25tZW50cyBtYXkgaGF2ZSBvbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdpdGggYW4gYXNzaWdubWVudDoKKyMJLgorIwlBTElHTiguLi4pCisjCVZNTElOVVhfU1lNQk9MKC4uLikKKwkJaWYgKCRyZWFsZmlsZSBlcSAndm1saW51eC5sZHMuaCcgJiYgJGxpbmUgPX4gLyg/Oig/Ol58XHMpJElkZW50XHMqPXw9XHMqJElkZW50KD86XHN8JCkpLykgeworCQkJV0FSTigiTUlTU0lOR19WTUxJTlVYX1NZTUJPTCIsCisJCQkgICAgICJ2bWxpbnV4Lmxkcy5oIG5lZWRzIFZNTElOVVhfU1lNQk9MKCkgYXJvdW5kIEMtdmlzaWJsZSBzeW1ib2xzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciByZWR1bmRhbnQgYnJhY2luZyByb3VuZCBpZiBldGMKKwkJaWYgKCRsaW5lID1+IC8oXi4qKVxiaWZcYi8gJiYgJDEgIX4gL2Vsc2VccyokLykgeworCQkJbXkgKCRsZXZlbCwgJGVuZGxuLCBAY2h1bmtzKSA9CisJCQkJY3R4X3N0YXRlbWVudF9mdWxsKCRsaW5lbnIsICRyZWFsY250LCAxKTsKKwkJCSNwcmludCAiY2h1bmtzPCQjY2h1bmtzPiBsaW5lbnI8JGxpbmVucj4gZW5kbG48JGVuZGxuPiBsZXZlbDwkbGV2ZWw+XG4iOworCQkJI3ByaW50ICJBUFc6IDw8JGNodW5rc1sxXVswXT4+PDwkY2h1bmtzWzFdWzFdPj5cbiI7CisJCQlpZiAoJCNjaHVua3MgPiAwICYmICRsZXZlbCA9PSAwKSB7CisJCQkJbXkgJGFsbG93ZWQgPSAwOworCQkJCW15ICRzZWVuID0gMDsKKwkJCQlteSAkaGVyZWN0eCA9ICRoZXJlIC4gIlxuIjsKKwkJCQlteSAkbG4gPSAkbGluZW5yIC0gMTsKKwkJCQlmb3IgbXkgJGNodW5rIChAY2h1bmtzKSB7CisJCQkJCW15ICgkY29uZCwgJGJsb2NrKSA9IEB7JGNodW5rfTsKKworCQkJCQkjIElmIHRoZSBjb25kaXRpb24gY2FycmllcyBsZWFkaW5nIG5ld2xpbmVzLCB0aGVuIGNvdW50IHRob3NlIGFzIG9mZnNldHMuCisJCQkJCW15ICgkd2hpdGVzcGFjZSkgPSAoJGNvbmQgPX4gL14oKD86XHMqXG5bKy1dKSpccyopL3MpOworCQkJCQlteSAkb2Zmc2V0ID0gc3RhdGVtZW50X3Jhd2xpbmVzKCR3aGl0ZXNwYWNlKSAtIDE7CisKKwkJCQkJI3ByaW50ICJDT05EPCRjb25kPiB3aGl0ZXNwYWNlPCR3aGl0ZXNwYWNlPiBvZmZzZXQ8JG9mZnNldD5cbiI7CisKKwkJCQkJIyBXZSBoYXZlIGxvb2tlZCBhdCBhbmQgYWxsb3dlZCB0aGlzIHNwZWNpZmljIGxpbmUuCisJCQkJCSRzdXBwcmVzc19pZmJyYWNlc3skbG4gKyAkb2Zmc2V0fSA9IDE7CisKKwkJCQkJJGhlcmVjdHggLj0gIiRyYXdsaW5lc1skbG4gKyAkb2Zmc2V0XVxuWy4uLl1cbiI7CisJCQkJCSRsbiArPSBzdGF0ZW1lbnRfcmF3bGluZXMoJGJsb2NrKSAtIDE7CisKKwkJCQkJc3Vic3RyKCRibG9jaywgMCwgbGVuZ3RoKCRjb25kKSwgJycpOworCisJCQkJCSRzZWVuKysgaWYgKCRibG9jayA9fiAvXlxzKnsvKTsKKworCQkJCQkjcHJpbnQgImNvbmQ8JGNvbmQ+IGJsb2NrPCRibG9jaz4gYWxsb3dlZDwkYWxsb3dlZD5cbiI7CisJCQkJCWlmIChzdGF0ZW1lbnRfbGluZXMoJGNvbmQpID4gMSkgeworCQkJCQkJI3ByaW50ICJBUFc6IEFMTE9XRUQ6IGNvbmQ8JGNvbmQ+XG4iOworCQkJCQkJJGFsbG93ZWQgPSAxOworCQkJCQl9CisJCQkJCWlmICgkYmxvY2sgPX4vXGIoPzppZnxmb3J8d2hpbGUpXGIvKSB7CisJCQkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogYmxvY2s8JGJsb2NrPlxuIjsKKwkJCQkJCSRhbGxvd2VkID0gMTsKKwkJCQkJfQorCQkJCQlpZiAoc3RhdGVtZW50X2Jsb2NrX3NpemUoJGJsb2NrKSA+IDEpIHsKKwkJCQkJCSNwcmludCAiQVBXOiBBTExPV0VEOiBsaW5lcyBibG9jazwkYmxvY2s+XG4iOworCQkJCQkJJGFsbG93ZWQgPSAxOworCQkJCQl9CisJCQkJfQorCQkJCWlmICgkc2VlbiAmJiAhJGFsbG93ZWQpIHsKKwkJCQkJV0FSTigiQlJBQ0VTIiwKKwkJCQkJICAgICAiYnJhY2VzIHt9IGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbnkgYXJtIG9mIHRoaXMgc3RhdGVtZW50XG4iIC4gJGhlcmVjdHgpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoIWRlZmluZWQgJHN1cHByZXNzX2lmYnJhY2VzeyRsaW5lbnIgLSAxfSAmJgorCQkJCQkkbGluZSA9fiAvXGIoaWZ8d2hpbGV8Zm9yfGVsc2UpXGIvKSB7CisJCQlteSAkYWxsb3dlZCA9IDA7CisKKwkJCSMgQ2hlY2sgdGhlIHByZS1jb250ZXh0LgorCQkJaWYgKHN1YnN0cigkbGluZSwgMCwgJC1bMF0pID1+IC8oXH1ccyopJC8pIHsKKwkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogcHJlPCQxPlxuIjsKKwkJCQkkYWxsb3dlZCA9IDE7CisJCQl9CisKKwkJCW15ICgkbGV2ZWwsICRlbmRsbiwgQGNodW5rcykgPQorCQkJCWN0eF9zdGF0ZW1lbnRfZnVsbCgkbGluZW5yLCAkcmVhbGNudCwgJC1bMF0pOworCisJCQkjIENoZWNrIHRoZSBjb25kaXRpb24uCisJCQlteSAoJGNvbmQsICRibG9jaykgPSBAeyRjaHVua3NbMF19OworCQkJI3ByaW50ICJDSEVDS0lORzwkbGluZW5yPiBjb25kPCRjb25kPiBibG9jazwkYmxvY2s+XG4iOworCQkJaWYgKGRlZmluZWQgJGNvbmQpIHsKKwkJCQlzdWJzdHIoJGJsb2NrLCAwLCBsZW5ndGgoJGNvbmQpLCAnJyk7CisJCQl9CisJCQlpZiAoc3RhdGVtZW50X2xpbmVzKCRjb25kKSA+IDEpIHsKKwkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogY29uZDwkY29uZD5cbiI7CisJCQkJJGFsbG93ZWQgPSAxOworCQkJfQorCQkJaWYgKCRibG9jayA9fi9cYig/OmlmfGZvcnx3aGlsZSlcYi8pIHsKKwkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogYmxvY2s8JGJsb2NrPlxuIjsKKwkJCQkkYWxsb3dlZCA9IDE7CisJCQl9CisJCQlpZiAoc3RhdGVtZW50X2Jsb2NrX3NpemUoJGJsb2NrKSA+IDEpIHsKKwkJCQkjcHJpbnQgIkFQVzogQUxMT1dFRDogbGluZXMgYmxvY2s8JGJsb2NrPlxuIjsKKwkJCQkkYWxsb3dlZCA9IDE7CisJCQl9CisJCQkjIENoZWNrIHRoZSBwb3N0LWNvbnRleHQuCisJCQlpZiAoZGVmaW5lZCAkY2h1bmtzWzFdKSB7CisJCQkJbXkgKCRjb25kLCAkYmxvY2spID0gQHskY2h1bmtzWzFdfTsKKwkJCQlpZiAoZGVmaW5lZCAkY29uZCkgeworCQkJCQlzdWJzdHIoJGJsb2NrLCAwLCBsZW5ndGgoJGNvbmQpLCAnJyk7CisJCQkJfQorCQkJCWlmICgkYmxvY2sgPX4gL15ccypcey8pIHsKKwkJCQkJI3ByaW50ICJBUFc6IEFMTE9XRUQ6IGNodW5rLTEgYmxvY2s8JGJsb2NrPlxuIjsKKwkJCQkJJGFsbG93ZWQgPSAxOworCQkJCX0KKwkJCX0KKwkJCWlmICgkbGV2ZWwgPT0gMCAmJiAkYmxvY2sgPX4gL15ccypcey8gJiYgISRhbGxvd2VkKSB7CisJCQkJbXkgJGhlcmVjdHggPSAkaGVyZSAuICJcbiI7OworCQkJCW15ICRjbnQgPSBzdGF0ZW1lbnRfcmF3bGluZXMoJGJsb2NrKTsKKworCQkJCWZvciAobXkgJG4gPSAwOyAkbiA8ICRjbnQ7ICRuKyspIHsKKwkJCQkJJGhlcmVjdHggLj0gcmF3X2xpbmUoJGxpbmVuciwgJG4pIC4gIlxuIjs7CisJCQkJfQorCisJCQkJV0FSTigiQlJBQ0VTIiwKKwkJCQkgICAgICJicmFjZXMge30gYXJlIG5vdCBuZWNlc3NhcnkgZm9yIHNpbmdsZSBzdGF0ZW1lbnQgYmxvY2tzXG4iIC4gJGhlcmVjdHgpOworCQkJfQorCQl9CisKKyMgZG9uJ3QgaW5jbHVkZSBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMgKHVzZXMgUkFXIGxpbmUpCisJCWZvciBteSAkaW5jIChAZGVwX2luY2x1ZGVzKSB7CisJCQlpZiAoJHJhd2xpbmUgPX4gbUBeLlxzKlwjXHMqaW5jbHVkZVxzKlw8JGluYz5AKSB7CisJCQkJRVJST1IoIkRFUFJFQ0FURURfSU5DTFVERSIsCisJCQkJICAgICAgIkRvbid0IHVzZSA8JGluYz46IHNlZSBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHRcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgZG9uJ3QgdXNlIGRlcHJlY2F0ZWQgZnVuY3Rpb25zCisJCWZvciBteSAkZnVuYyAoQGRlcF9mdW5jdGlvbnMpIHsKKwkJCWlmICgkbGluZSA9fiAvXGIkZnVuY1xiLykgeworCQkJCUVSUk9SKCJERVBSRUNBVEVEX0ZVTkNUSU9OIiwKKwkJCQkgICAgICAiRG9uJ3QgdXNlICRmdW5jKCk6IHNlZSBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHRcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgbm8gdm9sYXRpbGVzIHBsZWFzZQorCQlteSAkYXNtX3ZvbGF0aWxlID0gcXJ7XGIoX19hc21fX3xhc20pXHMrKF9fdm9sYXRpbGVfX3x2b2xhdGlsZSlcYn07CisJCWlmICgkbGluZSA9fiAvXGJ2b2xhdGlsZVxiLyAmJiAkbGluZSAhfiAvJGFzbV92b2xhdGlsZS8pIHsKKwkJCVdBUk4oIlZPTEFUSUxFIiwKKwkJCSAgICAgIlVzZSBvZiB2b2xhdGlsZSBpcyB1c3VhbGx5IHdyb25nOiBzZWUgRG9jdW1lbnRhdGlvbi92b2xhdGlsZS1jb25zaWRlcmVkLWhhcm1mdWwudHh0XG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIHdhcm4gYWJvdXQgI2lmIDAKKwkJaWYgKCRsaW5lID1+IC9eLlxzKlwjXHMqaWZccyswXGIvKSB7CisJCQlDSEsoIlJFRFVOREFOVF9DT0RFIiwKKwkJCSAgICAiaWYgdGhpcyBjb2RlIGlzIHJlZHVuZGFudCBjb25zaWRlciByZW1vdmluZyBpdFxuIiAuCisJCQkJJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBuZWVkbGVzcyBrZnJlZSgpIGNoZWNrcworCQlpZiAoJHByZXZsaW5lID1+IC9cYmlmXHMqXCgoW15cKV0qKVwpLykgeworCQkJbXkgJGV4cHIgPSAkMTsKKwkJCWlmICgkbGluZSA9fiAvXGJrZnJlZVwoXFEkZXhwclxFXCk7LykgeworCQkJCVdBUk4oIk5FRURMRVNTX0tGUkVFIiwKKwkJCQkgICAgICJrZnJlZShOVUxMKSBpcyBzYWZlIHRoaXMgY2hlY2sgaXMgcHJvYmFibHkgbm90IHJlcXVpcmVkXG4iIC4gJGhlcmVwcmV2KTsKKwkJCX0KKwkJfQorIyBjaGVjayBmb3IgbmVlZGxlc3MgdXNiX2ZyZWVfdXJiKCkgY2hlY2tzCisJCWlmICgkcHJldmxpbmUgPX4gL1xiaWZccypcKChbXlwpXSopXCkvKSB7CisJCQlteSAkZXhwciA9ICQxOworCQkJaWYgKCRsaW5lID1+IC9cYnVzYl9mcmVlX3VyYlwoXFEkZXhwclxFXCk7LykgeworCQkJCVdBUk4oIk5FRURMRVNTX1VTQl9GUkVFX1VSQiIsCisJCQkJICAgICAidXNiX2ZyZWVfdXJiKE5VTEwpIGlzIHNhZmUgdGhpcyBjaGVjayBpcyBwcm9iYWJseSBub3QgcmVxdWlyZWRcbiIgLiAkaGVyZXByZXYpOworCQkJfQorCQl9CisKKyMgcHJlZmVyIHVzbGVlcF9yYW5nZSBvdmVyIHVkZWxheQorCQlpZiAoJGxpbmUgPX4gL1xidWRlbGF5XHMqXChccyooXHcrKVxzKlwpLykgeworCQkJIyBpZ25vcmUgdWRlbGF5J3MgPCAxMCwgaG93ZXZlcgorCQkJaWYgKCEgKCgkMSA9fiAvKFxkKykvKSAmJiAoJDEgPCAxMCkpICkgeworCQkJCUNISygiVVNMRUVQX1JBTkdFIiwKKwkJCQkgICAgInVzbGVlcF9yYW5nZSBpcyBwcmVmZXJyZWQgb3ZlciB1ZGVsYXk7IHNlZSBEb2N1bWVudGF0aW9uL3RpbWVycy90aW1lcnMtaG93dG8udHh0XG4iIC4gJGxpbmUpOworCQkJfQorCQl9CisKKyMgd2FybiBhYm91dCB1bmV4cGVjdGVkbHkgbG9uZyBtc2xlZXAncworCQlpZiAoJGxpbmUgPX4gL1xibXNsZWVwXHMqXCgoXGQrKVwpOy8pIHsKKwkJCWlmICgkMSA8IDIwKSB7CisJCQkJV0FSTigiTVNMRUVQIiwKKwkJCQkgICAgICJtc2xlZXAgPCAyMG1zIGNhbiBzbGVlcCBmb3IgdXAgdG8gMjBtczsgc2VlIERvY3VtZW50YXRpb24vdGltZXJzL3RpbWVycy1ob3d0by50eHRcbiIgLiAkbGluZSk7CisJCQl9CisJCX0KKworIyB3YXJuIGFib3V0ICNpZmRlZnMgaW4gQyBmaWxlcworIwkJaWYgKCRsaW5lID1+IC9eLlxzKlwjXHMqaWYofG4pZGVmLyAmJiAoJHJlYWxmaWxlID1+IC9cLmMkLykpIHsKKyMJCQlwcmludCAiI2lmZGVmIGluIEMgZmlsZXMgc2hvdWxkIGJlIGF2b2lkZWRcbiI7CisjCQkJcHJpbnQgIiRoZXJlY3VyciI7CisjCQkJJGNsZWFuID0gMDsKKyMJCX0KKworIyB3YXJuIGFib3V0IHNwYWNpbmcgaW4gI2lmZGVmcworCQlpZiAoJGxpbmUgPX4gL14uXHMqXCNccyooaWZkZWZ8aWZuZGVmfGVsaWYpXHNccysvKSB7CisJCQlFUlJPUigiU1BBQ0lORyIsCisJCQkgICAgICAiZXhhY3RseSBvbmUgc3BhY2UgcmVxdWlyZWQgYWZ0ZXIgdGhhdCAjJDFcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIHNwaW5sb2NrX3QgZGVmaW5pdGlvbnMgd2l0aG91dCBhIGNvbW1lbnQuCisJCWlmICgkbGluZSA9fiAvXi5ccyooc3RydWN0XHMrbXV0ZXh8c3BpbmxvY2tfdClccytcUys7LyB8fAorCQkgICAgJGxpbmUgPX4gL14uXHMqKERFRklORV9NVVRFWClccypcKC8pIHsKKwkJCW15ICR3aGljaCA9ICQxOworCQkJaWYgKCFjdHhfaGFzX2NvbW1lbnQoJGZpcnN0X2xpbmUsICRsaW5lbnIpKSB7CisJCQkJQ0hLKCJVTkNPTU1FTlRFRF9ERUZJTklUSU9OIiwKKwkJCQkgICAgIiQxIGRlZmluaXRpb24gd2l0aG91dCBjb21tZW50XG4iIC4gJGhlcmVjdXJyKTsKKwkJCX0KKwkJfQorIyBjaGVjayBmb3IgbWVtb3J5IGJhcnJpZXJzIHdpdGhvdXQgYSBjb21tZW50LgorCQlpZiAoJGxpbmUgPX4gL1xiKG1ifHJtYnx3bWJ8cmVhZF9iYXJyaWVyX2RlcGVuZHN8c21wX21ifHNtcF9ybWJ8c21wX3dtYnxzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMpXCgvKSB7CisJCQlpZiAoIWN0eF9oYXNfY29tbWVudCgkZmlyc3RfbGluZSwgJGxpbmVucikpIHsKKwkJCQlDSEsoIk1FTU9SWV9CQVJSSUVSIiwKKwkJCQkgICAgIm1lbW9yeSBiYXJyaWVyIHdpdGhvdXQgY29tbWVudFxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKyMgY2hlY2sgb2YgaGFyZHdhcmUgc3BlY2lmaWMgZGVmaW5lcworCQlpZiAoJGxpbmUgPX4gbUBeLlxzKlwjXHMqaWYuKlxiKF9faTM4Nl9ffF9fcG93ZXJwYzY0X198X19zdW5fX3xfX3MzOTB4X18pXGJAICYmICRyZWFsZmlsZSAhfiBtQGluY2x1ZGUvYXNtLUApIHsKKwkJCUNISygiQVJDSF9ERUZJTkVTIiwKKwkJCSAgICAiYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRlZmluZXMgc2hvdWxkIGJlIGF2b2lkZWRcbiIgLiAgJGhlcmVjdXJyKTsKKwkJfQorCisjIENoZWNrIHRoYXQgdGhlIHN0b3JhZ2UgY2xhc3MgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGRlY2xhcmF0aW9uCisJCWlmICgkbGluZSA9fiAvXGIkU3RvcmFnZVxiLyAmJiAkbGluZSAhfiAvXi5ccyokU3RvcmFnZVxiLykgeworCQkJV0FSTigiU1RPUkFHRV9DTEFTUyIsCisJCQkgICAgICJzdG9yYWdlIGNsYXNzIHNob3VsZCBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZWNsYXJhdGlvblxuIiAuICRoZXJlY3VycikKKwkJfQorCisjIGNoZWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgaW5saW5lIGF0dHJpYnV0ZSwgdGhhdCBpdCBpcyBiZXR3ZWVuCisjIHN0b3JhZ2UgY2xhc3MgYW5kIHR5cGUuCisJCWlmICgkbGluZSA9fiAvXGIkVHlwZVxzKyRJbmxpbmVcYi8gfHwKKwkJICAgICRsaW5lID1+IC9cYiRJbmxpbmVccyskU3RvcmFnZVxiLykgeworCQkJRVJST1IoIklOTElORV9MT0NBVElPTiIsCisJCQkgICAgICAiaW5saW5lIGtleXdvcmQgc2hvdWxkIHNpdCBiZXR3ZWVuIHN0b3JhZ2UgY2xhc3MgYW5kIHR5cGVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgQ2hlY2sgZm9yIF9faW5saW5lX18gYW5kIF9faW5saW5lLCBwcmVmZXIgaW5saW5lCisJCWlmICgkbGluZSA9fiAvXGIoX19pbmxpbmVfX3xfX2lubGluZSlcYi8pIHsKKwkJCVdBUk4oIklOTElORSIsCisJCQkgICAgICJwbGFpbiBpbmxpbmUgaXMgcHJlZmVycmVkIG92ZXIgJDFcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgQ2hlY2sgZm9yIF9fYXR0cmlidXRlX18gcGFja2VkLCBwcmVmZXIgX19wYWNrZWQKKwkJaWYgKCRsaW5lID1+IC9cYl9fYXR0cmlidXRlX19ccypcKFxzKlwoLipcYnBhY2tlZFxiLykgeworCQkJV0FSTigiUFJFRkVSX1BBQ0tFRCIsCisJCQkgICAgICJfX3BhY2tlZCBpcyBwcmVmZXJyZWQgb3ZlciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKVxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBDaGVjayBmb3IgX19hdHRyaWJ1dGVfXyBhbGlnbmVkLCBwcmVmZXIgX19hbGlnbmVkCisJCWlmICgkbGluZSA9fiAvXGJfX2F0dHJpYnV0ZV9fXHMqXChccypcKC4qYWxpZ25lZC8pIHsKKwkJCVdBUk4oIlBSRUZFUl9BTElHTkVEIiwKKwkJCSAgICAgIl9fYWxpZ25lZChzaXplKSBpcyBwcmVmZXJyZWQgb3ZlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemUpKSlcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIHNpemVvZigmKQorCQlpZiAoJGxpbmUgPX4gL1xic2l6ZW9mXHMqXChccypcJi8pIHsKKwkJCVdBUk4oIlNJWkVPRl9BRERSRVNTIiwKKwkJCSAgICAgInNpemVvZigmIHNob3VsZCBiZSBhdm9pZGVkXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBsaW5lIGNvbnRpbnVhdGlvbnMgaW4gcXVvdGVkIHN0cmluZ3Mgd2l0aCBvZGQgY291bnRzIG9mICIKKwkJaWYgKCRyYXdsaW5lID1+IC9cXCQvICYmICRyYXdsaW5lID1+IHRyLyIvIi8gJSAyKSB7CisJCQlXQVJOKCJMSU5FX0NPTlRJTlVBVElPTlMiLAorCQkJICAgICAiQXZvaWQgbGluZSBjb250aW51YXRpb25zIGluIHF1b3RlZCBzdHJpbmdzXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBuZXcgZXh0ZXJucyBpbiAuYyBmaWxlcy4KKwkJaWYgKCRyZWFsZmlsZSA9fiAvXC5jJC8gJiYgZGVmaW5lZCAkc3RhdCAmJgorCQkgICAgJHN0YXQgPX4gL14uXHMqKD86ZXh0ZXJuXHMrKT8kVHlwZVxzKygkSWRlbnQpKFxzKilcKC9zKQorCQl7CisJCQlteSAkZnVuY3Rpb25fbmFtZSA9ICQxOworCQkJbXkgJHBhcmVuX3NwYWNlID0gJDI7CisKKwkJCW15ICRzID0gJHN0YXQ7CisJCQlpZiAoZGVmaW5lZCAkY29uZCkgeworCQkJCXN1YnN0cigkcywgMCwgbGVuZ3RoKCRjb25kKSwgJycpOworCQkJfQorCQkJaWYgKCRzID1+IC9eXHMqOy8gJiYKKwkJCSAgICAkZnVuY3Rpb25fbmFtZSBuZSAndW5pbml0aWFsaXplZF92YXInKQorCQkJeworCQkJCVdBUk4oIkFWT0lEX0VYVEVSTlMiLAorCQkJCSAgICAgImV4dGVybnMgc2hvdWxkIGJlIGF2b2lkZWQgaW4gLmMgZmlsZXNcbiIgLiAgJGhlcmVjdXJyKTsKKwkJCX0KKworCQkJaWYgKCRwYXJlbl9zcGFjZSA9fiAvXG4vKSB7CisJCQkJV0FSTigiRlVOQ1RJT05fQVJHVU1FTlRTIiwKKwkJCQkgICAgICJhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBzaG91bGQgZm9sbG93IGlkZW50aWZpZXJcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCisJCX0gZWxzaWYgKCRyZWFsZmlsZSA9fiAvXC5jJC8gJiYgZGVmaW5lZCAkc3RhdCAmJgorCQkgICAgJHN0YXQgPX4gL14uXHMqZXh0ZXJuXHMrLykKKwkJeworCQkJV0FSTigiQVZPSURfRVhURVJOUyIsCisJCQkgICAgICJleHRlcm5zIHNob3VsZCBiZSBhdm9pZGVkIGluIC5jIGZpbGVzXG4iIC4gICRoZXJlY3Vycik7CisJCX0KKworIyBjaGVja3MgZm9yIG5ldyBfX3NldHVwJ3MKKwkJaWYgKCRyYXdsaW5lID1+IC9cYl9fc2V0dXBcKCIoW14iXSopIi8pIHsKKwkJCW15ICRuYW1lID0gJDE7CisKKwkJCWlmICghZ3JlcCgvJG5hbWUvLCBAc2V0dXBfZG9jcykpIHsKKwkJCQlDSEsoIlVORE9DVU1FTlRFRF9TRVRVUCIsCisJCQkJICAgICJfX3NldHVwIGFwcGVhcnMgdW4tZG9jdW1lbnRlZCAtLSBjaGVjayBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKworIyBjaGVjayBmb3IgcG9pbnRsZXNzIGNhc3Rpbmcgb2Yga21hbGxvYyByZXR1cm4KKwkJaWYgKCRsaW5lID1+IC9cKlxzKlwpXHMqW2t2XVtjem1dYWxsb2MoX25vZGUpezAsMX1cYi8pIHsKKwkJCVdBUk4oIlVOTkVDRVNTQVJZX0NBU1RTIiwKKwkJCSAgICAgInVubmVjZXNzYXJ5IGNhc3QgbWF5IGhpZGUgYnVncywgc2VlIGh0dHA6Ly9jLWZhcS5jb20vbWFsbG9jL21hbGxvY25vY2FzdC5odG1sXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisjIGNoZWNrIGZvciBtdWx0aXBsZSBzZW1pY29sb25zCisJCWlmICgkbGluZSA9fiAvO1xzKjtccyokLykgeworCQkgICAgV0FSTigiT05FX1NFTUlDT0xPTiIsCisJCQkgIlN0YXRlbWVudHMgdGVybWluYXRpb25zIHVzZSAxIHNlbWljb2xvblxuIiAuICRoZXJlY3Vycik7CisJCX0KKworIyBjaGVjayBmb3IgZ2NjIHNwZWNpZmljIF9fRlVOQ1RJT05fXworCQlpZiAoJGxpbmUgPX4gL19fRlVOQ1RJT05fXy8pIHsKKwkJCVdBUk4oIlVTRV9GVU5DIiwKKwkJCSAgICAgIl9fZnVuY19fIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgZ2NjIHNwZWNpZmljIF9fRlVOQ1RJT05fX1xuIiAgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yIHNlbWFwaG9yZXMgaW5pdGlhbGl6ZWQgbG9ja2VkCisJCWlmICgkbGluZSA9fiAvXi5ccypzZW1hX2luaXQuKyxcVz8wXFc/XCkvKSB7CisJCQlXQVJOKCJDT05TSURFUl9DT01QTEVUSU9OIiwKKwkJCSAgICAgImNvbnNpZGVyIHVzaW5nIGEgY29tcGxldGlvblxuIiAuICRoZXJlY3Vycik7CisKKwkJfQorIyByZWNvbW1lbmQga3N0cnRvKiBvdmVyIHNpbXBsZV9zdHJ0byoKKwkJaWYgKCRsaW5lID1+IC9cYnNpbXBsZV8oc3RydG8uKj8pXHMqXCgvKSB7CisJCQlXQVJOKCJDT05TSURFUl9LU1RSVE8iLAorCQkJICAgICAiY29uc2lkZXIgdXNpbmcga3N0cnRvKiBpbiBwcmVmZXJlbmNlIHRvIHNpbXBsZV8kMVxuIiAuICRoZXJlY3Vycik7CisJCX0KKyMgY2hlY2sgZm9yIF9faW5pdGNhbGwoKSwgdXNlIGRldmljZV9pbml0Y2FsbCgpIGV4cGxpY2l0bHkgcGxlYXNlCisJCWlmICgkbGluZSA9fiAvXi5ccypfX2luaXRjYWxsXHMqXCgvKSB7CisJCQlXQVJOKCJVU0VfREVWSUNFX0lOSVRDQUxMIiwKKwkJCSAgICAgInBsZWFzZSB1c2UgZGV2aWNlX2luaXRjYWxsKCkgaW5zdGVhZCBvZiBfX2luaXRjYWxsKClcbiIgLiAkaGVyZWN1cnIpOworCQl9CisjIGNoZWNrIGZvciB2YXJpb3VzIG9wcyBzdHJ1Y3RzLCBlbnN1cmUgdGhleSBhcmUgY29uc3QuCisJCW15ICRzdHJ1Y3Rfb3BzID0gcXJ7YWNwaV9kb2NrX29wc3wKKwkJCQlhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnN8CisJCQkJYmFja2xpZ2h0X29wc3wKKwkJCQlibG9ja19kZXZpY2Vfb3BlcmF0aW9uc3wKKwkJCQlkZW50cnlfb3BlcmF0aW9uc3wKKwkJCQlkZXZfcG1fb3BzfAorCQkJCWRtYV9tYXBfb3BzfAorCQkJCWV4dGVudF9pb19vcHN8CisJCQkJZmlsZV9sb2NrX29wZXJhdGlvbnN8CisJCQkJZmlsZV9vcGVyYXRpb25zfAorCQkJCWh2X29wc3wKKwkJCQlpZGVfZG1hX29wc3wKKwkJCQlpbnRlbF9kdm9fZGV2X29wc3wKKwkJCQlpdGVtX29wZXJhdGlvbnN8CisJCQkJaXdsX29wc3wKKwkJCQlrZ2RiX2FyY2h8CisJCQkJa2dkYl9pb3wKKwkJCQlrc2V0X3VldmVudF9vcHN8CisJCQkJbG9ja19tYW5hZ2VyX29wZXJhdGlvbnN8CisJCQkJbWljcm9jb2RlX29wc3wKKwkJCQltdHJyX29wc3wKKwkJCQluZWlnaF9vcHN8CisJCQkJbmxtc3ZjX2JpbmRpbmd8CisJCQkJcGNpX3Jhd19vcHN8CisJCQkJcGlwZV9idWZfb3BlcmF0aW9uc3wKKwkJCQlwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHN8CisJCQkJcGxhdGZvcm1fc3VzcGVuZF9vcHN8CisJCQkJcHJvdG9fb3BzfAorCQkJCXJwY19waXBlX29wc3wKKwkJCQlzZXFfb3BlcmF0aW9uc3wKKwkJCQlzbmRfYWM5N19idWlsZF9vcHN8CisJCQkJc29jX3BjbWNpYV9zb2NrZXRfb3BzfAorCQkJCXN0YWNrdHJhY2Vfb3BzfAorCQkJCXN5c2ZzX29wc3wKKwkJCQl0dHlfb3BlcmF0aW9uc3wKKwkJCQl1c2JfbW9uX29wZXJhdGlvbnN8CisJCQkJd2Rfb3BzfXg7CisJCWlmICgkbGluZSAhfiAvXGJjb25zdFxiLyAmJgorCQkgICAgJGxpbmUgPX4gL1xic3RydWN0XHMrKCRzdHJ1Y3Rfb3BzKVxiLykgeworCQkJV0FSTigiQ09OU1RfU1RSVUNUIiwKKwkJCSAgICAgInN0cnVjdCAkMSBzaG91bGQgbm9ybWFsbHkgYmUgY29uc3RcbiIgLgorCQkJCSRoZXJlY3Vycik7CisJCX0KKworIyB1c2Ugb2YgTlJfQ1BVUyBpcyB1c3VhbGx5IHdyb25nCisjIGlnbm9yZSBkZWZpbml0aW9ucyBvZiBOUl9DUFVTIGFuZCB1c2FnZSB0byBkZWZpbmUgYXJyYXlzIGFzIGxpa2VseSByaWdodAorCQlpZiAoJGxpbmUgPX4gL1xiTlJfQ1BVU1xiLyAmJgorCQkgICAgJGxpbmUgIX4gL14uXHMqXHMqI1xzKmlmXGIuKlxiTlJfQ1BVU1xiLyAmJgorCQkgICAgJGxpbmUgIX4gL14uXHMqXHMqI1xzKmRlZmluZVxiLipcYk5SX0NQVVNcYi8gJiYKKwkJICAgICRsaW5lICF+IC9eLlxzKiREZWNsYXJlXHMuKlxbW15cXV0qTlJfQ1BVU1teXF1dKlxdLyAmJgorCQkgICAgJGxpbmUgIX4gL1xbW15cXV0qXC5cLlwuW15cXV0qTlJfQ1BVU1teXF1dKlxdLyAmJgorCQkgICAgJGxpbmUgIX4gL1xbW15cXV0qTlJfQ1BVU1teXF1dKlwuXC5cLlteXF1dKlxdLykKKwkJeworCQkJV0FSTigiTlJfQ1BVUyIsCisJCQkgICAgICJ1c2FnZSBvZiBOUl9DUFVTIGlzIG9mdGVuIHdyb25nIC0gY29uc2lkZXIgdXNpbmcgY3B1X3Bvc3NpYmxlKCksIG51bV9wb3NzaWJsZV9jcHVzKCksIGZvcl9lYWNoX3Bvc3NpYmxlX2NwdSgpLCBldGNcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKKyMgY2hlY2sgZm9yICVMe3UsZCxpfSBpbiBzdHJpbmdzCisJCW15ICRzdHJpbmc7CisJCXdoaWxlICgkbGluZSA9fiAvKD86XnwiKShbWFx0XSopKD86InwkKS9nKSB7CisJCQkkc3RyaW5nID0gc3Vic3RyKCRyYXdsaW5lLCAkLVsxXSwgJCtbMV0gLSAkLVsxXSk7CisJCQkkc3RyaW5nID1+IHMvJSUvX18vZzsKKwkJCWlmICgkc3RyaW5nID1+IC8oPzwhJSklTFt1ZGldLykgeworCQkJCVdBUk4oIlBSSU5URl9MIiwKKwkJCQkgICAgICJcJUxkLyVMdSBhcmUgbm90LXN0YW5kYXJkIEMsIHVzZSAlbGxkLyVsbHVcbiIgLiAkaGVyZWN1cnIpOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKworIyB3aGluZSBtaWdodGx5IGFib3V0IGluX2F0b21pYworCQlpZiAoJGxpbmUgPX4gL1xiaW5fYXRvbWljXHMqXCgvKSB7CisJCQlpZiAoJHJlYWxmaWxlID1+IG1AXmRyaXZlcnMvQCkgeworCQkJCUVSUk9SKCJJTl9BVE9NSUMiLAorCQkJCSAgICAgICJkbyBub3QgdXNlIGluX2F0b21pYyBpbiBkcml2ZXJzXG4iIC4gJGhlcmVjdXJyKTsKKwkJCX0gZWxzaWYgKCRyZWFsZmlsZSAhfiBtQF5rZXJuZWwvQCkgeworCQkJCVdBUk4oIklOX0FUT01JQyIsCisJCQkJICAgICAidXNlIG9mIGluX2F0b21pYygpIGlzIGluY29ycmVjdCBvdXRzaWRlIGNvcmUga2VybmVsIGNvZGVcbiIgLiAkaGVyZWN1cnIpOworCQkJfQorCQl9CisKKyMgY2hlY2sgZm9yIGxvY2tkZXBfc2V0X25vdmFsaWRhdGVfY2xhc3MKKwkJaWYgKCRsaW5lID1+IC9eLlxzKmxvY2tkZXBfc2V0X25vdmFsaWRhdGVfY2xhc3NccypcKC8gfHwKKwkJICAgICRsaW5lID1+IC9fX2xvY2tkZXBfbm9fdmFsaWRhdGVfX1xzKlwpLyApIHsKKwkJCWlmICgkcmVhbGZpbGUgIX4gbUBea2VybmVsL2xvY2tkZXBAICYmCisJCQkgICAgJHJlYWxmaWxlICF+IG1AXmluY2x1ZGUvbGludXgvbG9ja2RlcEAgJiYKKwkJCSAgICAkcmVhbGZpbGUgIX4gbUBeZHJpdmVycy9iYXNlL2NvcmVAKSB7CisJCQkJRVJST1IoIkxPQ0tERVAiLAorCQkJCSAgICAgICJsb2NrZGVwX25vX3ZhbGlkYXRlIGNsYXNzIGlzIHJlc2VydmVkIGZvciBkZXZpY2UtPm11dGV4LlxuIiAuICRoZXJlY3Vycik7CisJCQl9CisJCX0KKworCQlpZiAoJGxpbmUgPX4gL2RlYnVnZnNfY3JlYXRlX2ZpbGUuKlNfSVdVR08vIHx8CisJCSAgICAkbGluZSA9fiAvREVWSUNFX0FUVFIuKlNfSVdVR08vICkgeworCQkJV0FSTigiRVhQT1JURURfV09STERfV1JJVEFCTEUiLAorCQkJICAgICAiRXhwb3J0aW5nIHdvcmxkIHdyaXRhYmxlIGZpbGVzIGlzIHVzdWFsbHkgYW4gZXJyb3IuIENvbnNpZGVyIG1vcmUgcmVzdHJpY3RpdmUgcGVybWlzc2lvbnMuXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCisJCSMgQ2hlY2sgZm9yIG1lbXNldCB3aXRoIHN3YXBwZWQgYXJndW1lbnRzCisJCWlmICgkbGluZSA9fiAvbWVtc2V0LipcLChcIHwpKDB4fCkwKFwgfDB8KVwpOy8pIHsKKwkJCUVSUk9SKCJNRU1TRVQiLAorCQkJICAgICAgIm1lbXNldCBzaXplIGlzIDNyZCBhcmd1bWVudCwgbm90IHRoZSBzZWNvbmQuXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQorCX0KKworCSMgSWYgd2UgaGF2ZSBubyBpbnB1dCBhdCBhbGwsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byByZXBvcnQgb24KKwkjIHNvIGp1c3Qga2VlcCBxdWlldC4KKwlpZiAoJCNyYXdsaW5lcyA9PSAtMSkgeworCQlleGl0KDApOworCX0KKworCSMgSW4gbWFpbGJhY2sgbW9kZSBvbmx5IHByb2R1Y2UgYSByZXBvcnQgaW4gdGhlIG5lZ2F0aXZlLCBmb3IKKwkjIHRoaW5ncyB0aGF0IGFwcGVhciB0byBiZSBwYXRjaGVzLgorCWlmICgkbWFpbGJhY2sgJiYgKCRjbGVhbiA9PSAxIHx8ICEkaXNfcGF0Y2gpKSB7CisJCWV4aXQoMCk7CisJfQorCisJIyBUaGlzIGlzIG5vdCBhIHBhdGNoLCBhbmQgd2UgYXJlIGFyZSBpbiAnbm8tcGF0Y2gnIG1vZGUgc28KKwkjIGp1c3Qga2VlcCBxdWlldC4KKwlpZiAoISRjaGtfcGF0Y2ggJiYgISRpc19wYXRjaCkgeworCQlleGl0KDApOworCX0KKworCWlmICghJGlzX3BhdGNoKSB7CisJCUVSUk9SKCJOT1RfVU5JRklFRF9ESUZGIiwKKwkJICAgICAgIkRvZXMgbm90IGFwcGVhciB0byBiZSBhIHVuaWZpZWQtZGlmZiBmb3JtYXQgcGF0Y2hcbiIpOworCX0KKwlpZiAoJGlzX3BhdGNoICYmICRjaGtfc2lnbm9mZiAmJiAkc2lnbm9mZiA9PSAwKSB7CisJCUVSUk9SKCJNSVNTSU5HX1NJR05fT0ZGIiwKKwkJICAgICAgIk1pc3NpbmcgU2lnbmVkLW9mZi1ieTogbGluZShzKVxuIik7CisJfQorCisJcHJpbnQgcmVwb3J0X2R1bXAoKTsKKwlpZiAoJHN1bW1hcnkgJiYgISgkY2xlYW4gPT0gMSAmJiAkcXVpZXQgPT0gMSkpIHsKKwkJcHJpbnQgIiRmaWxlbmFtZSAiIGlmICgkc3VtbWFyeV9maWxlKTsKKwkJcHJpbnQgInRvdGFsOiAkY250X2Vycm9yIGVycm9ycywgJGNudF93YXJuIHdhcm5pbmdzLCAiIC4KKwkJCSgoJGNoZWNrKT8gIiRjbnRfY2hrIGNoZWNrcywgIiA6ICIiKSAuCisJCQkiJGNudF9saW5lcyBsaW5lcyBjaGVja2VkXG4iOworCQlwcmludCAiXG4iIGlmICgkcXVpZXQgPT0gMCk7CisJfQorCisJaWYgKCRxdWlldCA9PSAwKSB7CisJCSMgSWYgdGhlcmUgd2VyZSB3aGl0ZXNwYWNlIGVycm9ycyB3aGljaCBjbGVhbnBhdGNoIGNhbiBmaXgKKwkJIyB0aGVuIHN1Z2dlc3QgdGhhdC4KKwkJaWYgKCRycHRfY2xlYW5lcnMpIHsKKwkJCXByaW50ICJOT1RFOiB3aGl0ZXNwYWNlIGVycm9ycyBkZXRlY3RlZCwgeW91IG1heSB3aXNoIHRvIHVzZSBzY3JpcHRzL2NsZWFucGF0Y2ggb3JcbiI7CisJCQlwcmludCAiICAgICAgc2NyaXB0cy9jbGVhbmZpbGVcblxuIjsKKwkJCSRycHRfY2xlYW5lcnMgPSAwOworCQl9CisJfQorCisJaWYgKGtleXMgJWlnbm9yZV90eXBlKSB7CisJICAgIHByaW50ICJOT1RFOiBJZ25vcmVkIG1lc3NhZ2UgdHlwZXM6IjsKKwkgICAgZm9yZWFjaCBteSAkaWdub3JlIChzb3J0IGtleXMgJWlnbm9yZV90eXBlKSB7CisJCXByaW50ICIgJGlnbm9yZSI7CisJICAgIH0KKwkgICAgcHJpbnQgIlxuIjsKKwkgICAgcHJpbnQgIlxuIiBpZiAoJHF1aWV0ID09IDApOworCX0KKworCWlmICgkY2xlYW4gPT0gMSAmJiAkcXVpZXQgPT0gMCkgeworCQlwcmludCAiJHZuYW1lIGhhcyBubyBvYnZpb3VzIHN0eWxlIHByb2JsZW1zIGFuZCBpcyByZWFkeSBmb3Igc3VibWlzc2lvbi5cbiIKKwl9CisJaWYgKCRjbGVhbiA9PSAwICYmICRxdWlldCA9PSAwKSB7CisJCXByaW50IDw8ICJFT00iOworJHZuYW1lIGhhcyBzdHlsZSBwcm9ibGVtcywgcGxlYXNlIHJldmlldy4KKworSWYgYW55IG9mIHRoZXNlIGVycm9ycyBhcmUgZmFsc2UgcG9zaXRpdmVzLCBwbGVhc2UgcmVwb3J0Cit0aGVtIHRvIHRoZSBtYWludGFpbmVyLCBzZWUgQ0hFQ0tQQVRDSCBpbiBNQUlOVEFJTkVSUy4KK0VPTQorCX0KKworCXJldHVybiAkY2xlYW47Cit9CmRpZmYgLS1naXQgYS90b29scy9teHNib290LmMgYi90b29scy9teHNib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2NzUzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL214c2Jvb3QuYwpAQCAtMCwwICsxLDY4NCBAQAorLyoKKyAqIEZyZWVzY2FsZSBpLk1YMjggaW1hZ2UgZ2VuZXJhdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKiBvbiBiZWhhbGYgb2YgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tcGlsZXIuaCIKKworLyoKKyAqIERlZmF1bHQgQkNCIGxheW91dC4KKyAqCisgKiBUV0VBSyB0aGlzIGlmIHlvdSBoYXZlIGJsb3duIGFueSBPQ09UUCBmdXNlcy4KKyAqLworI2RlZmluZQlTVFJJREVfUEFHRVMJCTY0CisjZGVmaW5lCVNUUklERV9DT1VOVAkJNAorCisvKgorICogTGF5b3V0IGZvciAyNTZNYiBiaWcgTkFORCB3aXRoIDIwNDhiIHBhZ2Ugc2l6ZSwgNjRiIE9PQiBzaXplIGFuZAorICogMTI4a2IgZXJhc2Ugc2l6ZS4KKyAqCisgKiBUV0VBSyB0aGlzIGlmIHlvdSBoYXZlIGRpZmZlcmVudCBraW5kIG9mIE5BTkQgY2hpcC4KKyAqLwordWludDMyX3QgbmFuZF93cml0ZXNpemUgPSAyMDQ4OwordWludDMyX3QgbmFuZF9vb2JzaXplID0gNjQ7Cit1aW50MzJfdCBuYW5kX2VyYXNlc2l6ZSA9IDEyOCAqIDEwMjQ7CisKKy8qCisgKiBTZWN0b3Igb24gd2hpY2ggdGhlIFNpZ21hVGVsIGJvb3QgcGFydGl0aW9uICgweDUzKSBzdGFydHMuCisgKi8KK3VpbnQzMl90IHNkX3NlY3RvciA9IDIwNDg7CisKKy8qCisgKiBFYWNoIG9mIHRoZSBVLUJvb3QgYm9vdHN0cmVhbXMgaXMgYXQgbWF4aW11bSAxTUIgYmlnLgorICoKKyAqIFRXRUFLIHRoaXMgaWYsIGZvciBzb21lIHdpbGQgcmVhc29uLCB5b3UgbmVlZCB0byBib290IGJpZ2dlciBpbWFnZS4KKyAqLworI2RlZmluZQlNQVhfQk9PVFNUUkVBTV9TSVpFCSgxICogMTAyNCAqIDEwMjQpCisKKy8qIGkuTVgyOCBOQU5EIGNvbnRyb2xsZXItc3BlY2lmaWMgY29uc3RhbnRzLiBETyBOT1QgVFdFQUshICovCisjZGVmaW5lCU1YU19OQU5EX0RNQV9ERVNDUklQVE9SX0NPVU5UCQk0CisjZGVmaW5lCU1YU19OQU5EX0NIVU5LX0RBVEFfQ0hVTktfU0laRQkJNTEyCisjZGVmaW5lCU1YU19OQU5EX01FVEFEQVRBX1NJWkUJCQkxMAorI2RlZmluZQlNWFNfTkFORF9DT01NQU5EX0JVRkZFUl9TSVpFCQkzMgorCitzdHJ1Y3QgbXgyOF9uYW5kX2ZjYiB7CisJdWludDMyX3QJCWNoZWNrc3VtOworCXVpbnQzMl90CQlmaW5nZXJwcmludDsKKwl1aW50MzJfdAkJdmVyc2lvbjsKKwlzdHJ1Y3QgeworCQl1aW50OF90CQkJZGF0YV9zZXR1cDsKKwkJdWludDhfdAkJCWRhdGFfaG9sZDsKKwkJdWludDhfdAkJCWFkZHJlc3Nfc2V0dXA7CisJCXVpbnQ4X3QJCQlkc2FtcGxlX3RpbWU7CisJCXVpbnQ4X3QJCQluYW5kX3RpbWluZ19zdGF0ZTsKKwkJdWludDhfdAkJCXJlYTsKKwkJdWludDhfdAkJCXJsb2g7CisJCXVpbnQ4X3QJCQlyaG9oOworCX0JCQl0aW1pbmc7CisJdWludDMyX3QJCXBhZ2VfZGF0YV9zaXplOworCXVpbnQzMl90CQl0b3RhbF9wYWdlX3NpemU7CisJdWludDMyX3QJCXNlY3RvcnNfcGVyX2Jsb2NrOworCXVpbnQzMl90CQludW1iZXJfb2ZfbmFuZHM7CQkvKiBJZ25vcmVkICovCisJdWludDMyX3QJCXRvdGFsX2ludGVybmFsX2RpZTsJCS8qIElnbm9yZWQgKi8KKwl1aW50MzJfdAkJY2VsbF90eXBlOwkJCS8qIElnbm9yZWQgKi8KKwl1aW50MzJfdAkJZWNjX2Jsb2NrX25fZWNjX3R5cGU7CisJdWludDMyX3QJCWVjY19ibG9ja18wX3NpemU7CisJdWludDMyX3QJCWVjY19ibG9ja19uX3NpemU7CisJdWludDMyX3QJCWVjY19ibG9ja18wX2VjY190eXBlOworCXVpbnQzMl90CQltZXRhZGF0YV9ieXRlczsKKwl1aW50MzJfdAkJbnVtX2VjY19ibG9ja3NfcGVyX3BhZ2U7CisJdWludDMyX3QJCWVjY19ibG9ja19uX2VjY19sZXZlbF9zZGs7CS8qIElnbm9yZWQgKi8KKwl1aW50MzJfdAkJZWNjX2Jsb2NrXzBfc2l6ZV9zZGs7CQkvKiBJZ25vcmVkICovCisJdWludDMyX3QJCWVjY19ibG9ja19uX3NpemVfc2RrOwkJLyogSWdub3JlZCAqLworCXVpbnQzMl90CQllY2NfYmxvY2tfMF9lY2NfbGV2ZWxfc2RrOwkvKiBJZ25vcmVkICovCisJdWludDMyX3QJCW51bV9lY2NfYmxvY2tzX3Blcl9wYWdlX3NkazsJLyogSWdub3JlZCAqLworCXVpbnQzMl90CQltZXRhZGF0YV9ieXRlc19zZGs7CQkvKiBJZ25vcmVkICovCisJdWludDMyX3QJCWVyYXNlX3RocmVzaG9sZDsKKwl1aW50MzJfdAkJYm9vdF9wYXRjaDsKKwl1aW50MzJfdAkJcGF0Y2hfc2VjdG9yczsKKwl1aW50MzJfdAkJZmlybXdhcmUxX3N0YXJ0aW5nX3NlY3RvcjsKKwl1aW50MzJfdAkJZmlybXdhcmUyX3N0YXJ0aW5nX3NlY3RvcjsKKwl1aW50MzJfdAkJc2VjdG9yc19pbl9maXJtd2FyZTE7CisJdWludDMyX3QJCXNlY3RvcnNfaW5fZmlybXdhcmUyOworCXVpbnQzMl90CQlkYmJ0X3NlYXJjaF9hcmVhX3N0YXJ0X2FkZHJlc3M7CisJdWludDMyX3QJCWJhZGJsb2NrX21hcmtlcl9ieXRlOworCXVpbnQzMl90CQliYWRibG9ja19tYXJrZXJfc3RhcnRfYml0OworCXVpbnQzMl90CQliYl9tYXJrZXJfcGh5c2ljYWxfb2Zmc2V0OworfTsKKworc3RydWN0IG14MjhfbmFuZF9kYmJ0IHsKKwl1aW50MzJfdAkJY2hlY2tzdW07CisJdWludDMyX3QJCWZpbmdlcnByaW50OworCXVpbnQzMl90CQl2ZXJzaW9uOworCXVpbnQzMl90CQludW1iZXJfYmI7CisJdWludDMyX3QJCW51bWJlcl8ya19wYWdlc19iYjsKK307CisKK3N0cnVjdCBteDI4X25hbmRfYmJ0IHsKKwl1aW50MzJfdAkJbmFuZDsKKwl1aW50MzJfdAkJbnVtYmVyX2JiOworCXVpbnQzMl90CQliYWRibG9ja1s1MTBdOworfTsKKworc3RydWN0IG14Mjhfc2RfZHJpdmVfaW5mbyB7CisJdWludDMyX3QJCWNoaXBfbnVtOworCXVpbnQzMl90CQlkcml2ZV90eXBlOworCXVpbnQzMl90CQl0YWc7CisJdWludDMyX3QJCWZpcnN0X3NlY3Rvcl9udW1iZXI7CisJdWludDMyX3QJCXNlY3Rvcl9jb3VudDsKK307CisKK3N0cnVjdCBteDI4X3NkX2NvbmZpZ19ibG9jayB7CisJdWludDMyX3QJCQlzaWduYXR1cmU7CisJdWludDMyX3QJCQlwcmltYXJ5X2Jvb3RfdGFnOworCXVpbnQzMl90CQkJc2Vjb25kYXJ5X2Jvb3RfdGFnOworCXVpbnQzMl90CQkJbnVtX2NvcGllczsKKwlzdHJ1Y3QgbXgyOF9zZF9kcml2ZV9pbmZvCWRydl9pbmZvWzFdOworfTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBteDI4X25hbmRfZWNjX3NpemVfaW5fYml0cyh1aW50MzJfdCBlY2Nfc3RyZW5ndGgpCit7CisJcmV0dXJuIGVjY19zdHJlbmd0aCAqIDEzOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG14MjhfbmFuZF9nZXRfZWNjX3N0cmVuZ3RoKHVpbnQzMl90IHBhZ2VfZGF0YV9zaXplLAorCQkJCQkJdWludDMyX3QgcGFnZV9vb2Jfc2l6ZSkKK3sKKwlpZiAocGFnZV9kYXRhX3NpemUgPT0gMjA0OCkKKwkJcmV0dXJuIDg7CisKKwlpZiAocGFnZV9kYXRhX3NpemUgPT0gNDA5NikgeworCQlpZiAocGFnZV9vb2Jfc2l6ZSA9PSAxMjgpCisJCQlyZXR1cm4gODsKKworCQlpZiAocGFnZV9vb2Jfc2l6ZSA9PSAyMTgpCisJCQlyZXR1cm4gMTY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbXgyOF9uYW5kX2dldF9tYXJrX29mZnNldCh1aW50MzJfdCBwYWdlX2RhdGFfc2l6ZSwKKwkJCQkJCXVpbnQzMl90IGVjY19zdHJlbmd0aCkKK3sKKwl1aW50MzJfdCBjaHVua19kYXRhX3NpemVfaW5fYml0czsKKwl1aW50MzJfdCBjaHVua19lY2Nfc2l6ZV9pbl9iaXRzOworCXVpbnQzMl90IGNodW5rX3RvdGFsX3NpemVfaW5fYml0czsKKwl1aW50MzJfdCBibG9ja19tYXJrX2NodW5rX251bWJlcjsKKwl1aW50MzJfdCBibG9ja19tYXJrX2NodW5rX2JpdF9vZmZzZXQ7CisJdWludDMyX3QgYmxvY2tfbWFya19iaXRfb2Zmc2V0OworCisJY2h1bmtfZGF0YV9zaXplX2luX2JpdHMgPSBNWFNfTkFORF9DSFVOS19EQVRBX0NIVU5LX1NJWkUgKiA4OworCWNodW5rX2VjY19zaXplX2luX2JpdHMgID0gbXgyOF9uYW5kX2VjY19zaXplX2luX2JpdHMoZWNjX3N0cmVuZ3RoKTsKKworCWNodW5rX3RvdGFsX3NpemVfaW5fYml0cyA9CisJCQljaHVua19kYXRhX3NpemVfaW5fYml0cyArIGNodW5rX2VjY19zaXplX2luX2JpdHM7CisKKwkvKiBDb21wdXRlIHRoZSBiaXQgb2Zmc2V0IG9mIHRoZSBibG9jayBtYXJrIHdpdGhpbiB0aGUgcGh5c2ljYWwgcGFnZS4gKi8KKwlibG9ja19tYXJrX2JpdF9vZmZzZXQgPSBwYWdlX2RhdGFfc2l6ZSAqIDg7CisKKwkvKiBTdWJ0cmFjdCB0aGUgbWV0YWRhdGEgYml0cy4gKi8KKwlibG9ja19tYXJrX2JpdF9vZmZzZXQgLT0gTVhTX05BTkRfTUVUQURBVEFfU0laRSAqIDg7CisKKwkvKgorCSAqIENvbXB1dGUgdGhlIGNodW5rIG51bWJlciAoc3RhcnRpbmcgYXQgemVybykgaW4gd2hpY2ggdGhlIGJsb2NrIG1hcmsKKwkgKiBhcHBlYXJzLgorCSAqLworCWJsb2NrX21hcmtfY2h1bmtfbnVtYmVyID0KKwkJCWJsb2NrX21hcmtfYml0X29mZnNldCAvIGNodW5rX3RvdGFsX3NpemVfaW5fYml0czsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgYml0IG9mZnNldCBvZiB0aGUgYmxvY2sgbWFyayB3aXRoaW4gaXRzIGNodW5rLCBhbmQKKwkgKiB2YWxpZGF0ZSBpdC4KKwkgKi8KKwlibG9ja19tYXJrX2NodW5rX2JpdF9vZmZzZXQgPSBibG9ja19tYXJrX2JpdF9vZmZzZXQgLQorCQkJKGJsb2NrX21hcmtfY2h1bmtfbnVtYmVyICogY2h1bmtfdG90YWxfc2l6ZV9pbl9iaXRzKTsKKworCWlmIChibG9ja19tYXJrX2NodW5rX2JpdF9vZmZzZXQgPiBjaHVua19kYXRhX3NpemVfaW5fYml0cykKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGtub3cgdGhlIGNodW5rIG51bWJlciBpbiB3aGljaCB0aGUgYmxvY2sgbWFyayBhcHBlYXJzLAorCSAqIHdlIGNhbiBzdWJ0cmFjdCBhbGwgdGhlIEVDQyBiaXRzIHRoYXQgYXBwZWFyIGJlZm9yZSBpdC4KKwkgKi8KKwlibG9ja19tYXJrX2JpdF9vZmZzZXQgLT0KKwkJYmxvY2tfbWFya19jaHVua19udW1iZXIgKiBjaHVua19lY2Nfc2l6ZV9pbl9iaXRzOworCisJcmV0dXJuIGJsb2NrX21hcmtfYml0X29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBteDI4X25hbmRfbWFya19ieXRlX29mZnNldCh2b2lkKQoreworCXVpbnQzMl90IGVjY19zdHJlbmd0aDsKKwllY2Nfc3RyZW5ndGggPSBteDI4X25hbmRfZ2V0X2VjY19zdHJlbmd0aChuYW5kX3dyaXRlc2l6ZSwgbmFuZF9vb2JzaXplKTsKKwlyZXR1cm4gbXgyOF9uYW5kX2dldF9tYXJrX29mZnNldChuYW5kX3dyaXRlc2l6ZSwgZWNjX3N0cmVuZ3RoKSA+PiAzOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG14MjhfbmFuZF9tYXJrX2JpdF9vZmZzZXQodm9pZCkKK3sKKwl1aW50MzJfdCBlY2Nfc3RyZW5ndGg7CisJZWNjX3N0cmVuZ3RoID0gbXgyOF9uYW5kX2dldF9lY2Nfc3RyZW5ndGgobmFuZF93cml0ZXNpemUsIG5hbmRfb29ic2l6ZSk7CisJcmV0dXJuIG14MjhfbmFuZF9nZXRfbWFya19vZmZzZXQobmFuZF93cml0ZXNpemUsIGVjY19zdHJlbmd0aCkgJiAweDc7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBteDI4X25hbmRfYmxvY2tfY3N1bSh1aW50OF90ICpibG9jaywgdWludDMyX3Qgc2l6ZSkKK3sKKwl1aW50MzJfdCBjc3VtID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWNzdW0gKz0gYmxvY2tbaV07CisKKwlyZXR1cm4gY3N1bSBeIDB4ZmZmZmZmZmY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXgyOF9uYW5kX2ZjYiAqbXgyOF9uYW5kX2dldF9mY2IodWludDMyX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbXgyOF9uYW5kX2ZjYiAqZmNiOworCXVpbnQzMl90IGJjYl9zaXplX2J5dGVzOworCXVpbnQzMl90IHN0cmlkZV9zaXplX2J5dGVzOworCXVpbnQzMl90IGJvb3RzdHJlYW1fc2l6ZV9wYWdlczsKKwl1aW50MzJfdCBmdzFfc3RhcnRfcGFnZTsKKwl1aW50MzJfdCBmdzJfc3RhcnRfcGFnZTsKKworCWZjYiA9IG1hbGxvYyhuYW5kX3dyaXRlc2l6ZSk7CisJaWYgKCFmY2IpIHsKKwkJcHJpbnRmKCJNWDI4IE5BTkQ6IFVuYWJsZSB0byBhbGxvY2F0ZSBGQ0JcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltZW1zZXQoZmNiLCAwLCBuYW5kX3dyaXRlc2l6ZSk7CisKKwlmY2ItPmZpbmdlcnByaW50ID0JCQkweDIwNDI0MzQ2OworCWZjYi0+dmVyc2lvbiA9CQkJCTB4MDEwMDAwMDA7CisKKwkvKgorCSAqIEZJWE1FOiBUaGVzZSBoZXJlIGFyZSBkZWZhdWx0IHZhbHVlcyBhcyBmb3VuZCBpbiBrb2JzLW5nLiBXZSBzaG91bGQKKwkgKiBwcm9iYWJseSByZXRyaWV2ZSB0aGUgZGF0YSBmcm9tIE5BTkQgb3Igc29tZXRoaW5nLgorCSAqLworCWZjYi0+dGltaW5nLmRhdGFfc2V0dXAgPQkJODA7CisJZmNiLT50aW1pbmcuZGF0YV9ob2xkID0JCQk2MDsKKwlmY2ItPnRpbWluZy5hZGRyZXNzX3NldHVwID0JCTI1OworCWZjYi0+dGltaW5nLmRzYW1wbGVfdGltZSA9CQk2OworCisJZmNiLT5wYWdlX2RhdGFfc2l6ZSA9CQluYW5kX3dyaXRlc2l6ZTsKKwlmY2ItPnRvdGFsX3BhZ2Vfc2l6ZSA9CQluYW5kX3dyaXRlc2l6ZSArIG5hbmRfb29ic2l6ZTsKKwlmY2ItPnNlY3RvcnNfcGVyX2Jsb2NrID0JbmFuZF9lcmFzZXNpemUgLyBuYW5kX3dyaXRlc2l6ZTsKKworCWZjYi0+bnVtX2VjY19ibG9ja3NfcGVyX3BhZ2UgPQkobmFuZF93cml0ZXNpemUgLyA1MTIpIC0gMTsKKwlmY2ItPmVjY19ibG9ja18wX3NpemUgPQkJNTEyOworCWZjYi0+ZWNjX2Jsb2NrX25fc2l6ZSA9CQk1MTI7CisJZmNiLT5tZXRhZGF0YV9ieXRlcyA9CQkxMDsKKworCWlmIChuYW5kX3dyaXRlc2l6ZSA9PSAyMDQ4KSB7CisJCWZjYi0+ZWNjX2Jsb2NrX25fZWNjX3R5cGUgPQkJNDsKKwkJZmNiLT5lY2NfYmxvY2tfMF9lY2NfdHlwZSA9CQk0OworCX0gZWxzZSBpZiAobmFuZF93cml0ZXNpemUgPT0gNDA5NikgeworCQlpZiAobmFuZF9vb2JzaXplID09IDEyOCkgeworCQkJZmNiLT5lY2NfYmxvY2tfbl9lY2NfdHlwZSA9CTQ7CisJCQlmY2ItPmVjY19ibG9ja18wX2VjY190eXBlID0JNDsKKwkJfSBlbHNlIGlmIChuYW5kX29vYnNpemUgPT0gMjE4KSB7CisJCQlmY2ItPmVjY19ibG9ja19uX2VjY190eXBlID0JODsKKwkJCWZjYi0+ZWNjX2Jsb2NrXzBfZWNjX3R5cGUgPQk4OworCQl9CisJfQorCisJaWYgKGZjYi0+ZWNjX2Jsb2NrX25fZWNjX3R5cGUgPT0gMCkgeworCQlwcmludGYoIk1YMjggTkFORDogVW5zdXBwb3J0ZWQgTkFORCBnZW9tZXRyeVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWZjYi0+Ym9vdF9wYXRjaCA9CQkJMDsKKwlmY2ItPnBhdGNoX3NlY3RvcnMgPQkJCTA7CisKKwlmY2ItPmJhZGJsb2NrX21hcmtlcl9ieXRlID0JbXgyOF9uYW5kX21hcmtfYnl0ZV9vZmZzZXQoKTsKKwlmY2ItPmJhZGJsb2NrX21hcmtlcl9zdGFydF9iaXQgPSBteDI4X25hbmRfbWFya19iaXRfb2Zmc2V0KCk7CisJZmNiLT5iYl9tYXJrZXJfcGh5c2ljYWxfb2Zmc2V0ID0gbmFuZF93cml0ZXNpemU7CisKKwlzdHJpZGVfc2l6ZV9ieXRlcyA9IFNUUklERV9QQUdFUyAqIG5hbmRfd3JpdGVzaXplOworCWJjYl9zaXplX2J5dGVzID0gc3RyaWRlX3NpemVfYnl0ZXMgKiBTVFJJREVfQ09VTlQ7CisKKwlib290c3RyZWFtX3NpemVfcGFnZXMgPSAoc2l6ZSArIChuYW5kX3dyaXRlc2l6ZSAtIDEpKSAvCisJCQkJCW5hbmRfd3JpdGVzaXplOworCisJZncxX3N0YXJ0X3BhZ2UgPSAyICogYmNiX3NpemVfYnl0ZXMgLyBuYW5kX3dyaXRlc2l6ZTsKKwlmdzJfc3RhcnRfcGFnZSA9ICgyICogYmNiX3NpemVfYnl0ZXMgKyBNQVhfQk9PVFNUUkVBTV9TSVpFKSAvCisJCQkJbmFuZF93cml0ZXNpemU7CisKKwlmY2ItPmZpcm13YXJlMV9zdGFydGluZ19zZWN0b3IgPQlmdzFfc3RhcnRfcGFnZTsKKwlmY2ItPmZpcm13YXJlMl9zdGFydGluZ19zZWN0b3IgPQlmdzJfc3RhcnRfcGFnZTsKKwlmY2ItPnNlY3RvcnNfaW5fZmlybXdhcmUxID0JCWJvb3RzdHJlYW1fc2l6ZV9wYWdlczsKKwlmY2ItPnNlY3RvcnNfaW5fZmlybXdhcmUyID0JCWJvb3RzdHJlYW1fc2l6ZV9wYWdlczsKKworCWZjYi0+ZGJidF9zZWFyY2hfYXJlYV9zdGFydF9hZGRyZXNzID0JU1RSSURFX1BBR0VTICogU1RSSURFX0NPVU5UOworCisJcmV0dXJuIGZjYjsKKworZXJyOgorCWZyZWUoZmNiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBteDI4X25hbmRfZGJidCAqbXgyOF9uYW5kX2dldF9kYmJ0KHZvaWQpCit7CisJc3RydWN0IG14MjhfbmFuZF9kYmJ0ICpkYmJ0OworCisJZGJidCA9IG1hbGxvYyhuYW5kX3dyaXRlc2l6ZSk7CisJaWYgKCFkYmJ0KSB7CisJCXByaW50ZigiTVgyOCBOQU5EOiBVbmFibGUgdG8gYWxsb2NhdGUgREJCVFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbXNldChkYmJ0LCAwLCBuYW5kX3dyaXRlc2l6ZSk7CisKKwlkYmJ0LT5maW5nZXJwcmludAk9IDB4NTQ0MjQyNDQ7CisJZGJidC0+dmVyc2lvbgkJPSAweDE7CisKKwlyZXR1cm4gZGJidDsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IG14MjhfbmFuZF9wYXJpdHlfMTNfOChjb25zdCB1aW50OF90IGIpCit7CisJdWludDMyX3QgcGFyaXR5ID0gMCwgdG1wOworCisJdG1wID0gKChiID4+IDYpIF4gKGIgPj4gNSkgXiAoYiA+PiAzKSBeIChiID4+IDIpKSAmIDE7CisJcGFyaXR5IHw9IHRtcCA8PCAwOworCisJdG1wID0gKChiID4+IDcpIF4gKGIgPj4gNSkgXiAoYiA+PiA0KSBeIChiID4+IDIpIF4gKGIgPj4gMSkpICYgMTsKKwlwYXJpdHkgfD0gdG1wIDw8IDE7CisKKwl0bXAgPSAoKGIgPj4gNykgXiAoYiA+PiA2KSBeIChiID4+IDUpIF4gKGIgPj4gMSkgXiAoYiA+PiAwKSkgJiAxOworCXBhcml0eSB8PSB0bXAgPDwgMjsKKworCXRtcCA9ICgoYiA+PiA3KSBeIChiID4+IDQpIF4gKGIgPj4gMykgXiAoYiA+PiAwKSkgJiAxOworCXBhcml0eSB8PSB0bXAgPDwgMzsKKworCXRtcCA9ICgoYiA+PiA2KSBeIChiID4+IDQpIF4gKGIgPj4gMykgXgorCQkoYiA+PiAyKSBeIChiID4+IDEpIF4gKGIgPj4gMCkpICYgMTsKKwlwYXJpdHkgfD0gdG1wIDw8IDQ7CisKKwlyZXR1cm4gcGFyaXR5OworfQorCitzdGF0aWMgdWludDhfdCAqbXgyOF9uYW5kX2ZjYl9ibG9jayhzdHJ1Y3QgbXgyOF9uYW5kX2ZjYiAqZmNiKQoreworCXVpbnQ4X3QgKmJsb2NrOworCXVpbnQ4X3QgKmVjYzsKKwlpbnQgaTsKKworCWJsb2NrID0gbWFsbG9jKG5hbmRfd3JpdGVzaXplICsgbmFuZF9vb2JzaXplKTsKKwlpZiAoIWJsb2NrKSB7CisJCXByaW50ZigiTVgyOCBOQU5EOiBVbmFibGUgdG8gYWxsb2NhdGUgRkNCIGJsb2NrXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KGJsb2NrLCAwLCBuYW5kX3dyaXRlc2l6ZSArIG5hbmRfb29ic2l6ZSk7CisKKwkvKiBVcGRhdGUgdGhlIEZDQiBjaGVja3N1bSAqLworCWZjYi0+Y2hlY2tzdW0gPSBteDI4X25hbmRfYmxvY2tfY3N1bSgoKHVpbnQ4X3QgKilmY2IpICsgNCwgNTA4KTsKKworCS8qIEZpZ3VyZSAxMi0xMS4gaW4gaU1YMjhSTSwgcmV2LiAxLCBzYXlzIEZDQiBpcyBhdCBvZmZzZXQgMTIgKi8KKwltZW1jcHkoYmxvY2sgKyAxMiwgZmNiLCBzaXplb2Yoc3RydWN0IG14MjhfbmFuZF9mY2IpKTsKKworCS8qIEVDQyBpcyBhdCBvZmZzZXQgMTIgKyA1MTIgKi8KKwllY2MgPSBibG9jayArIDEyICsgNTEyOworCisJLyogQ29tcHV0ZSB0aGUgRUNDIHBhcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IG14MjhfbmFuZF9mY2IpOyBpKyspCisJCWVjY1tpXSA9IG14MjhfbmFuZF9wYXJpdHlfMTNfOChibG9ja1tpICsgMTJdKTsKKworCXJldHVybiBibG9jazsKK30KKworc3RhdGljIGludCBteDI4X25hbmRfd3JpdGVfZmNiKHN0cnVjdCBteDI4X25hbmRfZmNiICpmY2IsIGNoYXIgKmJ1ZikKK3sKKwl1aW50MzJfdCBvZmZzZXQ7CisJdWludDhfdCAqZmNiYmxvY2s7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlmY2JibG9jayA9IG14MjhfbmFuZF9mY2JfYmxvY2soZmNiKTsKKwlpZiAoIWZjYmJsb2NrKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1RSSURFX1BBR0VTICogU1RSSURFX0NPVU5UOyBpICs9IFNUUklERV9QQUdFUykgeworCQlvZmZzZXQgPSBpICogbmFuZF93cml0ZXNpemU7CisJCW1lbWNweShidWYgKyBvZmZzZXQsIGZjYmJsb2NrLCBuYW5kX3dyaXRlc2l6ZSArIG5hbmRfb29ic2l6ZSk7CisJfQorCisJZnJlZShmY2JibG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBteDI4X25hbmRfd3JpdGVfZGJidChzdHJ1Y3QgbXgyOF9uYW5kX2RiYnQgKmRiYnQsIGNoYXIgKmJ1ZikKK3sKKwl1aW50MzJfdCBvZmZzZXQ7CisJaW50IGkgPSBTVFJJREVfUEFHRVMgKiBTVFJJREVfQ09VTlQ7CisKKwlmb3IgKDsgaSA8IDIgKiBTVFJJREVfUEFHRVMgKiBTVFJJREVfQ09VTlQ7IGkgKz0gU1RSSURFX1BBR0VTKSB7CisJCW9mZnNldCA9IGkgKiBuYW5kX3dyaXRlc2l6ZTsKKwkJbWVtY3B5KGJ1ZiArIG9mZnNldCwgZGJidCwgc2l6ZW9mKHN0cnVjdCBteDI4X25hbmRfZGJidCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14MjhfbmFuZF93cml0ZV9maXJtd2FyZShzdHJ1Y3QgbXgyOF9uYW5kX2ZjYiAqZmNiLCBpbnQgaW5mZCwKKwkJCQkJY2hhciAqYnVmKQoreworCWludCByZXQ7CisJb2ZmX3Qgc2l6ZTsKKwl1aW50MzJfdCBvZmZzZXQxLCBvZmZzZXQyOworCisJc2l6ZSA9IGxzZWVrKGluZmQsIDAsIFNFRUtfRU5EKTsKKwlsc2VlayhpbmZkLCAwLCBTRUVLX1NFVCk7CisKKwlvZmZzZXQxID0gZmNiLT5maXJtd2FyZTFfc3RhcnRpbmdfc2VjdG9yICogbmFuZF93cml0ZXNpemU7CisJb2Zmc2V0MiA9IGZjYi0+ZmlybXdhcmUyX3N0YXJ0aW5nX3NlY3RvciAqIG5hbmRfd3JpdGVzaXplOworCisJcmV0ID0gcmVhZChpbmZkLCBidWYgKyBvZmZzZXQxLCBzaXplKTsKKwlpZiAocmV0ICE9IHNpemUpCisJCXJldHVybiAtMTsKKworCW1lbWNweShidWYgKyBvZmZzZXQyLCBidWYgKyBvZmZzZXQxLCBzaXplKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHVzYWdlKHZvaWQpCit7CisJcHJpbnRmKAorCQkiVXNhZ2U6IG14MjhpbWFnZSBbb3BzXSA8dHlwZT4gPGluZmlsZT4gPG91dGZpbGU+XG4iCisJCSJBdWdtZW50IEJvb3RTdHJlYW0gZmlsZSB3aXRoIGEgcHJvcGVyIGhlYWRlciBmb3IgaS5NWDI4IGJvb3RcbiIKKwkJIlxuIgorCQkiICA8dHlwZT4JdHlwZSBvZiBpbWFnZTpcbiIKKwkJIiAgICAgICAgICAgICAgICAgXCJuYW5kXCIgZm9yIE5BTkQgaW1hZ2VcbiIKKwkJIiAgICAgICAgICAgICAgICAgXCJzZFwiIGZvciBTRCBpbWFnZVxuIgorCQkiICA8aW5maWxlPiAgICAgaW5wdXQgZmlsZSwgdGhlIHUtYm9vdC5zYiBib290c3RyZWFtXG4iCisJCSIgIDxvdXRmaWxlPiAgICBvdXRwdXQgZmlsZSwgdGhlIGJvb3RhYmxlIGltYWdlXG4iCisJCSJcbiIpOworCXByaW50ZigKKwkJIkZvciBOQU5EIGJvb3QsIHRoZXNlIG9wdGlvbnMgYXJlIGFjY2VwdGVkOlxuIgorCQkiICAtdyA8c2l6ZT4gICAgTkFORCBwYWdlIHNpemVcbiIKKwkJIiAgLW8gPHNpemU+ICAgIE5BTkQgT09CIHNpemVcbiIKKwkJIiAgLWUgPHNpemU+ICAgIE5BTkQgZXJhc2Ugc2l6ZVxuIgorCQkiXG4iCisJCSJGb3IgU0QgYm9vdCwgdGhlc2Ugb3B0aW9ucyBhcmUgYWNjZXB0ZWQ6XG4iCisJCSIgIC1wIDxzZWN0b3I+ICBTZWN0b3Igd2hlcmUgdGhlIFNHVEwgcGFydGl0aW9uIHN0YXJ0c1xuIgorCSk7Cit9CisKK3N0YXRpYyBpbnQgbXgyOF9jcmVhdGVfbmFuZF9pbWFnZShpbnQgaW5mZCwgaW50IG91dGZkKQoreworCXN0cnVjdCBteDI4X25hbmRfZmNiICpmY2I7CisJc3RydWN0IG14MjhfbmFuZF9kYmJ0ICpkYmJ0OworCWludCByZXQgPSAtMTsKKwljaGFyICpidWY7CisJaW50IHNpemU7CisJc3NpemVfdCB3cl9zaXplOworCisJc2l6ZSA9IG5hbmRfd3JpdGVzaXplICogNTEyICsgMiAqIE1BWF9CT09UU1RSRUFNX1NJWkU7CisKKwlidWYgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRmKCJDYW4gbm90IGFsbG9jYXRlIG91dHB1dCBidWZmZXIgb2YgJWQgYnl0ZXNcbiIsIHNpemUpOworCQlnb3RvIGVycjA7CisJfQorCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7CisKKwlmY2IgPSBteDI4X25hbmRfZ2V0X2ZjYihNQVhfQk9PVFNUUkVBTV9TSVpFKTsKKwlpZiAoIWZjYikgeworCQlwcmludGYoIlVuYWJsZSB0byBjb21waWxlIEZDQlxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlkYmJ0ID0gbXgyOF9uYW5kX2dldF9kYmJ0KCk7CisJaWYgKCFkYmJ0KSB7CisJCXByaW50ZigiVW5hYmxlIHRvIGNvbXBpbGUgREJCVFxuIik7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlyZXQgPSBteDI4X25hbmRfd3JpdGVfZmNiKGZjYiwgYnVmKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiVW5hYmxlIHRvIHdyaXRlIEZDQiB0byBidWZmZXJcbiIpOworCQlnb3RvIGVycjM7CisJfQorCisJcmV0ID0gbXgyOF9uYW5kX3dyaXRlX2RiYnQoZGJidCwgYnVmKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiVW5hYmxlIHRvIHdyaXRlIERCQlQgdG8gYnVmZmVyXG4iKTsKKwkJZ290byBlcnIzOworCX0KKworCXJldCA9IG14MjhfbmFuZF93cml0ZV9maXJtd2FyZShmY2IsIGluZmQsIGJ1Zik7CisJaWYgKHJldCkgeworCQlwcmludGYoIlVuYWJsZSB0byB3cml0ZSBmaXJtd2FyZSB0byBidWZmZXJcbiIpOworCQlnb3RvIGVycjM7CisJfQorCisJd3Jfc2l6ZSA9IHdyaXRlKG91dGZkLCBidWYsIHNpemUpOworCWlmICh3cl9zaXplICE9IHNpemUpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXJyMzsKKwl9CisKKwlyZXQgPSAwOworCitlcnIzOgorCWZyZWUoZGJidCk7CitlcnIyOgorCWZyZWUoZmNiKTsKK2VycjE6CisJZnJlZShidWYpOworZXJyMDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14MjhfY3JlYXRlX3NkX2ltYWdlKGludCBpbmZkLCBpbnQgb3V0ZmQpCit7CisJaW50IHJldCA9IC0xOworCXVpbnQzMl90ICpidWY7CisJaW50IHNpemU7CisJb2ZmX3QgZnNpemU7CisJc3NpemVfdCB3cl9zaXplOworCXN0cnVjdCBteDI4X3NkX2NvbmZpZ19ibG9jayAqY2I7CisKKwlmc2l6ZSA9IGxzZWVrKGluZmQsIDAsIFNFRUtfRU5EKTsKKwlsc2VlayhpbmZkLCAwLCBTRUVLX1NFVCk7CisJc2l6ZSA9IGZzaXplICsgNTEyOworCisJYnVmID0gbWFsbG9jKHNpemUpOworCWlmICghYnVmKSB7CisJCXByaW50ZigiQ2FuIG5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyIG9mICVkIGJ5dGVzXG4iLCBzaXplKTsKKwkJZ290byBlcnIwOworCX0KKworCXJldCA9IHJlYWQoaW5mZCwgKHVpbnQ4X3QgKilidWYgKyA1MTIsIGZzaXplKTsKKwlpZiAocmV0ICE9IGZzaXplKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGVycjE7CisJfQorCisJY2IgPSAoc3RydWN0IG14Mjhfc2RfY29uZmlnX2Jsb2NrICopYnVmOworCisJY2ItPnNpZ25hdHVyZSA9IDB4MDAxMTIyMzM7CisJY2ItPnByaW1hcnlfYm9vdF90YWcgPSAweDE7CisJY2ItPnNlY29uZGFyeV9ib290X3RhZyA9IDB4MTsKKwljYi0+bnVtX2NvcGllcyA9IDE7CisJY2ItPmRydl9pbmZvWzBdLmNoaXBfbnVtID0gMHgwOworCWNiLT5kcnZfaW5mb1swXS5kcml2ZV90eXBlID0gMHgwOworCWNiLT5kcnZfaW5mb1swXS50YWcgPSAweDE7CisJY2ItPmRydl9pbmZvWzBdLmZpcnN0X3NlY3Rvcl9udW1iZXIgPSBzZF9zZWN0b3IgKyAxOworCWNiLT5kcnZfaW5mb1swXS5zZWN0b3JfY291bnQgPSAoc2l6ZSAtIDEpIC8gNTEyOworCisJd3Jfc2l6ZSA9IHdyaXRlKG91dGZkLCBidWYsIHNpemUpOworCWlmICh3cl9zaXplICE9IHNpemUpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXQgPSAwOworCitlcnIxOgorCWZyZWUoYnVmKTsKK2VycjA6CisJcmV0dXJuIHJldDsKK30KKworaW50IHBhcnNlX29wcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisJaW50IHRtcDsKKwljaGFyICplbmQ7CisJZW51bSBwYXJhbSB7CisJCVBBUkFNX1dSSVRFLAorCQlQQVJBTV9PT0IsCisJCVBBUkFNX0VSQVNFLAorCQlQQVJBTV9QQVJULAorCQlQQVJBTV9TRCwKKwkJUEFSQU1fTkFORAorCX07CisJaW50IHR5cGU7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RybmNtcChhcmd2W2ldLCAiLXciLCAyKSkKKwkJCXR5cGUgPSBQQVJBTV9XUklURTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoYXJndltpXSwgIi1vIiwgMikpCisJCQl0eXBlID0gUEFSQU1fT09COworCQllbHNlIGlmICghc3RybmNtcChhcmd2W2ldLCAiLWUiLCAyKSkKKwkJCXR5cGUgPSBQQVJBTV9FUkFTRTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoYXJndltpXSwgIi1wIiwgMikpCisJCQl0eXBlID0gUEFSQU1fUEFSVDsKKwkJZWxzZQkvKiBTRC9NTUMgKi8KKwkJCWJyZWFrOworCisJCXRtcCA9IHN0cnRvbChhcmd2WysraV0sICZlbmQsIDEwKTsKKwkJaWYgKHRtcCAlIDIpCisJCQlyZXR1cm4gLTE7CisJCWlmICh0bXAgPD0gMCkKKwkJCXJldHVybiAtMTsKKworCQlpZiAodHlwZSA9PSBQQVJBTV9XUklURSkKKwkJCW5hbmRfd3JpdGVzaXplID0gdG1wOworCQlpZiAodHlwZSA9PSBQQVJBTV9PT0IpCisJCQluYW5kX29vYnNpemUgPSB0bXA7CisJCWlmICh0eXBlID09IFBBUkFNX0VSQVNFKQorCQkJbmFuZF9lcmFzZXNpemUgPSB0bXA7CisJCWlmICh0eXBlID09IFBBUkFNX1BBUlQpCisJCQlzZF9zZWN0b3IgPSB0bXA7CisJfQorCisJaWYgKHN0cmNtcChhcmd2W2ldLCAic2QiKSAmJiBzdHJjbXAoYXJndltpXSwgIm5hbmQiKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGkgKyAzICE9IGFyZ2MpCisJCXJldHVybiAtMTsKKworCXJldHVybiBpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGluZmQsIG91dGZkOworCWludCByZXQgPSAwOworCWludCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBwYXJzZV9vcHMoYXJnYywgYXJndik7CisJaWYgKG9mZnNldCA8IDApIHsKKwkJdXNhZ2UoKTsKKwkJcmV0ID0gMTsKKwkJZ290byBlcnIxOworCX0KKworCWluZmQgPSBvcGVuKGFyZ3Zbb2Zmc2V0ICsgMV0sIE9fUkRPTkxZKTsKKwlpZiAoaW5mZCA8IDApIHsKKwkJcHJpbnRmKCJJbnB1dCBCb290U3RyZWFtIGZpbGUgY2FuIG5vdCBiZSBvcGVuZWRcbiIpOworCQlyZXQgPSAyOworCQlnb3RvIGVycjE7CisJfQorCisJb3V0ZmQgPSBvcGVuKGFyZ3Zbb2Zmc2V0ICsgMl0sIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFksCisJCQkJCVNfSVJVU1IgfCBTX0lXVVNSKTsKKwlpZiAob3V0ZmQgPCAwKSB7CisJCXByaW50ZigiT3V0cHV0IGZpbGUgY2FuIG5vdCBiZSBjcmVhdGVkXG4iKTsKKwkJcmV0ID0gMzsKKwkJZ290byBlcnIyOworCX0KKworCWlmICghc3RyY21wKGFyZ3Zbb2Zmc2V0XSwgInNkIikpCisJCXJldCA9IG14MjhfY3JlYXRlX3NkX2ltYWdlKGluZmQsIG91dGZkKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3Zbb2Zmc2V0XSwgIm5hbmQiKSkKKwkJcmV0ID0gbXgyOF9jcmVhdGVfbmFuZF9pbWFnZShpbmZkLCBvdXRmZCk7CisKKwljbG9zZShvdXRmZCk7CitlcnIyOgorCWNsb3NlKGluZmQpOworZXJyMToKKwlyZXR1cm4gcmV0OworfQo=